diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index 9b3a584bbab..5975ba2b592 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -216,15 +216,14 @@ max_plugins="--with-plugins=max" max_no_embedded_configs="$max_plugins" max_no_qc_configs="$max_plugins --without-query-cache" max_configs="$max_plugins --with-embedded-server --with-libevent --with-plugin-rocksdb=dynamic --with-plugin-test_sql_discovery=DYNAMIC --with-plugin-file_key_management=DYNAMIC --with-plugin-hashicorp_key_management=DYNAMIC --with-plugin-auth_gssapi=DYNAMIC" -all_configs="$max_plugins --with-embedded-server --with-innodb_plugin --with-libevent" +all_configs="$max_configs" # # CPU and platform specific compilation flags. # alpha_cflags="$check_cpu_cflags -Wa,-m$cpu_flag" -amd64_cflags="$check_cpu_cflags" -amd64_cxxflags="" # If dropping '--with-big-tables', add here "-DBIG_TABLES" pentium_cflags="$check_cpu_cflags -m32" +amd64_cflags="$check_cpu_cflags -m64" pentium64_cflags="$check_cpu_cflags -m64" ppc_cflags="$check_cpu_cflags" sparc_cflags="" diff --git a/BUILD/compile-amd64-debug-all b/BUILD/compile-amd64-debug-all index b8b2ed05402..66f6f3309e2 100755 --- a/BUILD/compile-amd64-debug-all +++ b/BUILD/compile-amd64-debug-all @@ -1,7 +1,10 @@ #! /bin/sh + path=`dirname $0` +set -- "$@" --with-debug=full . "$path/SETUP.sh" + extra_flags="$amd64_cflags $debug_cflags" extra_configs="$amd64_configs $debug_configs $all_configs" - +CC="$CC --pipe" . "$path/FINISH.sh" diff --git a/BUILD/compile-amd64-debug-max b/BUILD/compile-amd64-debug-max index 281f2775cb1..0af32f5decd 100755 --- a/BUILD/compile-amd64-debug-max +++ b/BUILD/compile-amd64-debug-max @@ -1,7 +1,6 @@ #! /bin/sh -# Copyright (c) 2005, 2006 MySQL AB -# Use is subject to license terms +# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,11 +13,13 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA path=`dirname $0` . "$path/SETUP.sh" + extra_flags="$amd64_cflags $debug_cflags" extra_configs="$amd64_configs $debug_configs $max_configs" +CC="$CC --pipe" . "$path/FINISH.sh" diff --git a/BUILD/compile-pentium64-debug-all b/BUILD/compile-pentium64-debug-all index 7824f7ad47f..8733ad00c02 100755 --- a/BUILD/compile-pentium64-debug-all +++ b/BUILD/compile-pentium64-debug-all @@ -6,7 +6,5 @@ set -- "$@" --with-debug=full extra_flags="$pentium64_cflags $debug_cflags" extra_configs="$pentium_configs $debug_configs $all_configs" - -extra_configs="$extra_configs " CC="$CC --pipe" . "$path/FINISH.sh" diff --git a/BUILD/compile-pentium64-debug-max b/BUILD/compile-pentium64-debug-max index 09061de6891..c68a6326e7f 100755 --- a/BUILD/compile-pentium64-debug-max +++ b/BUILD/compile-pentium64-debug-max @@ -21,6 +21,5 @@ path=`dirname $0` extra_flags="$pentium64_cflags $debug_cflags" extra_configs="$pentium_configs $debug_configs $max_configs" -extra_configs="$extra_configs " CC="$CC --pipe" . "$path/FINISH.sh" diff --git a/THIRDPARTY b/THIRDPARTY index 35bb238ed1e..87f9bb7a3b5 100644 --- a/THIRDPARTY +++ b/THIRDPARTY @@ -930,180 +930,202 @@ archived older versions of code and data; there is also a smaller HTTP mirror. *************************************************************************** %%The following software may be included in this product: -UnicodeData.txt +http://www.unicode.org/copyright.html -Use of any of this software is governed by the terms of the license below: + Unicode® Copyright and Terms of Use -Unicode Terms of Use + For the general privacy policy governing access to this site, see the Unicode Privacy Policy. - For the general privacy policy governing access to this site, see the - Unicode Privacy Policy. For trademark usage, see the Unicode - Consortium (R) Trademarks and Logo Policy. - Notice to End User: Terms of Use - Carefully read the following legal agreement ("Agreement"). Use or - copying of the software and/or codes provided with this agreement (The - "Software") constitutes your acceptance of these terms + Unicode Copyright + Copyright © 1991-2023 Unicode, Inc. All rights reserved. + Definitions - 1. Unicode Copyright. - 1. Copyright (c) 1991-2008 Unicode, Inc. All rights reserved. - 2. Certain documents and files on this website contain a - legend indicating that "Modification is permitted." Any person - is hereby authorized, without fee, to modify such documents - and files to create derivative works conforming to the - Unicode (R) Standard, subject to Terms and Conditions herein. - 3. Any person is hereby authorized, without fee, to view, use, - reproduce, and distribute all documents and files solely for - informational purposes in the creation of products supporting - the Unicode Standard, subject to the Terms and Conditions - herein. - 4. Further specifications of rights and restrictions - pertaining to the use of the particular set of data files - known as the "Unicode Character Database" can be found in - Exhibit 1. - 5. Each version of the Unicode Standard has further - specifications of rights and restrictions of use. For the book - editions, these are found on the back of the title page. For - the online edition, certain files (such as the PDF files for - book chapters and code charts) carry specific restrictions. - All other files are covered under these general Terms of Use. - To request a permission to reproduce any part of the Unicode - Standard, please contact the Unicode Consortium. - 6. No license is granted to "mirror" the Unicode website where - a fee is charged for access to the "mirror" site. - 7. Modification is not permitted with respect to this - document. All copies of this document must be verbatim. - 2. Restricted Rights Legend. Any technical data or software which is - licensed to the United States of America, its agencies and/or - instrumentalities under this Agreement is commercial technical data - or commercial computer software developed exclusively at private - expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), - as applicable. For technical data, use, duplication, or disclosure - by the Government is subject to restrictions as set forth in DFARS - 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and - this Agreement. For Software, in accordance with FAR 12-212 or DFARS - 227-7202, as applicable, use, duplication or disclosure by the - Government is subject to the restrictions set forth in this - Agreement. - 3. Warranties and Disclaimers. - 1. This publication and/or website may include technical or - typographical errors or other inaccuracies . Changes are - periodically added to the information herein; these changes - will be incorporated in new editions of the publication and/or - website. Unicode may make improvements and/or changes in the - product(s) and/or program(s) described in this publication - and/or website at any time. - 2. If this file has been purchased on magnetic or optical - media from Unicode, Inc. the sole and exclusive remedy for any - claim will be exchange of the defective media within ninety - (90) days of original purchase. - 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR - SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND - EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT - LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS - LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN - THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE - REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE - WEBSITE. - 4. Waiver of Damages. In no event shall Unicode or its licensors be - liable for any special, incidental, indirect or consequential - damages of any kind, or any damages whatsoever, whether or not - Unicode was advised of the possibility of the damage, including, - without limitation, those resulting from the following: loss of use, - data or profits, in connection with the use, modification or - distribution of this information or its derivatives. - 5. Trademarks. - 1. Unicode and the Unicode logo are registered trademarks of - Unicode, Inc. - 2. This site contains product names and corporate names of - other companies. All product names and company names and logos - mentioned herein are the trademarks or registered trademarks - of their respective owners. Other products and corporate names - mentioned herein which are trademarks of a third party are - used only for explanation and for the owners' benefit and with - no intent to infringe. - 3. Use of third party products or information referred to - herein is at the user's risk. - 6. Miscellaneous. - 1. Jurisdiction and Venue. This server is operated from a - location in the State of California, United States of America. - Unicode makes no representation that the materials are - appropriate for use in other locations. If you access this - server from other locations, you are responsible for - compliance with local laws. This Agreement, all use of this - site and any claims and damages resulting from use of this - site are governed solely by the laws of the State of - California without regard to any principles which would apply - the laws of a different jurisdiction. The user agrees that any - disputes regarding this site shall be resolved solely in the - courts located in Santa Clara County, California. The user - agrees said courts have personal jurisdiction and agree to - waive any right to transfer the dispute to any other forum. - 2. Modification by Unicode Unicode shall have the right to - modify this Agreement at any time by posting it to this site. - The user may not assign any part of this Agreement without - Unicode's prior written consent. - 3. Taxes. The user agrees to pay any taxes arising from access - to this website or use of the information herein, except for - those based on Unicode's net income. - 4. Severability. If any provision of this Agreement is - declared invalid or unenforceable, the remaining provisions of - this Agreement shall remain in effect. - 5. Entire Agreement. This Agreement constitutes the entire - agreement between the parties. + Unicode Data Files ("DATA FILES") include all data files under the directories: + https://www.unicode.org/Public/ + https://www.unicode.org/reports/ + https://www.unicode.org/ivd/data/ + + Unicode Data Files do not include PDF online code charts under the directory: + https://www.unicode.org/Public/ + + Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard + or any source code or compiled code under the directories: + https://www.unicode.org/Public/PROGRAMS/ + https://www.unicode.org/Public/cldr/ + http://site.icu-project.org/download/ + + Terms of Use + Certain documents and files on this website contain a legend + indicating that "Modification is permitted." Any person is hereby + authorized, without fee, to modify such documents and files to + create derivative works conforming to the Unicode® Standard, subject + to Terms and Conditions herein. + + Any person is hereby authorized, without fee, to view, use, + reproduce, and distribute all documents and files, subject to the + Terms and Conditions herein. + + Further specifications of rights and restrictions pertaining to the + use of the Unicode DATA FILES and SOFTWARE can be found in the + Unicode Data Files and Software License. + + Each version of the Unicode Standard has further specifications of + rights and restrictions of use. For the book editions (Unicode 5.0 + and earlier), these are found on the back of the title page. + + The Unicode PDF online code charts carry specific restrictions. + Those restrictions are incorporated as the first page of each PDF + code chart. + + All other files, including online documentation of the core + specification for Unicode 6.0 and later, are covered under these + general Terms of Use. + + No license is granted to "mirror" the Unicode website where a fee is + charged for access to the "mirror" site. + + Modification is not permitted with respect to this document. All + copies of this document must be verbatim. + + Restricted Rights Legend + + Any technical data or software which is licensed to the United + States of America, its agencies and/or instrumentalities under this + Agreement is commercial technical data or commercial computer + software developed exclusively at private expense as defined in FAR + 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For + technical data, use, duplication, or disclosure by the Government is + subject to restrictions as set forth in DFARS 202.227-7015 Technical + Data, Commercial and Items (Nov 1995) and this Agreement. For + Software, in accordance with FAR 12-212 or DFARS 227-7202, as + applicable, use, duplication or disclosure by the Government is + subject to the restrictions set forth in this Agreement. + + Warranties and Disclaimers + This publication and/or website may include technical or + typographical errors or other inaccuracies. Changes are periodically + added to the information herein; these changes will be incorporated + in new editions of the publication and/or website. Unicode, Inc. may + make improvements and/or changes in the product(s) and/or program(s) + described in this publication and/or website at any time. + + If this file has been purchased on magnetic or optical media from + Unicode, Inc. the sole and exclusive remedy for any claim will be + exchange of the defective media within ninety (90) days of original + purchase. + + EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE + IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, + IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO + RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR + SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO + THIS PUBLICATION OR THE UNICODE WEBSITE. + + Waiver of Damages + In no event shall Unicode, Inc. or its licensors be liable for any + special, incidental, indirect or consequential damages of any kind, + or any damages whatsoever, whether or not Unicode, Inc. was advised + of the possibility of the damage, including, without limitation, + those resulting from the following: loss of use, data or profits, in + connection with the use, modification or distribution of this + information or its derivatives. + + Trademarks & Logos + The Unicode Word Mark and the Unicode Logo are trademarks of + Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade + names of Unicode, Inc. Use of the information and materials found on + this website indicates your acknowledgement of Unicode, Inc.’s + exclusive worldwide rights in the Unicode Word Mark, the Unicode + Logo, and the Unicode trade names. + + The Unicode Consortium Name and Trademark Usage Policy (“Trademark + Policy”) are incorporated herein by reference and you agree to abide + by the provisions of the Trademark Policy, which may be changed from + time to time in the sole discretion of Unicode, Inc. + + All third party trademarks referenced herein are the property of + their respective owners. + + Miscellaneous + Jurisdiction and Venue. This website is operated from a location in + the State of California, United States of America. Unicode, Inc. + makes no representation that the materials are appropriate for use + in other locations. If you access this website from other locations, + you are responsible for compliance with local laws. This Agreement, + all use of this website and any claims and damages resulting from + use of this website are governed solely by the laws of the State of + California without regard to any principles which would apply the + laws of a different jurisdiction. The user agrees that any disputes + regarding this website shall be resolved solely in the courts + located in Santa Clara County, California. The user agrees said + courts have personal jurisdiction and agree to waive any right to + transfer the dispute to any other forum. + + Modification by Unicode, Inc. Unicode, Inc. shall have the right to + modify this Agreement at any time by posting it to this website. The + user may not assign any part of this Agreement without Unicode, + Inc.’s prior written consent. + + Taxes. The user agrees to pay any taxes arising from access to this + website or use of the information herein, except for those based on + Unicode’s net income. + + Severability. If any provision of this Agreement is declared + invalid or unenforceable, the remaining provisions of this Agreement + shall remain in effect. + + Entire Agreement. This Agreement constitutes the entire agreement + between the parties. EXHIBIT 1 UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, and -http://www.unicode.org/cldr/data/ . Unicode Software includes any source code -published in the Unicode Standard or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, and -http://www.unicode.org/cldr/data/. +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. - NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES -("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND -AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU -DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES -OR SOFTWARE. +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. - COPYRIGHT AND PERMISSION NOTICE +COPYRIGHT AND PERMISSION NOTICE - Copyright (c) 1991-2008 Unicode, Inc. All rights reserved. Distributed under -the Terms of Use in http://www.unicode.org/copyright.html. +Copyright © 1991-2023 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. - Permission is hereby granted, free of charge, to any person obtaining a copy -of the Unicode data files and any associated documentation (the "Data Files") or -Unicode software and any associated documentation (the "Software") to deal in -the Data Files or Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files or -Software are furnished to do so, provided that (a) the above copyright notice(s) -and this permission notice appear with all copies of the Data Files or Software, -(b) both the above copyright notice(s) and this permission notice appear in -associated documentation, and (c) there is clear notice in each modified Data -File or in the Software as well as in the documentation associated with the Data -File(s) or Software that the data or software has been modified. +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. - THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD -PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING -OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. - Except as contained in this notice, the name of a copyright holder shall not -be used in advertising or otherwise to promote the sale, use or other dealings -in these Data Files or Software without prior written authorization of the -copyright holder. - - Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be -registered in some jurisdictions. All other trademarks and registered trademarks -mentioned herein are the property of their respective owners. +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. *************************************************************************** diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 8c46ed74628..272c14f7635 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -5262,6 +5262,7 @@ void do_shutdown_server(struct st_command *command) if (!timeout || wait_until_dead(pid, timeout < 5 ? 5 : timeout)) { (void) my_kill(pid, SIGKILL); + wait_until_dead(pid, 5); } } DBUG_VOID_RETURN; diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh index b2714632e52..ff1ae1544d5 100755 --- a/debian/autobake-deb.sh +++ b/debian/autobake-deb.sh @@ -196,34 +196,39 @@ dch -b -D "${LSBNAME}" -v "${VERSION}" "Automatic build with ${LOGSTRING}." --co echo "Creating package version ${VERSION} ... " -BUILDPACKAGE_DPKGCMD="" +BUILDPACKAGE_DPKGCMD=() + +# Fakeroot test +if fakeroot true; then + BUILDPACKAGE_DPKGCMD+=( "fakeroot" "--" ) +fi # Use eatmydata is available to build faster with less I/O, skipping fsync() # during the entire build process (safe because a build can always be restarted) if which eatmydata > /dev/null then - BUILDPACKAGE_DPKGCMD="eatmydata" + BUILDPACKAGE_DPKGCMD+=("eatmydata") fi -BUILDPACKAGE_DPKGCMD+="dpkg-buildpackage" +BUILDPACKAGE_DPKGCMD+=("dpkg-buildpackage") # Using dpkg-buildpackage args # -us Allow unsigned sources # -uc Allow unsigned changes # -I Tar ignore -BUILDPACKAGE_DPKG_ARGS=(-us -uc -I) +BUILDPACKAGE_DPKGCMD+=(-us -uc -I) # There can be also extra flags that are appended to args if [ -n "$BUILDPACKAGE_FLAGS" ] then read -ra BUILDPACKAGE_TMP_ARGS <<< "$BUILDPACKAGE_FLAGS" - BUILDPACKAGE_DPKG_ARGS=("${BUILDPACKAGE_DPKG_ARGS[@]} ${BUILDPACKAGE_TMP_ARGS[@]}") + BUILDPACKAGE_DPKGCMD+=( "${BUILDPACKAGE_TMP_ARGS[@]}" ) fi # Build the package # Pass -I so that .git and other unnecessary temporary and source control files # will be ignored by dpkg-source when creating the tar.gz source package. -fakeroot -- "${BUILDPACKAGE_DPKGCMD}" "${BUILDPACKAGE_DPKG_ARGS[@]}" +"${BUILDPACKAGE_DPKGCMD[@]}" # If the step above fails due to missing dependencies, you can manually run # sudo mk-build-deps debian/control -r -i diff --git a/debian/control b/debian/control index 66f93ad7c2f..09d5dce0e6c 100644 --- a/debian/control +++ b/debian/control @@ -932,6 +932,7 @@ Depends: libxml2, unixodbc, ${misc:Depends}, ${shlibs:Depends} +Recommends: curl Breaks: mariadb-connect-engine-10.0, mariadb-connect-engine-10.1, mariadb-connect-engine-10.2, diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc index 093cffd6df7..dbf12cedd68 100644 --- a/extra/mariabackup/backup_copy.cc +++ b/extra/mariabackup/backup_copy.cc @@ -79,9 +79,8 @@ bool binlog_locked; static void rocksdb_create_checkpoint(); static bool has_rocksdb_plugin(); -static void copy_or_move_dir(const char *from, const char *to, bool copy, bool allow_hardlinks); -static void rocksdb_backup_checkpoint(); -static void rocksdb_copy_back(); +static void rocksdb_backup_checkpoint(ds_ctxt *ds_data); +static void rocksdb_copy_back(ds_ctxt *ds_data); static bool is_abs_path(const char *path) { @@ -136,7 +135,9 @@ struct datadir_thread_ctxt_t { bool ret; }; -static bool backup_files_from_datadir(const char *dir_path); +static bool backup_files_from_datadir(ds_ctxt_t *ds_data, + const char *dir_path, + const char *prefix); /************************************************************************ Retirn true if character if file separator */ @@ -807,7 +808,7 @@ if passes the rules for partial backup. @return true if file backed up or skipped successfully. */ static bool -datafile_copy_backup(const char *filepath, uint thread_n) +datafile_copy_backup(ds_ctxt *ds_data, const char *filepath, uint thread_n) { const char *ext_list[] = {"frm", "isl", "MYD", "MYI", "MAD", "MAI", "MRG", "TRG", "TRN", "ARM", "ARZ", "CSM", "CSV", "opt", "par", @@ -828,7 +829,7 @@ datafile_copy_backup(const char *filepath, uint thread_n) } if (filename_matches(filepath, ext_list)) { - return copy_file(ds_data, filepath, filepath, thread_n); + return ds_data->copy_file(filepath, filepath, thread_n); } return(true); @@ -869,7 +870,8 @@ datafile_rsync_backup(const char *filepath, bool save_to_list, FILE *f) return(true); } -bool backup_file_print_buf(const char *filename, const char *buf, int buf_len) +bool ds_ctxt_t::backup_file_print_buf(const char *filename, + const char *buf, int buf_len) { ds_file_t *dstfile = NULL; MY_STAT stat; /* unused for now */ @@ -880,7 +882,7 @@ bool backup_file_print_buf(const char *filename, const char *buf, int buf_len) stat.st_size = buf_len; stat.st_mtime = my_time(0); - dstfile = ds_open(ds_data, filename, &stat); + dstfile = ds_open(this, filename, &stat); if (dstfile == NULL) { msg("error: Can't open the destination stream for %s", filename); @@ -919,9 +921,9 @@ error_close: return true; }; -static bool -backup_file_vprintf(const char *filename, const char *fmt, va_list ap) +ds_ctxt_t::backup_file_vprintf(const char *filename, + const char *fmt, va_list ap) { char *buf = 0; int buf_len; @@ -932,7 +934,7 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap) } bool -backup_file_printf(const char *filename, const char *fmt, ...) +ds_ctxt_t::backup_file_printf(const char *filename, const char *fmt, ...) { bool result; va_list ap; @@ -1000,16 +1002,15 @@ run_data_threads(datadir_iter_t *it, void (*func)(datadir_thread_ctxt_t *ctxt), Copy file for backup/restore. @return true in case of success. */ bool -copy_file(ds_ctxt_t *datasink, - const char *src_file_path, - const char *dst_file_path, - uint thread_n) +ds_ctxt_t::copy_file(const char *src_file_path, + const char *dst_file_path, + uint thread_n) { char dst_name[FN_REFLEN]; ds_file_t *dstfile = NULL; datafile_cur_t cursor; xb_fil_cur_result_t res; - DBUG_ASSERT(datasink->datasink->remove); + DBUG_ASSERT(datasink->remove); const char *dst_path = (xtrabackup_copy_back || xtrabackup_move_back)? dst_file_path : trim_dotslash(dst_file_path); @@ -1020,7 +1021,7 @@ copy_file(ds_ctxt_t *datasink, strncpy(dst_name, cursor.rel_path, sizeof(dst_name)); - dstfile = ds_open(datasink, dst_path, &cursor.statinfo); + dstfile = ds_open(this, dst_path, &cursor.statinfo); if (dstfile == NULL) { msg(thread_n,"error: " "cannot open the destination stream for %s", dst_name); @@ -1053,7 +1054,7 @@ copy_file(ds_ctxt_t *datasink, error: datafile_close(&cursor); if (dstfile != NULL) { - datasink->datasink->remove(dstfile->path); + datasink->remove(dstfile->path); ds_close(dstfile); } @@ -1067,12 +1068,10 @@ error_close: Try to move file by renaming it. If source and destination are on different devices fall back to copy and unlink. @return true in case of success. */ -static bool -move_file(ds_ctxt_t *datasink, - const char *src_file_path, - const char *dst_file_path, - const char *dst_dir, uint thread_n) +ds_ctxt_t::move_file(const char *src_file_path, + const char *dst_file_path, + const char *dst_dir, uint thread_n) { char errbuf[MYSYS_STRERROR_SIZE]; char dst_file_path_abs[FN_REFLEN]; @@ -1099,7 +1098,7 @@ move_file(ds_ctxt_t *datasink, if (my_rename(src_file_path, dst_file_path_abs, MYF(0)) != 0) { if (my_errno == EXDEV) { /* Fallback to copy/unlink */ - if(!copy_file(datasink, src_file_path, + if(!copy_file(src_file_path, dst_file_path, thread_n)) return false; msg(thread_n,"Removing %s", src_file_path); @@ -1178,13 +1177,13 @@ Copy or move file depending on current mode. @return true in case of success. */ static bool -copy_or_move_file(const char *src_file_path, +copy_or_move_file(ds_ctxt *datasink0, const char *src_file_path, const char *dst_file_path, const char *dst_dir, uint thread_n, bool copy = xtrabackup_copy_back) { - ds_ctxt_t *datasink = ds_data; /* copy to datadir by default */ + ds_ctxt_t *datasink = datasink0; /* copy to datadir by default */ char filedir[FN_REFLEN]; size_t filedir_len; bool ret; @@ -1232,13 +1231,13 @@ copy_or_move_file(const char *src_file_path, } ret = (copy ? - copy_file(datasink, src_file_path, dst_file_path, thread_n) : - move_file(datasink, src_file_path, dst_file_path, + datasink->copy_file(src_file_path, dst_file_path, thread_n) : + datasink->move_file(src_file_path, dst_file_path, dst_dir, thread_n)); cleanup: - if (datasink != ds_data) { + if (datasink != datasink0) { ds_destroy(datasink); } @@ -1250,7 +1249,7 @@ cleanup: static bool -backup_files(const char *from, bool prep_mode) +backup_files(ds_ctxt *ds_data, const char *from, bool prep_mode) { char rsync_tmpfile_name[FN_REFLEN]; FILE *rsync_tmpfile = NULL; @@ -1288,7 +1287,7 @@ backup_files(const char *from, bool prep_mode) ret = datafile_rsync_backup(node.filepath, !prep_mode, rsync_tmpfile); } else { - ret = datafile_copy_backup(node.filepath, 1); + ret = datafile_copy_backup(ds_data, node.filepath, 1); } if (!ret) { msg("Failed to copy file %s", node.filepath); @@ -1299,7 +1298,7 @@ backup_files(const char *from, bool prep_mode) char path[FN_REFLEN]; snprintf(path, sizeof(path), "%s/db.opt", node.filepath); - if (!(ret = backup_file_printf( + if (!(ret = ds_data->backup_file_printf( trim_dotslash(path), "%s", ""))) { msg("Failed to create file %s", path); goto out; @@ -1388,7 +1387,6 @@ out: return(ret); } -void backup_fix_ddl(CorruptedPages &); lsn_t get_current_lsn(MYSQL *connection) { @@ -1413,7 +1411,8 @@ lsn_t get_current_lsn(MYSQL *connection) lsn_t server_lsn_after_lock; extern void backup_wait_for_lsn(lsn_t lsn); /** Start --backup */ -bool backup_start(CorruptedPages &corrupted_pages) +bool backup_start(ds_ctxt *ds_data, ds_ctxt *ds_meta, + CorruptedPages &corrupted_pages) { if (!opt_no_lock) { if (opt_safe_slave_backup) { @@ -1422,7 +1421,7 @@ bool backup_start(CorruptedPages &corrupted_pages) } } - if (!backup_files(fil_path_to_mysql_datadir, true)) { + if (!backup_files(ds_data, fil_path_to_mysql_datadir, true)) { return(false); } @@ -1434,11 +1433,15 @@ bool backup_start(CorruptedPages &corrupted_pages) server_lsn_after_lock = get_current_lsn(mysql_connection); } - if (!backup_files(fil_path_to_mysql_datadir, false)) { + if (!backup_files(ds_data, fil_path_to_mysql_datadir, false)) { return(false); } - if (!backup_files_from_datadir(fil_path_to_mysql_datadir)) { + if (!backup_files_from_datadir(ds_data, fil_path_to_mysql_datadir, + "aws-kms-key") || + !backup_files_from_datadir(ds_data, + aria_log_dir_path, + "aria_log")) { return false; } @@ -1455,7 +1458,7 @@ bool backup_start(CorruptedPages &corrupted_pages) my_sleep(milliseconds*1000UL); }); - backup_fix_ddl(corrupted_pages); + corrupted_pages.backup_fix_ddl(ds_data, ds_meta); // There is no need to stop slave thread before coping non-Innodb data when // --no-lock option is used because --no-lock option requires that no DDL or @@ -1471,7 +1474,7 @@ bool backup_start(CorruptedPages &corrupted_pages) if (opt_slave_info) { lock_binlog_maybe(mysql_connection); - if (!write_slave_info(mysql_connection)) { + if (!write_slave_info(ds_data, mysql_connection)) { return(false); } } @@ -1483,7 +1486,7 @@ bool backup_start(CorruptedPages &corrupted_pages) avoid that is to have a single process, i.e. merge innobackupex and xtrabackup. */ if (opt_galera_info) { - if (!write_galera_info(mysql_connection)) { + if (!write_galera_info(ds_data, mysql_connection)) { return(false); } } @@ -1491,7 +1494,7 @@ bool backup_start(CorruptedPages &corrupted_pages) if (opt_binlog_info == BINLOG_INFO_ON) { lock_binlog_maybe(mysql_connection); - write_binlog_info(mysql_connection); + write_binlog_info(ds_data, mysql_connection); } if (!opt_no_lock) { @@ -1528,20 +1531,20 @@ void backup_release() static const char *default_buffer_pool_file = "ib_buffer_pool"; /** Finish after backup_start() and backup_release() */ -bool backup_finish() +bool backup_finish(ds_ctxt *ds_data) { /* Copy buffer pool dump or LRU dump */ if (!opt_rsync && opt_galera_info) { if (buffer_pool_filename && file_exists(buffer_pool_filename)) { - copy_file(ds_data, buffer_pool_filename, default_buffer_pool_file, 0); + ds_data->copy_file(buffer_pool_filename, default_buffer_pool_file, 0); } if (file_exists("ib_lru_dump")) { - copy_file(ds_data, "ib_lru_dump", "ib_lru_dump", 0); + ds_data->copy_file("ib_lru_dump", "ib_lru_dump", 0); } } if (has_rocksdb_plugin()) { - rocksdb_backup_checkpoint(); + rocksdb_backup_checkpoint(ds_data); } msg("Backup created in directory '%s'", xtrabackup_target_dir); @@ -1553,11 +1556,11 @@ bool backup_finish() mysql_slave_position); } - if (!write_backup_config_file()) { + if (!write_backup_config_file(ds_data)) { return(false); } - if (!write_xtrabackup_info(mysql_connection, XTRABACKUP_INFO, + if (!write_xtrabackup_info(ds_data, mysql_connection, XTRABACKUP_INFO, opt_history != 0, true)) { return(false); } @@ -1624,6 +1627,7 @@ ibx_copy_incremental_over_full() bool ret = true; char path[FN_REFLEN]; int i; + ds_ctxt *ds_data= NULL; DBUG_ASSERT(!opt_galera_info); datadir_node_init(&node); @@ -1651,15 +1655,20 @@ ibx_copy_incremental_over_full() unlink(node.filepath_rel); } - if (!(ret = copy_file(ds_data, node.filepath, - node.filepath_rel, 1))) { + if (!(ret = ds_data->copy_file(node.filepath, + node.filepath_rel, 1))) { msg("Failed to copy file %s", node.filepath); goto cleanup; } } - if (!(ret = backup_files_from_datadir(xtrabackup_incremental_dir))) + if (!(ret = backup_files_from_datadir(ds_data, + xtrabackup_incremental_dir, + "aws-kms-key")) || + !(ret = backup_files_from_datadir(ds_data, + xtrabackup_incremental_dir, + "aria_log"))) goto cleanup; /* copy supplementary files */ @@ -1674,7 +1683,7 @@ ibx_copy_incremental_over_full() if (file_exists(sup_files[i])) { unlink(sup_files[i]); } - copy_file(ds_data, path, sup_files[i], 0); + ds_data->copy_file(path, sup_files[i], 0); } } @@ -1688,7 +1697,7 @@ ibx_copy_incremental_over_full() if (my_mkdir(ROCKSDB_BACKUP_DIR, 0777, MYF(0))) { die("my_mkdir failed for " ROCKSDB_BACKUP_DIR); } - copy_or_move_dir(path, ROCKSDB_BACKUP_DIR, true, true); + ds_data->copy_or_move_dir(path, ROCKSDB_BACKUP_DIR, true, true); } ibx_incremental_drop_databases(xtrabackup_target_dir, xtrabackup_incremental_dir); @@ -1774,6 +1783,39 @@ public: } }; + +static inline bool +is_aria_log_dir_file(const datadir_node_t &node) +{ + return starts_with(node.filepath_rel, "aria_log"); +} + + +bool +copy_back_aria_logs(const char *dstdir) +{ + std::unique_ptr + ds_ctxt_aria_log_dir_path(ds_create(dstdir, DS_TYPE_LOCAL), ds_destroy); + + datadir_node_t node; + datadir_node_init(&node); + datadir_iter_t *it = datadir_iter_new(".", false); + + while (datadir_iter_next(it, &node)) + { + if (!is_aria_log_dir_file(node)) + continue; + if (!copy_or_move_file(ds_ctxt_aria_log_dir_path.get(), + node.filepath, node.filepath_rel, + dstdir, 1)) + return false; + } + datadir_node_free(&node); + datadir_iter_free(it); + return true; +} + + bool copy_back() { @@ -1820,6 +1862,13 @@ copy_back() return(false); } + Copy_back_dst_dir aria_log_dir_path_dst; + const char *aria_log_dir_path_abs= aria_log_dir_path_dst.make(aria_log_dir_path); + if (aria_log_dir_path && *aria_log_dir_path + && !directory_exists(aria_log_dir_path_abs, true)) { + return false; + } + /* cd to backup directory */ if (my_setwd(xtrabackup_target_dir, MYF(MY_WME))) { @@ -1827,6 +1876,9 @@ copy_back() return(false); } + if (!copy_back_aria_logs(aria_log_dir_path_abs)) + return false; + /* parse data file path */ if (!innobase_data_file_path) { @@ -1848,7 +1900,7 @@ copy_back() dst_dir = dst_dir_buf.make(srv_undo_dir); - ds_data = ds_create(dst_dir, DS_TYPE_LOCAL); + ds_ctxt *ds_tmp = ds_create(dst_dir, DS_TYPE_LOCAL); for (uint i = 1; i <= TRX_SYS_MAX_UNDO_SPACES; i++) { char filename[20]; @@ -1856,14 +1908,14 @@ copy_back() if (!file_exists(filename)) { break; } - if (!(ret = copy_or_move_file(filename, filename, + if (!(ret = copy_or_move_file(ds_tmp, filename, filename, dst_dir, 1))) { goto cleanup; } } - ds_destroy(ds_data); - ds_data = NULL; + ds_destroy(ds_tmp); + ds_tmp = NULL; /* copy redo logs */ @@ -1871,34 +1923,34 @@ copy_back() /* --backup generates a single ib_logfile0, which we must copy. */ - ds_data = ds_create(dst_dir, DS_TYPE_LOCAL); - if (!(ret = copy_or_move_file(LOG_FILE_NAME, LOG_FILE_NAME, + ds_tmp = ds_create(dst_dir, DS_TYPE_LOCAL); + if (!(ret = copy_or_move_file(ds_tmp, LOG_FILE_NAME, LOG_FILE_NAME, dst_dir, 1))) { goto cleanup; } - ds_destroy(ds_data); + ds_destroy(ds_tmp); /* copy innodb system tablespace(s) */ dst_dir = dst_dir_buf.make(innobase_data_home_dir); - ds_data = ds_create(dst_dir, DS_TYPE_LOCAL); + ds_tmp = ds_create(dst_dir, DS_TYPE_LOCAL); for (Tablespace::const_iterator iter(srv_sys_space.begin()), end(srv_sys_space.end()); iter != end; ++iter) { const char *filepath = iter->filepath(); - if (!(ret = copy_or_move_file(base_name(filepath), filepath, - dst_dir, 1))) { + if (!(ret = copy_or_move_file(ds_tmp, base_name(filepath), + filepath, dst_dir, 1))) { goto cleanup; } } - ds_destroy(ds_data); + ds_destroy(ds_tmp); /* copy the rest of tablespaces */ - ds_data = ds_create(mysql_data_home, DS_TYPE_LOCAL); + ds_tmp = ds_create(mysql_data_home, DS_TYPE_LOCAL); it = datadir_iter_new(".", false); @@ -1913,6 +1965,10 @@ copy_back() char c_tmp; int i_tmp; + /* Skip aria log files */ + if (is_aria_log_dir_file(node)) + continue; + if (strstr(node.filepath,"/" ROCKSDB_BACKUP_DIR "/") #ifdef _WIN32 || strstr(node.filepath,"\\" ROCKSDB_BACKUP_DIR "\\") @@ -1978,7 +2034,7 @@ copy_back() } } - if (!(ret = copy_or_move_file(node.filepath, node.filepath_rel, + if (!(ret = copy_or_move_file(ds_tmp, node.filepath, node.filepath_rel, mysql_data_home, 1))) { goto cleanup; } @@ -1990,12 +2046,12 @@ copy_back() if (file_exists(default_buffer_pool_file) && innobase_buffer_pool_filename) { - copy_or_move_file(default_buffer_pool_file, + copy_or_move_file(ds_tmp, default_buffer_pool_file, innobase_buffer_pool_filename, mysql_data_home, 0); } - rocksdb_copy_back(); + rocksdb_copy_back(ds_tmp); cleanup: if (it != NULL) { @@ -2004,11 +2060,11 @@ cleanup: datadir_node_free(&node); - if (ds_data != NULL) { - ds_destroy(ds_data); + if (ds_tmp != NULL) { + ds_destroy(ds_tmp); } - ds_data = NULL; + ds_tmp = NULL; return(ret); } @@ -2108,7 +2164,7 @@ decrypt_decompress() } /* copy the rest of tablespaces */ - ds_data = ds_create(".", DS_TYPE_LOCAL); + ds_ctxt *ds_tmp = ds_create(".", DS_TYPE_LOCAL); it = datadir_iter_new(".", false); @@ -2121,11 +2177,11 @@ decrypt_decompress() datadir_iter_free(it); } - if (ds_data != NULL) { - ds_destroy(ds_data); + if (ds_tmp != NULL) { + ds_destroy(ds_tmp); } - ds_data = NULL; + ds_tmp = NULL; return(ret); } @@ -2135,7 +2191,9 @@ decrypt_decompress() Do not copy the Innodb files (ibdata1, redo log files), as this is done in a separate step. */ -static bool backup_files_from_datadir(const char *dir_path) +static bool backup_files_from_datadir(ds_ctxt_t *ds_data, + const char *dir_path, + const char *prefix) { os_file_dir_t dir = os_file_opendir(dir_path); if (dir == IF_WIN(INVALID_HANDLE_VALUE, nullptr)) return false; @@ -2158,8 +2216,7 @@ static bool backup_files_from_datadir(const char *dir_path) if (!pname) pname = info.name; - if (!starts_with(pname, "aws-kms-key") && - !starts_with(pname, "aria_log")) + if (!starts_with(pname, prefix)) /* For ES exchange the above line with the following code: (!xtrabackup_prepare || !xtrabackup_incremental_dir || !starts_with(pname, "aria_log"))) @@ -2172,7 +2229,7 @@ static bool backup_files_from_datadir(const char *dir_path) std::string full_path(dir_path); full_path.append(1, '/').append(info.name); - if (!(ret = copy_file(ds_data, full_path.c_str() , info.name, 1))) + if (!(ret = ds_data->copy_file(full_path.c_str() , info.name, 1))) break; } os_file_closedir(dir); @@ -2222,13 +2279,14 @@ static char *trim_trailing_dir_sep(char *path) Create a file hardlink. @return true on success, false on error. */ -static bool make_hardlink(const char *from_path, const char *to_path) +bool +ds_ctxt_t::make_hardlink(const char *from_path, const char *to_path) { DBUG_EXECUTE_IF("no_hardlinks", return false;); char to_path_full[FN_REFLEN]; if (!is_abs_path(to_path)) { - fn_format(to_path_full, to_path, ds_data->root, "", MYF(MY_RELATIVE_PATH)); + fn_format(to_path_full, to_path, root, "", MYF(MY_RELATIVE_PATH)); } else { @@ -2249,7 +2307,9 @@ static bool make_hardlink(const char *from_path, const char *to_path) Has optimization that allows to use hardlinks when possible (source and destination are directories on the same device) */ -static void copy_or_move_dir(const char *from, const char *to, bool do_copy, bool allow_hardlinks) +void +ds_ctxt_t::copy_or_move_dir(const char *from, const char *to, + bool do_copy, bool allow_hardlinks) { datadir_node_t node; datadir_node_init(&node); @@ -2277,8 +2337,8 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo if (!rc) { rc = (do_copy ? - copy_file(ds_data, from_path, to_path, 1) : - move_file(ds_data, from_path, node.filepath_rel, + copy_file(from_path, to_path, 1) : + move_file(from_path, node.filepath_rel, to, 1)); } if (!rc) @@ -2375,7 +2435,7 @@ static void rocksdb_create_checkpoint() remove temp.checkpoint directory (in server's datadir) and release user level lock acquired inside rocksdb_create_checkpoint(). */ -static void rocksdb_backup_checkpoint() +static void rocksdb_backup_checkpoint(ds_ctxt *ds_data) { msg("Backing up rocksdb files."); char rocksdb_backup_dir[FN_REFLEN]; @@ -2387,7 +2447,7 @@ static void rocksdb_backup_checkpoint() die("Can't create rocksdb backup directory %s", rocksdb_backup_dir); } } - copy_or_move_dir(rocksdb_checkpoint_dir, ROCKSDB_BACKUP_DIR, true, backup_to_directory); + ds_data->copy_or_move_dir(rocksdb_checkpoint_dir, ROCKSDB_BACKUP_DIR, true, backup_to_directory); rocksdb_remove_checkpoint_directory(); rocksdb_unlock_checkpoint(); } @@ -2395,7 +2455,7 @@ static void rocksdb_backup_checkpoint() /* Copies #rocksdb directory to the $rockdb_data_dir, on copy-back */ -static void rocksdb_copy_back() { +static void rocksdb_copy_back(ds_ctxt *ds_data) { if (access(ROCKSDB_BACKUP_DIR, 0)) return; char rocksdb_home_dir[FN_REFLEN]; @@ -2407,5 +2467,5 @@ static void rocksdb_copy_back() { xb_rocksdb_datadir?trim_dotslash(xb_rocksdb_datadir): ROCKSDB_BACKUP_DIR); } mkdirp(rocksdb_home_dir, 0777, MYF(0)); - copy_or_move_dir(ROCKSDB_BACKUP_DIR, rocksdb_home_dir, xtrabackup_copy_back, xtrabackup_copy_back); + ds_data->copy_or_move_dir(ROCKSDB_BACKUP_DIR, rocksdb_home_dir, xtrabackup_copy_back, xtrabackup_copy_back); } diff --git a/extra/mariabackup/backup_copy.h b/extra/mariabackup/backup_copy.h index 62b2b1bc232..b4a323f2e89 100644 --- a/extra/mariabackup/backup_copy.h +++ b/extra/mariabackup/backup_copy.h @@ -14,30 +14,18 @@ extern bool binlog_locked; -bool -backup_file_printf(const char *filename, const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 2, 0); - /************************************************************************ Return true if first and second arguments are the same path. */ bool equal_paths(const char *first, const char *second); -/************************************************************************ -Copy file for backup/restore. -@return true in case of success. */ -bool -copy_file(ds_ctxt_t *datasink, - const char *src_file_path, - const char *dst_file_path, - uint thread_n); - /** Start --backup */ -bool backup_start(CorruptedPages &corrupted_pages); +bool backup_start(ds_ctxt *ds_data, ds_ctxt *ds_meta, + CorruptedPages &corrupted_pages); /** Release resources after backup_start() */ void backup_release(); /** Finish after backup_start() and backup_release() */ -bool backup_finish(); +bool backup_finish(ds_ctxt *ds_data); bool apply_log_finish(); bool @@ -51,6 +39,5 @@ directory_exists(const char *dir, bool create); lsn_t get_current_lsn(MYSQL *connection); -bool backup_file_print_buf(const char *filename, const char *buf, int buf_len); #endif diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc index 69448586b33..cf8a50517a8 100644 --- a/extra/mariabackup/backup_mysql.cc +++ b/extra/mariabackup/backup_mysql.cc @@ -327,6 +327,7 @@ bool get_mysql_vars(MYSQL *connection) char *innodb_undo_directory_var= NULL; char *innodb_page_size_var= NULL; char *innodb_undo_tablespaces_var= NULL; + char *aria_log_dir_path_var= NULL; char *page_zip_level_var= NULL; char *ignore_db_dirs= NULL; char *endptr; @@ -355,6 +356,7 @@ bool get_mysql_vars(MYSQL *connection) {"innodb_undo_tablespaces", &innodb_undo_tablespaces_var}, {"innodb_compression_level", &page_zip_level_var}, {"ignore_db_dirs", &ignore_db_dirs}, + {"aria_log_dir_path", &aria_log_dir_path_var}, {NULL, NULL}}; read_mysql_variables(connection, "SHOW VARIABLES", mysql_vars, true); @@ -482,6 +484,12 @@ bool get_mysql_vars(MYSQL *connection) ut_ad(*endptr == 0); } + if (aria_log_dir_path_var) + { + aria_log_dir_path= my_strdup(PSI_NOT_INSTRUMENTED, + aria_log_dir_path_var, MYF(MY_FAE)); + } + if (page_zip_level_var != NULL) { page_zip_level= static_cast(strtoul(page_zip_level_var, &endptr, @@ -1322,7 +1330,7 @@ variable. @returns true on success */ bool -write_slave_info(MYSQL *connection) +write_slave_info(ds_ctxt *datasink, MYSQL *connection) { String sql, comment; @@ -1339,7 +1347,8 @@ write_slave_info(MYSQL *connection) } mysql_slave_position= strdup(comment.c_ptr()); - return backup_file_print_buf(XTRABACKUP_SLAVE_INFO, sql.ptr(), sql.length()); + return datasink->backup_file_print_buf(XTRABACKUP_SLAVE_INFO, + sql.ptr(), sql.length()); } @@ -1347,7 +1356,7 @@ write_slave_info(MYSQL *connection) Retrieves MySQL Galera and saves it in a file. It also prints it to stdout. */ bool -write_galera_info(MYSQL *connection) +write_galera_info(ds_ctxt *datasink, MYSQL *connection) { char *state_uuid = NULL, *state_uuid55 = NULL; char *last_committed = NULL, *last_committed55 = NULL; @@ -1379,12 +1388,12 @@ write_galera_info(MYSQL *connection) goto cleanup; } - result = backup_file_printf(XTRABACKUP_GALERA_INFO, + result = datasink->backup_file_printf(XTRABACKUP_GALERA_INFO, "%s:%s\n", state_uuid ? state_uuid : state_uuid55, last_committed ? last_committed : last_committed55); if (result) { - write_current_binlog_file(connection); + write_current_binlog_file(datasink, connection); } cleanup: @@ -1398,7 +1407,7 @@ cleanup: Flush and copy the current binary log file into the backup, if GTID is enabled */ bool -write_current_binlog_file(MYSQL *connection) +write_current_binlog_file(ds_ctxt *datasink, MYSQL *connection) { char *executed_gtid_set = NULL; char *gtid_binlog_state = NULL; @@ -1468,7 +1477,7 @@ write_current_binlog_file(MYSQL *connection) snprintf(filepath, sizeof(filepath), "%s%c%s", log_bin_dir, FN_LIBCHAR, log_bin_file); - result = copy_file(ds_data, filepath, log_bin_file, 0); + result = datasink->copy_file(filepath, log_bin_file, 0); } cleanup: @@ -1484,7 +1493,7 @@ cleanup: Retrieves MySQL binlog position and saves it in a file. It also prints it to stdout. */ bool -write_binlog_info(MYSQL *connection) +write_binlog_info(ds_ctxt *datasink, MYSQL *connection) { char *filename = NULL; char *position = NULL; @@ -1529,14 +1538,14 @@ write_binlog_info(MYSQL *connection) "filename '%s', position '%s', " "GTID of the last change '%s'", filename, position, gtid) != -1); - result = backup_file_printf(XTRABACKUP_BINLOG_INFO, + result = datasink->backup_file_printf(XTRABACKUP_BINLOG_INFO, "%s\t%s\t%s\n", filename, position, gtid); } else { ut_a(asprintf(&mysql_binlog_position, "filename '%s', position '%s'", filename, position) != -1); - result = backup_file_printf(XTRABACKUP_BINLOG_INFO, + result = datasink->backup_file_printf(XTRABACKUP_BINLOG_INFO, "%s\t%s\n", filename, position); } @@ -1576,8 +1585,9 @@ mysql.mariabackup_history and writes a new history record to the table containing all the history info particular to the just completed backup. */ bool -write_xtrabackup_info(MYSQL *connection, const char * filename, bool history, - bool stream) +write_xtrabackup_info(ds_ctxt *datasink, + MYSQL *connection, const char * filename, bool history, + bool stream) { bool result = true; @@ -1653,7 +1663,7 @@ write_xtrabackup_info(MYSQL *connection, const char * filename, bool history, } if (stream) { - backup_file_printf(filename, "%s", buf); + datasink->backup_file_printf(filename, "%s", buf); } else { fp = fopen(filename, "w"); if (!fp) { @@ -1772,9 +1782,9 @@ static std::string make_local_paths(const char *data_file_path) return buf.str(); } -bool write_backup_config_file() +bool write_backup_config_file(ds_ctxt *datasink) { - int rc= backup_file_printf("backup-my.cnf", + int rc= datasink->backup_file_printf("backup-my.cnf", "# This options file was generated by innobackupex.\n\n" "# The server\n" "[mysqld]\n" diff --git a/extra/mariabackup/backup_mysql.h b/extra/mariabackup/backup_mysql.h index eb4ed42c048..4b08da0b939 100644 --- a/extra/mariabackup/backup_mysql.h +++ b/extra/mariabackup/backup_mysql.h @@ -58,17 +58,18 @@ void unlock_all(MYSQL *connection); bool -write_current_binlog_file(MYSQL *connection); +write_current_binlog_file(ds_ctxt *datasink, MYSQL *connection); bool -write_binlog_info(MYSQL *connection); +write_binlog_info(ds_ctxt *datasink, MYSQL *connection); bool -write_xtrabackup_info(MYSQL *connection, const char * filename, bool history, - bool stream); +write_xtrabackup_info(ds_ctxt *datasink, + MYSQL *connection, const char * filename, bool history, + bool stream); bool -write_backup_config_file(); +write_backup_config_file(ds_ctxt *datasink); bool lock_binlog_maybe(MYSQL *connection); @@ -80,10 +81,10 @@ bool wait_for_safe_slave(MYSQL *connection); bool -write_galera_info(MYSQL *connection); +write_galera_info(ds_ctxt *datasink, MYSQL *connection); bool -write_slave_info(MYSQL *connection); +write_slave_info(ds_ctxt *datasink, MYSQL *connection); #endif diff --git a/extra/mariabackup/datasink.h b/extra/mariabackup/datasink.h index 4bede4ec9e7..57468e0c9c7 100644 --- a/extra/mariabackup/datasink.h +++ b/extra/mariabackup/datasink.h @@ -37,6 +37,35 @@ typedef struct ds_ctxt { char *root; void *ptr; struct ds_ctxt *pipe_ctxt; + /* + Copy file for backup/restore. + @return true in case of success. + */ + bool copy_file(const char *src_file_path, + const char *dst_file_path, + uint thread_n); + + bool move_file(const char *src_file_path, + const char *dst_file_path, + const char *dst_dir, + uint thread_n); + + bool make_hardlink(const char *from_path, const char *to_path); + + void copy_or_move_dir(const char *from, const char *to, + bool do_copy, bool allow_hardlinks); + + bool backup_file_vprintf(const char *filename, + const char *fmt, va_list ap); + + bool backup_file_print_buf(const char *filename, + const char *buf, + int buf_len); + + bool backup_file_printf(const char *filename, + const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 2, 0); + } ds_ctxt_t; typedef struct { diff --git a/extra/mariabackup/write_filt.cc b/extra/mariabackup/write_filt.cc index 086d4078e31..052cea26ef6 100644 --- a/extra/mariabackup/write_filt.cc +++ b/extra/mariabackup/write_filt.cc @@ -31,7 +31,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA /************************************************************************ Write-through page write filter. */ -static my_bool wf_wt_init(xb_write_filt_ctxt_t *ctxt, char *dst_name, +static my_bool wf_wt_init(ds_ctxt *ds_meta, + xb_write_filt_ctxt_t *ctxt, char *dst_name, xb_fil_cur_t *cursor, CorruptedPages *corrupted_pages); static my_bool wf_wt_process(xb_write_filt_ctxt_t *ctxt, ds_file_t *dstfile); @@ -44,7 +45,8 @@ xb_write_filt_t wf_write_through = { /************************************************************************ Incremental page write filter. */ -static my_bool wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name, +static my_bool wf_incremental_init(ds_ctxt *ds_meta, + xb_write_filt_ctxt_t *ctxt, char *dst_name, xb_fil_cur_t *cursor, CorruptedPages *corrupted_pages); static my_bool wf_incremental_process(xb_write_filt_ctxt_t *ctxt, ds_file_t *dstfile); @@ -64,7 +66,8 @@ Initialize incremental page write filter. @return TRUE on success, FALSE on error. */ static my_bool -wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name, +wf_incremental_init(ds_ctxt *ds_meta, + xb_write_filt_ctxt_t *ctxt, char *dst_name, xb_fil_cur_t *cursor, CorruptedPages *corrupted_pages) { char meta_name[FN_REFLEN]; @@ -88,7 +91,7 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name, XB_DELTA_INFO_SUFFIX); const xb_delta_info_t info(cursor->page_size, cursor->zip_size, cursor->space_id); - if (!xb_write_delta_metadata(meta_name, &info)) { + if (!xb_write_delta_metadata(ds_meta, meta_name, &info)) { msg(cursor->thread_n,"Error: " "failed to write meta info for %s", cursor->rel_path); @@ -207,7 +210,8 @@ Initialize the write-through page write filter. @return TRUE on success, FALSE on error. */ static my_bool -wf_wt_init(xb_write_filt_ctxt_t *ctxt, char *dst_name __attribute__((unused)), +wf_wt_init(ds_ctxt *ds_meta __attribute__((unused)), + xb_write_filt_ctxt_t *ctxt, char *dst_name __attribute__((unused)), xb_fil_cur_t *cursor, CorruptedPages *) { ctxt->cursor = cursor; diff --git a/extra/mariabackup/write_filt.h b/extra/mariabackup/write_filt.h index 6c3ef24291f..a0ce0778a7f 100644 --- a/extra/mariabackup/write_filt.h +++ b/extra/mariabackup/write_filt.h @@ -45,7 +45,8 @@ typedef struct { typedef struct { - my_bool (*init)(xb_write_filt_ctxt_t *ctxt, char *dst_name, + my_bool (*init)(ds_ctxt *ds_meta, + xb_write_filt_ctxt_t *ctxt, char *dst_name, xb_fil_cur_t *cursor, CorruptedPages *corrupted_pages); my_bool (*process)(xb_write_filt_ctxt_t *ctxt, ds_file_t *dstfile); my_bool (*finalize)(xb_write_filt_ctxt_t *, ds_file_t *dstfile); diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index aca1d39cf3b..1ca4c5fad7e 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -117,6 +117,12 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA #define MB_CORRUPTED_PAGES_FILE "innodb_corrupted_pages" +// disable server's systemd notification code +extern "C" { +int sd_notify() { return 0; } +int sd_notifyf() { return 0; } +} + int sys_var_init(); /* === xtrabackup specific options === */ @@ -256,6 +262,7 @@ static char* innobase_ignored_opt; char* innobase_data_home_dir; char* innobase_data_file_path; +char *aria_log_dir_path; my_bool xtrabackup_incremental_force_scan = FALSE; @@ -273,10 +280,66 @@ char *xb_plugin_dir; char *xb_plugin_load; my_bool xb_close_files; -/* Datasinks */ -ds_ctxt_t *ds_data = NULL; -ds_ctxt_t *ds_meta = NULL; -ds_ctxt_t *ds_redo = NULL; + +class Datasink_free_list +{ +protected: + /* + Simple datasink creation tracking... + add datasinks in the reverse order you want them destroyed. + */ +#define XTRABACKUP_MAX_DATASINKS 10 + ds_ctxt_t *m_datasinks_to_destroy[XTRABACKUP_MAX_DATASINKS]; + uint m_actual_datasinks_to_destroy; +public: + Datasink_free_list() + :m_actual_datasinks_to_destroy(0) + { } + + void add_datasink_to_destroy(ds_ctxt_t *ds) + { + xb_ad(m_actual_datasinks_to_destroy < XTRABACKUP_MAX_DATASINKS); + m_datasinks_to_destroy[m_actual_datasinks_to_destroy] = ds; + m_actual_datasinks_to_destroy++; + } + + /* + Destroy datasinks. + Destruction is done in the specific order to not violate their order in the + pipeline so that each datasink is able to flush data down the pipeline. + */ + void destroy() + { + for (uint i= m_actual_datasinks_to_destroy; i > 0; i--) + { + ds_destroy(m_datasinks_to_destroy[i - 1]); + m_datasinks_to_destroy[i - 1] = NULL; + } + } +}; + + +class Backup_datasinks: public Datasink_free_list +{ +public: + ds_ctxt_t *m_data; + ds_ctxt_t *m_meta; + ds_ctxt_t *m_redo; + + Backup_datasinks() + :m_data(NULL), + m_meta(NULL), + m_redo(NULL) + { } + void init(); + void destroy() + { + Datasink_free_list::destroy(); + *this= Backup_datasinks(); + } + bool backup_low(); +}; + static bool innobackupex_mode = false; @@ -471,7 +534,8 @@ void CorruptedPages::rename_space(uint32_t space_id, ut_a(!pthread_mutex_unlock(&m_mutex)); } -bool CorruptedPages::print_to_file(const char *filename) const +bool CorruptedPages::print_to_file(ds_ctxt *ds_data, + const char *filename) const { std::ostringstream out; ut_a(!pthread_mutex_lock(&m_mutex)); @@ -499,8 +563,8 @@ bool CorruptedPages::print_to_file(const char *filename) const out << "\n"; } ut_a(!pthread_mutex_unlock(&m_mutex)); - if (xtrabackup_backup) - return backup_file_print_buf(filename, out.str().c_str(), + if (ds_data) + return ds_data->backup_file_print_buf(filename, out.str().c_str(), static_cast(out.str().size())); std::ofstream outfile; outfile.open(filename); @@ -622,19 +686,6 @@ void CorruptedPages::zero_out_free_pages() aligned_free(zero_page); } -/* Simple datasink creation tracking...add datasinks in the reverse order you -want them destroyed. */ -#define XTRABACKUP_MAX_DATASINKS 10 -static ds_ctxt_t *datasinks[XTRABACKUP_MAX_DATASINKS]; -static uint actual_datasinks = 0; -static inline -void -xtrabackup_add_datasink(ds_ctxt_t *ds) -{ - xb_ad(actual_datasinks < XTRABACKUP_MAX_DATASINKS); - datasinks[actual_datasinks] = ds; actual_datasinks++; -} - typedef void (*process_single_tablespace_func_t)(const char *dirname, const char *filname, bool is_remote, @@ -975,6 +1026,7 @@ typedef struct { uint *count; pthread_mutex_t* count_mutex; CorruptedPages *corrupted_pages; + Backup_datasinks *datasinks; } data_thread_ctxt_t; /* ======== for option and variables ======== */ @@ -1082,7 +1134,8 @@ enum options_xtrabackup OPT_XTRA_CHECK_PRIVILEGES, OPT_XTRA_MYSQLD_ARGS, OPT_XB_IGNORE_INNODB_PAGE_CORRUPTION, - OPT_INNODB_FORCE_RECOVERY + OPT_INNODB_FORCE_RECOVERY, + OPT_ARIA_LOG_DIR_PATH }; struct my_option xb_client_options[]= { @@ -1685,6 +1738,11 @@ struct my_option xb_server_options[] = &xb_plugin_dir, &xb_plugin_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + {"aria_log_dir_path", OPT_ARIA_LOG_DIR_PATH, + "Path to individual files and their sizes.", + &aria_log_dir_path, &aria_log_dir_path, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"open_files_limit", OPT_OPEN_FILES_LIMIT, "the maximum number of file " "descriptors to reserve with setrlimit().", (G_PTR*) &xb_open_files_limit, (G_PTR*) &xb_open_files_limit, 0, GET_ULONG, @@ -1980,6 +2038,10 @@ xb_get_one_option(const struct my_option *opt, } break; + case OPT_ARIA_LOG_DIR_PATH: + ADD_PRINT_PARAM_OPT(aria_log_dir_path); + break; + case OPT_XTRA_TARGET_DIR: strmake(xtrabackup_real_target_dir,argument, sizeof(xtrabackup_real_target_dir)-1); xtrabackup_target_dir= xtrabackup_real_target_dir; @@ -2538,7 +2600,8 @@ xb_read_delta_metadata(const char *filepath, xb_delta_info_t *info) Write meta info for an incremental delta. @return TRUE on success, FALSE on failure. */ my_bool -xb_write_delta_metadata(const char *filename, const xb_delta_info_t *info) +xb_write_delta_metadata(ds_ctxt *ds_meta, + const char *filename, const xb_delta_info_t *info) { ds_file_t *f; char buf[64]; @@ -2869,7 +2932,9 @@ xb_get_copy_action(const char *dflt) for full backup, pages filter for incremental backup, etc. @return FALSE on success and TRUE on error */ -static my_bool xtrabackup_copy_datafile(fil_node_t *node, uint thread_n, +static my_bool xtrabackup_copy_datafile(ds_ctxt *ds_data, + ds_ctxt *ds_meta, + fil_node_t *node, uint thread_n, const char *dest_name, const xb_write_filt_t &write_filter, CorruptedPages &corrupted_pages) @@ -2927,7 +2992,7 @@ static my_bool xtrabackup_copy_datafile(fil_node_t *node, uint thread_n, ut_a(write_filter.process != NULL); if (write_filter.init != NULL && - !write_filter.init(&write_filt_ctxt, dst_name, &cursor, + !write_filter.init(ds_meta, &write_filt_ctxt, dst_name, &cursor, opt_log_innodb_page_corruption ? &corrupted_pages : NULL)) { msg (thread_n, "mariabackup: error: failed to initialize page write filter."); goto error; @@ -3264,7 +3329,8 @@ static void data_copy_thread_func(data_thread_ctxt_t *ctxt) /* thread context */ node->space->name(), backup_wait_for_lsn(get_current_lsn(mysql_connection));); /* copy the datafile */ - if (xtrabackup_copy_datafile(node, num, NULL, + if (xtrabackup_copy_datafile(ctxt->datasinks->m_data, + ctxt->datasinks->m_meta, node, num, NULL, xtrabackup_incremental ? wf_incremental : wf_write_through, *ctxt->corrupted_pages)) die("failed to copy datafile."); @@ -3287,22 +3353,21 @@ Otherwise (i.e. when streaming in the 'tar' format) we need 2 separate datasinks for the data stream (and don't allow parallel data copying) and for metainfo files (including ib_logfile0). The second datasink writes to temporary files first, and then streams them in a serialized way when closed. */ -static void -xtrabackup_init_datasinks(void) +void Backup_datasinks::init() { /* Start building out the pipelines from the terminus back */ if (xtrabackup_stream) { /* All streaming goes to stdout */ - ds_data = ds_meta = ds_redo = ds_create(xtrabackup_target_dir, - DS_TYPE_STDOUT); + m_data = m_meta = m_redo = ds_create(xtrabackup_target_dir, + DS_TYPE_STDOUT); } else { /* Local filesystem */ - ds_data = ds_meta = ds_redo = ds_create(xtrabackup_target_dir, - DS_TYPE_LOCAL); + m_data = m_meta = m_redo = ds_create(xtrabackup_target_dir, + DS_TYPE_LOCAL); } /* Track it for destruction */ - xtrabackup_add_datasink(ds_data); + add_datasink_to_destroy(m_data); /* Stream formatting */ if (xtrabackup_stream) { @@ -3311,66 +3376,50 @@ xtrabackup_init_datasinks(void) ut_a(xtrabackup_stream_fmt == XB_STREAM_FMT_XBSTREAM); ds = ds_create(xtrabackup_target_dir, DS_TYPE_XBSTREAM); - xtrabackup_add_datasink(ds); + add_datasink_to_destroy(ds); - ds_set_pipe(ds, ds_data); - ds_data = ds; + ds_set_pipe(ds, m_data); + m_data = ds; - ds_redo = ds_meta = ds_data; + m_redo = m_meta = m_data; } - /* Compression for ds_data and ds_redo */ + /* Compression for m_data and m_redo */ if (xtrabackup_compress) { ds_ctxt_t *ds; /* Use a 1 MB buffer for compressed output stream */ ds = ds_create(xtrabackup_target_dir, DS_TYPE_BUFFER); ds_buffer_set_size(ds, 1024 * 1024); - xtrabackup_add_datasink(ds); - ds_set_pipe(ds, ds_data); - if (ds_data != ds_redo) { - ds_data = ds; + add_datasink_to_destroy(ds); + ds_set_pipe(ds, m_data); + if (m_data != m_redo) { + m_data = ds; ds = ds_create(xtrabackup_target_dir, DS_TYPE_BUFFER); ds_buffer_set_size(ds, 1024 * 1024); - xtrabackup_add_datasink(ds); - ds_set_pipe(ds, ds_redo); - ds_redo = ds; + add_datasink_to_destroy(ds); + ds_set_pipe(ds, m_redo); + m_redo = ds; } else { - ds_redo = ds_data = ds; + m_redo = m_data = ds; } ds = ds_create(xtrabackup_target_dir, DS_TYPE_COMPRESS); - xtrabackup_add_datasink(ds); - ds_set_pipe(ds, ds_data); - if (ds_data != ds_redo) { - ds_data = ds; + add_datasink_to_destroy(ds); + ds_set_pipe(ds, m_data); + if (m_data != m_redo) { + m_data = ds; ds = ds_create(xtrabackup_target_dir, DS_TYPE_COMPRESS); - xtrabackup_add_datasink(ds); - ds_set_pipe(ds, ds_redo); - ds_redo = ds; + add_datasink_to_destroy(ds); + ds_set_pipe(ds, m_redo); + m_redo = ds; } else { - ds_redo = ds_data = ds; + m_redo = m_data = ds; } } } -/************************************************************************ -Destroy datasinks. - -Destruction is done in the specific order to not violate their order in the -pipeline so that each datasink is able to flush data down the pipeline. */ -static void xtrabackup_destroy_datasinks(void) -{ - for (uint i = actual_datasinks; i > 0; i--) { - ds_destroy(datasinks[i-1]); - datasinks[i-1] = NULL; - } - ds_data = NULL; - ds_meta = NULL; - ds_redo = NULL; -} - #define SRV_MAX_N_PENDING_SYNC_IOS 100 /** Initialize the tablespace cache subsystem. */ @@ -3484,21 +3533,20 @@ static void xb_load_single_table_tablespace(const char *dirname, bool is_empty_file = file->exists() && file->is_empty_file(); if (err == DB_SUCCESS && file->space_id() != SRV_TMP_SPACE_ID) { + mysql_mutex_lock(&fil_system.mutex); space = fil_space_t::create( file->space_id(), file->flags(), FIL_TYPE_TABLESPACE, nullptr/* TODO: crypt_data */, FIL_ENCRYPTION_DEFAULT, file->handle() != OS_FILE_CLOSED); - - ut_a(space != NULL); + ut_ad(space); fil_node_t* node= space->add( file->filepath(), skip_node_page0 ? file->detach() : pfs_os_file_t(), 0, false, false); node->deferred= defer; - mysql_mutex_lock(&fil_system.mutex); if (!space->read_page0()) - err= DB_CANNOT_OPEN_FILE; + err = DB_CANNOT_OPEN_FILE; mysql_mutex_unlock(&fil_system.mutex); if (srv_operation == SRV_OPERATION_RESTORE_DELTA @@ -4401,7 +4449,7 @@ static void stop_backup_threads() /** Implement the core of --backup @return whether the operation succeeded */ -static bool xtrabackup_backup_low() +bool Backup_datasinks::backup_low() { mysql_mutex_lock(&recv_sys.mutex); ut_ad(!metadata_to_lsn); @@ -4467,7 +4515,7 @@ static bool xtrabackup_backup_low() } metadata_last_lsn = recv_sys.lsn; - if (!xtrabackup_stream_metadata(ds_meta)) { + if (!xtrabackup_stream_metadata(m_meta)) { msg("Error: failed to stream metadata."); return false; } @@ -4483,7 +4531,8 @@ static bool xtrabackup_backup_low() } sprintf(filename, "%s/%s", xtrabackup_extra_lsndir, XTRABACKUP_INFO); - if (!write_xtrabackup_info(mysql_connection, filename, false, false)) { + if (!write_xtrabackup_info(m_data, + mysql_connection, filename, false, false)) { msg("Error: failed to write info " "to '%s'.", filename); return false; @@ -4503,6 +4552,7 @@ static bool xtrabackup_backup_func() pthread_mutex_t count_mutex; CorruptedPages corrupted_pages; data_thread_ctxt_t *data_threads; + Backup_datasinks backup_datasinks; pthread_cond_init(&scanned_lsn_cond, NULL); #ifdef USE_POSIX_FADVISE @@ -4628,7 +4678,7 @@ fail: goto fail; } - xtrabackup_init_datasinks(); + backup_datasinks.init(); if (!select_history()) { goto fail; @@ -4636,7 +4686,7 @@ fail: /* open the log file */ memset(&stat_info, 0, sizeof(MY_STAT)); - dst_log_file = ds_open(ds_redo, LOG_FILE_NAME, &stat_info); + dst_log_file = ds_open(backup_datasinks.m_redo, LOG_FILE_NAME, &stat_info); if (dst_log_file == NULL) { msg("Error: failed to open the target stream for '%s'.", LOG_FILE_NAME); @@ -4723,6 +4773,7 @@ fail: data_threads[i].count = &count; data_threads[i].count_mutex = &count_mutex; data_threads[i].corrupted_pages = &corrupted_pages; + data_threads[i].datasinks= &backup_datasinks; std::thread(data_copy_thread_func, data_threads + i).detach(); } @@ -4740,10 +4791,13 @@ fail: pthread_mutex_destroy(&count_mutex); free(data_threads); - bool ok = backup_start(corrupted_pages); + DBUG_ASSERT(backup_datasinks.m_data); + DBUG_ASSERT(backup_datasinks.m_meta); + bool ok = backup_start(backup_datasinks.m_data, + backup_datasinks.m_meta, corrupted_pages); if (ok) { - ok = xtrabackup_backup_low(); + ok = backup_datasinks.backup_low(); backup_release(); @@ -4751,12 +4805,13 @@ fail: pthread_join(dbug_alter_thread, nullptr);); if (ok) { - backup_finish(); + backup_finish(backup_datasinks.m_data); } } if (opt_log_innodb_page_corruption) - ok = corrupted_pages.print_to_file(MB_CORRUPTED_PAGES_FILE); + ok = corrupted_pages.print_to_file(backup_datasinks.m_data, + MB_CORRUPTED_PAGES_FILE); if (!ok) { goto fail; @@ -4765,7 +4820,7 @@ fail: if (changed_page_bitmap) { xb_page_bitmap_deinit(changed_page_bitmap); } - xtrabackup_destroy_datasinks(); + backup_datasinks.destroy(); msg("Redo log (from LSN " LSN_PF " to " LSN_PF ") was copied.", log_sys.next_checkpoint_lsn, recv_sys.lsn); @@ -4813,7 +4868,7 @@ FTWRL. This ensures consistent backup in presence of DDL. It is the responsibility of the prepare phase to deal with .new, .ren, and .del files. */ -void backup_fix_ddl(CorruptedPages &corrupted_pages) +void CorruptedPages::backup_fix_ddl(ds_ctxt *ds_data, ds_ctxt *ds_meta) { std::set dropped_tables; std::map renamed_tables; @@ -4835,7 +4890,7 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) if (ddl_tracker.drops.find(id) != ddl_tracker.drops.end()) { dropped_tables.insert(name); - corrupted_pages.drop_space(id); + drop_space(id); continue; } @@ -4848,7 +4903,7 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) if (new_name != name) { renamed_tables[name] = new_name; if (opt_log_innodb_page_corruption) - corrupted_pages.rename_space(id, new_name); + rename_space(id, new_name); } } @@ -4871,7 +4926,7 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) dropped_tables.erase(name); new_tables[id] = name; if (opt_log_innodb_page_corruption) - corrupted_pages.drop_space(id); + drop_space(id); } } @@ -4880,7 +4935,8 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) iter != renamed_tables.end(); ++iter) { const std::string old_name = iter->first; std::string new_name = iter->second; - backup_file_printf((old_name + ".ren").c_str(), "%s", new_name.c_str()); + DBUG_ASSERT(ds_data); + ds_data->backup_file_printf((old_name + ".ren").c_str(), "%s", new_name.c_str()); } // Mark tablespaces for drop @@ -4888,7 +4944,7 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) iter != dropped_tables.end(); iter++) { const std::string name(*iter); - backup_file_printf((name + ".del").c_str(), "%s", ""); + ds_data->backup_file_printf((name + ".del").c_str(), "%s", ""); } // Load and copy new tables. @@ -4963,8 +5019,9 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages) node->name, strlen(node->name)); dest_name.append(".new"); - xtrabackup_copy_datafile(node, 0, dest_name.c_str(), wf_write_through, - corrupted_pages); + xtrabackup_copy_datafile(ds_data, ds_meta, + node, 0, dest_name.c_str(), + wf_write_through, *this); } } @@ -5207,9 +5264,12 @@ exit: ut_ad(fil_space_t::zip_size(flags) == info.zip_size); ut_ad(fil_space_t::physical_size(flags) == info.page_size); - if (fil_space_t::create(info.space_id, flags, - FIL_TYPE_TABLESPACE, 0, FIL_ENCRYPTION_DEFAULT, - true)) { + mysql_mutex_lock(&fil_system.mutex); + fil_space_t* space = fil_space_t::create(info.space_id, flags, + FIL_TYPE_TABLESPACE, 0, + FIL_ENCRYPTION_DEFAULT, true); + mysql_mutex_unlock(&fil_system.mutex); + if (space) { *success = xb_space_create_file(real_name, info.space_id, flags, &file); } else { @@ -6026,7 +6086,7 @@ error: } } else - corrupted_pages.print_to_file(MB_CORRUPTED_PAGES_FILE); + corrupted_pages.print_to_file(NULL, MB_CORRUPTED_PAGES_FILE); if (ok) { msg("Last binlog file %s, position %lld", diff --git a/extra/mariabackup/xtrabackup.h b/extra/mariabackup/xtrabackup.h index d2a5e31645b..53784a3fb56 100644 --- a/extra/mariabackup/xtrabackup.h +++ b/extra/mariabackup/xtrabackup.h @@ -49,11 +49,13 @@ public: bool contains(page_id_t page_id) const; void drop_space(uint32_t space_id); void rename_space(uint32_t space_id, const std::string &new_name); - bool print_to_file(const char *file_name) const; + bool print_to_file(ds_ctxt *ds_data, const char *file_name) const; void read_from_file(const char *file_name); bool empty() const; void zero_out_free_pages(); + void backup_fix_ddl(ds_ctxt *ds_data, ds_ctxt *ds_meta); + private: void add_page_no_lock(const char *space_name, page_id_t page_id, bool convert_space_name); @@ -66,6 +68,7 @@ private: container_t m_spaces; }; + /* value of the --incremental option */ extern lsn_t incremental_lsn; @@ -74,13 +77,12 @@ extern char *xtrabackup_incremental_dir; extern char *xtrabackup_incremental_basedir; extern char *innobase_data_home_dir; extern char *innobase_buffer_pool_filename; +extern char *aria_log_dir_path; extern char *xb_plugin_dir; extern char *xb_rocksdb_datadir; extern my_bool xb_backup_rocksdb; extern uint opt_protocol; -extern ds_ctxt_t *ds_meta; -extern ds_ctxt_t *ds_data; extern xb_page_bitmap *changed_page_bitmap; @@ -177,7 +179,8 @@ extern ulong opt_binlog_info; extern ulong xtrabackup_innodb_force_recovery; void xtrabackup_io_throttling(void); -my_bool xb_write_delta_metadata(const char *filename, +my_bool xb_write_delta_metadata(ds_ctxt *ds_meta, + const char *filename, const xb_delta_info_t *info); /************************************************************************ diff --git a/include/m_ctype.h b/include/m_ctype.h index 2f1767433ad..6812445c6d5 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -79,7 +79,6 @@ extern "C" { typedef const struct my_charset_handler_st MY_CHARSET_HANDLER; typedef const struct my_collation_handler_st MY_COLLATION_HANDLER; -typedef const struct unicase_info_st MY_UNICASE_INFO; typedef const struct casefold_info_st MY_CASEFOLD_INFO; typedef const struct uni_ctype_st MY_UNI_CTYPE; typedef const struct my_uni_idx_st MY_UNI_IDX; @@ -97,29 +96,10 @@ struct casefold_info_st { my_wc_t maxchar; const MY_CASEFOLD_CHARACTER * const *page; + const uint16 * const *simple_weight; /* For general_ci-alike collations */ }; -typedef struct unicase_info_char_st -{ - uint32 toupper; - uint32 tolower; - uint32 sort; -} MY_UNICASE_CHARACTER; - - -struct unicase_info_st -{ - my_wc_t maxchar; - MY_UNICASE_CHARACTER **page; -}; - - -extern MY_UNICASE_INFO my_unicase_default; -extern MY_UNICASE_INFO my_unicase_turkish; -extern MY_UNICASE_INFO my_unicase_mysql500; -extern MY_UNICASE_INFO my_unicase_unicode520; - #define MY_UCA_MAX_CONTRACTION 6 /* The DUCET tables in ctype-uca.c are dumped with a limit of 8 weights @@ -795,7 +775,6 @@ struct charset_info_st const uint16 *tab_to_uni; MY_UNI_IDX *tab_from_uni; MY_CASEFOLD_INFO *casefold; - MY_UNICASE_INFO *caseinfo; const uchar *state_map; const uchar *ident_map; uint strxfrm_multiply; @@ -1691,7 +1670,7 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, const char *str, const char *str_end, const char *wildstr, const char *wildend, int escape, int w_one, int w_many, - MY_UNICASE_INFO *weights); + MY_CASEFOLD_INFO *weights); extern my_bool my_parse_charset_xml(MY_CHARSET_LOADER *loader, const char *buf, size_t buflen); diff --git a/include/my_alloca.h b/include/my_alloca.h index 761c2adb890..85fa64e9558 100644 --- a/include/my_alloca.h +++ b/include/my_alloca.h @@ -32,7 +32,10 @@ #endif #endif -#if defined(HAVE_ALLOCA) +#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) +#pragma alloca +#endif /* _AIX */ + /* If the GCC/LLVM compiler from the MinGW is used, alloca may not be defined when using the MSVC CRT: @@ -40,6 +43,5 @@ #if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && !defined(alloca) #define alloca __builtin_alloca #endif /* GNUC */ -#endif #endif /* MY_ALLOCA_INCLUDED */ diff --git a/mysql-test/include/ctype_casefolding.inc b/mysql-test/include/ctype_casefolding.inc index 74b2ab7650a..fc77b396f68 100644 --- a/mysql-test/include/ctype_casefolding.inc +++ b/mysql-test/include/ctype_casefolding.inc @@ -21,6 +21,12 @@ INSERT INTO case_folding (code) VALUES (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; + UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; DROP TABLE case_folding; diff --git a/mysql-test/include/ctype_casefolding_supplementary.inc b/mysql-test/include/ctype_casefolding_supplementary.inc new file mode 100644 index 00000000000..7646ab5682e --- /dev/null +++ b/mysql-test/include/ctype_casefolding_supplementary.inc @@ -0,0 +1,16 @@ +CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0; +SHOW CREATE TABLE case_folding; + +INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)'); + +UPDATE case_folding SET c=CHAR(code USING utf32); +SELECT + HEX(CONVERT(c USING utf32)) AS ch, + HEX(CONVERT(LOWER(c) USING utf32)) AS cl, + HEX(CONVERT(UPPER(c) USING utf32)) AS cu, + comment +FROM case_folding ORDER BY BINARY(c); +DROP TABLE case_folding; diff --git a/mysql-test/include/sql_mode_pad_char_to_full_length.inc b/mysql-test/include/sql_mode_pad_char_to_full_length.inc new file mode 100644 index 00000000000..df03c4dbc28 --- /dev/null +++ b/mysql-test/include/sql_mode_pad_char_to_full_length.inc @@ -0,0 +1,31 @@ +--echo # +--echo # MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +--echo # + +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; + + +SET sql_mode=''; +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +SET sql_mode='pad_char_to_full_length'; +INSERT INTO t1 VALUES (0,0); +DELETE FROM t1; +DROP TABLE t1; + + +SET sql_mode=''; +CREATE OR REPLACE TABLE t1 (a CHAR(20),b CHAR(20)); +SHOW CREATE TABLE t1; +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; diff --git a/mysql-test/lib/My/CoreDump.pm b/mysql-test/lib/My/CoreDump.pm index 05b6edf1385..be6d21146d1 100644 --- a/mysql-test/lib/My/CoreDump.pm +++ b/mysql-test/lib/My/CoreDump.pm @@ -310,16 +310,8 @@ sub cdb_check { `cdb -? 2>&1`; if ($? >> 8) { - print "Cannot find cdb. Please Install Debugging tools for Windows\n"; - print "from http://www.microsoft.com/whdc/devtools/debugging/"; - if($ENV{'ProgramW6432'}) - { - print "install64bit.mspx (native x64 version)\n"; - } - else - { - print "installx86.mspx\n"; - } + print "Cannot find the cdb debugger. Please install Debugging tools for Windows\n"; + print "and set PATH environment variable to include location of cdb.exe"; } } @@ -328,25 +320,6 @@ sub _cdb { my ($core_name, $format)= @_; print "\nTrying 'cdb' to get a backtrace\n"; return unless -f $core_name; - - # Try to set environment for debugging tools for Windows - if ($ENV{'PATH'} !~ /Debugging Tools/) - { - if ($ENV{'ProgramW6432'}) - { - # On x64 computer - $ENV{'PATH'}.= ";".$ENV{'ProgramW6432'}."\\Debugging Tools For Windows (x64)"; - } - else - { - # On x86 computer. Newest versions of Debugging tools are installed in the - # directory with (x86) suffix, older versions did not have this suffix. - $ENV{'PATH'}.= ";".$ENV{'ProgramFiles'}."\\Debugging Tools For Windows (x86)"; - $ENV{'PATH'}.= ";".$ENV{'ProgramFiles'}."\\Debugging Tools For Windows"; - } - } - - # Read module list, find out the name of executable and # build symbol path (required by cdb if executable was built on # different machine) @@ -384,7 +357,7 @@ sub _cdb { if (!$ENV{'_NT_SYMBOL_PATH'}) { my $windir= $ENV{'windir'}; - my $symbol_cache= substr($windir ,0, index($windir,'\\'))."\\cdb_symbols"; + my $symbol_cache= substr($windir ,0, index($windir,'\\'))."\\symbols"; print "OS debug symbols will be downloaded and stored in $symbol_cache.\n"; print "You can control the location of symbol cache with _NT_SYMBOL_PATH\n"; diff --git a/mysql-test/main/bootstrap.result b/mysql-test/main/bootstrap.result index fd9b4726cb6..cfff13136d6 100644 --- a/mysql-test/main/bootstrap.result +++ b/mysql-test/main/bootstrap.result @@ -1,15 +1,28 @@ -drop table if exists t1; +# +# test mysqld in bootstrap mode +# +# +# Check that --bootstrap reads from stdin +# # Kill the server # restart drop table t1; +# +# Check that --bootstrap of file with SQL error returns error +# # Kill the server # restart drop table t1; ERROR 42S02: Unknown table 'test.t1' +# +# Bootstrap with a large thd->net.max_packet +# # Kill the server # restart drop table t1; -End of 5.1 tests +# +# End of 5.1 tests +# # # Bug #11766306: 59393: HAVE_INNODB=YES WHEN MYSQLD # STARTED WITH --SKIP-INNODB @@ -18,9 +31,23 @@ SELECT 'bug' as '' FROM INFORMATION_SCHEMA.ENGINES WHERE engine='innodb' and SUPPORT='YES'; # Kill the server +# +# MDEV-13063 Server crashes in intern_plugin_lock or assertion `plugin_ptr->ref_count == 1' fails in plugin_init +# +# +# MDEV-19349 mysql_install_db: segfault at tmp_file_prefix check +# # restart -End of 5.5 tests +# +# End of 5.5 tests +# +# +# Check that --bootstrap can install and uninstall plugins +# # Kill the server +# +# Check that installed plugins are *not* automatically loaded in --bootstrap +# # restart flush tables; show create table t1; @@ -35,6 +62,18 @@ EXAMPLE ha_example.so truncate table mysql.plugin; # Kill the server # +# MDEV-9969 mysql_install_db error processing ignore_db_dirs. +# +# +# MDEV-13397 MariaDB upgrade fail when using default_time_zone +# +# +# MDEV-30818 invalid ssl prevents bootstrap +# +# +# End of 10.3 tests +# +# # MDEV-28782 mariadb-tzinfo-to-sql to work in bootstrap mode # # diff --git a/mysql-test/main/bootstrap.test b/mysql-test/main/bootstrap.test index f7bddf23408..d7cc8e36d56 100644 --- a/mysql-test/main/bootstrap.test +++ b/mysql-test/main/bootstrap.test @@ -1,17 +1,20 @@ +--echo # +--echo # test mysqld in bootstrap mode +--echo # --source include/not_embedded.inc -# -# test mysqld in bootstrap mode -# ---disable_warnings -drop table if exists t1; ---enable_warnings +--source include/have_example_plugin.inc + +--let test_bootstrap=$MYSQLTEST_VARDIR/tmp/test_bootstrap.sql +--write_file $test_bootstrap +use test; +EOF # Add the datadir to the bootstrap command let $MYSQLD_DATADIR= `select @@datadir`; let $MYSQLD_BOOTSTRAP_CMD= $MYSQLD_BOOTSTRAP_CMD --datadir=$MYSQLD_DATADIR --tmpdir=$MYSQL_TMP_DIR --default-storage-engine=MyISAM --loose-skip-innodb --plugin-maturity=unknown; -# -# Check that --bootstrap reads from stdin -# +--echo # +--echo # Check that --bootstrap reads from stdin +--echo # --write_file $MYSQLTEST_VARDIR/tmp/bootstrap_test.sql use test; CREATE TABLE t1(a int); @@ -21,9 +24,9 @@ EOF --source include/start_mysqld.inc drop table t1; remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_test.sql; -# -# Check that --bootstrap of file with SQL error returns error -# +--echo # +--echo # Check that --bootstrap of file with SQL error returns error +--echo # --write_file $MYSQLTEST_VARDIR/tmp/bootstrap_error.sql use test; CREATE TABLE t1; @@ -37,9 +40,9 @@ EOF drop table t1; remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_error.sql; -# -# Bootstrap with a large thd->net.max_packet -# +--echo # +--echo # Bootstrap with a large thd->net.max_packet +--echo # --disable_query_log create table t1 select 2 as a, concat(repeat('MySQL', @@max_allowed_packet/10), ';') as b; eval select * into outfile '$MYSQLTEST_VARDIR/tmp/long_query.sql' from t1; @@ -51,7 +54,9 @@ remove_file $MYSQLTEST_VARDIR/tmp/long_query.sql; --source include/start_mysqld.inc drop table t1; ---echo End of 5.1 tests +--echo # +--echo # End of 5.1 tests +--echo # --echo # --echo # Bug #11766306: 59393: HAVE_INNODB=YES WHEN MYSQLD @@ -63,29 +68,25 @@ SELECT 'bug' as '' FROM INFORMATION_SCHEMA.ENGINES WHERE engine='innodb' and SUPPORT='YES'; --source include/kill_mysqld.inc -# -# MDEV-13063 Server crashes in intern_plugin_lock or assertion `plugin_ptr->ref_count == 1' fails in plugin_init -# +--echo # +--echo # MDEV-13063 Server crashes in intern_plugin_lock or assertion `plugin_ptr->ref_count == 1' fails in plugin_init +--echo # --error 1 --exec $MYSQLD_BOOTSTRAP_CMD --myisam_recover_options=NONE -# -# MDEV-19349 mysql_install_db: segfault at tmp_file_prefix check -# ---write_file $MYSQLTEST_VARDIR/tmp/1 -use test; -EOF ---exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/1 >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 ---remove_file $MYSQLTEST_VARDIR/tmp/1 +--echo # +--echo # MDEV-19349 mysql_install_db: segfault at tmp_file_prefix check +--echo # +--exec $MYSQLD_BOOTSTRAP_CMD < $test_bootstrap >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 --source include/start_mysqld.inc ---echo End of 5.5 tests +--echo # +--echo # End of 5.5 tests +--echo # ---source include/not_windows_embedded.inc ---source include/have_example_plugin.inc -# -# Check that --bootstrap can install and uninstall plugins -# +--echo # +--echo # Check that --bootstrap can install and uninstall plugins +--echo # let $PLUGIN_DIR=`select @@plugin_dir`; --source include/kill_mysqld.inc --write_file $MYSQLTEST_VARDIR/tmp/install_plugin.sql @@ -95,9 +96,9 @@ EOF --exec $MYSQLD_BOOTSTRAP_CMD --plugin-dir=$PLUGIN_DIR < $MYSQLTEST_VARDIR/tmp/install_plugin.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 --remove_file $MYSQLTEST_VARDIR/tmp/install_plugin.sql -# -# Check that installed plugins are *not* automatically loaded in --bootstrap -# +--echo # +--echo # Check that installed plugins are *not* automatically loaded in --bootstrap +--echo # --write_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql SET SQL_MODE=""; use test; @@ -113,25 +114,25 @@ drop table t1; select * from mysql.plugin; truncate table mysql.plugin; - -# -# MDEV-9969 mysql_install_db error processing ignore_db_dirs. -# ---write_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql -use test; -EOF --source include/kill_mysqld.inc ---exec $MYSQLD_BOOTSTRAP_CMD --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' < $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 ---remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql +--echo # +--echo # MDEV-9969 mysql_install_db error processing ignore_db_dirs. +--echo # +--exec $MYSQLD_BOOTSTRAP_CMD --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' < $test_bootstrap >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 -# -# MDEV-13397 MariaDB upgrade fail when using default_time_zone -# ---write_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql -use test; -EOF ---exec $MYSQLD_BOOTSTRAP_CMD --default-time-zone=Europe/Moscow < $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 ---remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql +--echo # +--echo # MDEV-13397 MariaDB upgrade fail when using default_time_zone +--echo # +--exec $MYSQLD_BOOTSTRAP_CMD --default-time-zone=Europe/Moscow < $test_bootstrap >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 + +--echo # +--echo # MDEV-30818 invalid ssl prevents bootstrap +--echo # +--exec $MYSQLD_BOOTSTRAP_CMD --ssl-ca=/dev/nonexistent < $test_bootstrap >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 + +--echo # +--echo # End of 10.3 tests +--echo # --echo # --echo # MDEV-28782 mariadb-tzinfo-to-sql to work in bootstrap mode @@ -160,3 +161,4 @@ EOF # restore --source include/start_mysqld.inc +--remove_file $test_bootstrap diff --git a/mysql-test/main/ctype_ldml.result b/mysql-test/main/ctype_ldml.result index a23e835d1fa..31508fcd1b1 100644 --- a/mysql-test/main/ctype_ldml.result +++ b/mysql-test/main/ctype_ldml.result @@ -3074,6 +3074,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -3091,6 +3096,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; # # End of 10.3 tests @@ -3267,6 +3276,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -3284,6 +3298,39 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B19F E2B0AF Ⱟ +2C5F E2B19F E2B0AF ⱟ +A7C0 EA9F81 EA9F80 Ꟁ +A7C1 EA9F81 EA9F80 ꟁ +DROP TABLE case_folding; +# +# MDEV-30577 Case folding for uca1400 collations is not up to date +# +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci; +CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0; +SHOW CREATE TABLE case_folding; +Table Create Table +case_folding CREATE TABLE `case_folding` ( + `code` int(1) NOT NULL, + `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci DEFAULT NULL, + `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)'); +UPDATE case_folding SET c=CHAR(code USING utf32); +SELECT +HEX(CONVERT(c USING utf32)) AS ch, +HEX(CONVERT(LOWER(c) USING utf32)) AS cl, +HEX(CONVERT(UPPER(c) USING utf32)) AS cu, +comment +FROM case_folding ORDER BY BINARY(c); +ch cl cu comment +00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0) +000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0) +0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0) +0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0) DROP TABLE case_folding; # # End of 10.10 tests diff --git a/mysql-test/main/ctype_ldml.test b/mysql-test/main/ctype_ldml.test index 6336a1d0f5f..9189630e5a3 100644 --- a/mysql-test/main/ctype_ldml.test +++ b/mysql-test/main/ctype_ldml.test @@ -704,6 +704,13 @@ DROP TABLE t1; SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci; --source include/ctype_casefolding.inc +--echo # +--echo # MDEV-30577 Case folding for uca1400 collations is not up to date +--echo # + +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci; +--source include/ctype_casefolding_supplementary.inc + --echo # --echo # End of 10.10 tests --echo # diff --git a/mysql-test/main/ctype_uca_partitions.result b/mysql-test/main/ctype_uca_partitions.result index 677b68e2387..486e848e191 100644 --- a/mysql-test/main/ctype_uca_partitions.result +++ b/mysql-test/main/ctype_uca_partitions.result @@ -84,3 +84,43 @@ O P Y DROP TABLE t1; +# +# Start of 10.4 tests +# +# +# MDEV-30072 Wrong ORDER BY for a partitioned prefix key + NOPAD +# +SET NAMES utf8mb4; +CREATE TABLE t1 +( +id INT, +data VARCHAR(20), +KEY data_id (data,id) +) COLLATE utf8mb3_unicode_nopad_ci ENGINE=MyISAM +PARTITION BY RANGE COLUMNS (id) +( +PARTITION p10 VALUES LESS THAN (20), +PARTITION p20 VALUES LESS THAN MAXVALUE +); +INSERT INTO t1 VALUES (30, 'ss '), (10, 'ß '); +SELECT id FROM t1 WHERE data='ss ' ORDER BY id; +id +10 +30 +SELECT id FROM t1 WHERE data='ss ' ORDER BY id DESC; +id +30 +10 +ALTER TABLE t1 DROP KEY data_id, ADD KEY data_id2(data(10),id); +SELECT id FROM t1 WHERE data='ss ' ORDER BY id; +id +10 +30 +SELECT id FROM t1 WHERE data='ss ' ORDER BY id DESC; +id +30 +10 +DROP TABLE t1; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/ctype_uca_partitions.test b/mysql-test/main/ctype_uca_partitions.test index 5734bb52008..81f1a091574 100644 --- a/mysql-test/main/ctype_uca_partitions.test +++ b/mysql-test/main/ctype_uca_partitions.test @@ -36,3 +36,35 @@ SELECT * FROM t1 PARTITION (p0) ORDER BY c1; SELECT * FROM t1 PARTITION (p1) ORDER BY c1; SELECT * FROM t1 PARTITION (p2) ORDER BY c1; DROP TABLE t1; + +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-30072 Wrong ORDER BY for a partitioned prefix key + NOPAD +--echo # + +SET NAMES utf8mb4; +CREATE TABLE t1 +( + id INT, + data VARCHAR(20), + KEY data_id (data,id) +) COLLATE utf8mb3_unicode_nopad_ci ENGINE=MyISAM +PARTITION BY RANGE COLUMNS (id) +( + PARTITION p10 VALUES LESS THAN (20), + PARTITION p20 VALUES LESS THAN MAXVALUE +); +INSERT INTO t1 VALUES (30, 'ss '), (10, 'ß '); +SELECT id FROM t1 WHERE data='ss ' ORDER BY id; +SELECT id FROM t1 WHERE data='ss ' ORDER BY id DESC; +ALTER TABLE t1 DROP KEY data_id, ADD KEY data_id2(data(10),id); +SELECT id FROM t1 WHERE data='ss ' ORDER BY id; +SELECT id FROM t1 WHERE data='ss ' ORDER BY id DESC; +DROP TABLE t1; + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/main/ctype_utf8_uca.result b/mysql-test/main/ctype_utf8_uca.result index bacdd81cbd9..97bdadbb97b 100644 --- a/mysql-test/main/ctype_utf8_uca.result +++ b/mysql-test/main/ctype_utf8_uca.result @@ -618,6 +618,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -635,6 +640,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_turkish_ci /*Unicode-4.0 folding, with Turkish mapping for I */; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -661,6 +670,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -678,6 +692,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 C4B0 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -704,6 +722,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -721,6 +744,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -747,6 +774,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -764,6 +796,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -790,6 +826,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -807,6 +848,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -833,6 +878,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -850,6 +900,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; # # End of 10.3 tests @@ -1805,6 +1859,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -1822,6 +1881,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B19F E2B0AF Ⱟ +2C5F E2B19F E2B0AF ⱟ +A7C0 EA9F81 EA9F80 Ꟁ +A7C1 EA9F81 EA9F80 ꟁ DROP TABLE case_folding; # # End of 10.10 tests diff --git a/mysql-test/main/ctype_utf8mb4_uca.result b/mysql-test/main/ctype_utf8mb4_uca.result index 42de45c98a3..3cd25891119 100644 --- a/mysql-test/main/ctype_utf8mb4_uca.result +++ b/mysql-test/main/ctype_utf8mb4_uca.result @@ -6636,6 +6636,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6653,6 +6658,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb4 COLLATE utf8mb4_turkish_ci /*Unicode-4.0 folding with Turkish mapping for I */; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -6679,6 +6688,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6696,6 +6710,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 C4B0 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -6722,6 +6740,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6739,6 +6762,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -6765,6 +6792,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6782,6 +6814,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -6808,6 +6844,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6825,6 +6866,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2; CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; @@ -6851,6 +6896,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -6868,6 +6918,10 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B0AF E2B0AF Ⱟ +2C5F E2B19F E2B19F ⱟ +A7C0 EA9F80 EA9F80 Ꟁ +A7C1 EA9F81 EA9F81 ꟁ DROP TABLE case_folding; # # End of 10.3 tests @@ -11499,6 +11553,11 @@ INSERT INTO case_folding (code) VALUES (0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, (0x0131) /* LATIN SMALL LETTER DOTLESS I */ ; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; UPDATE case_folding SET c=CHAR(code USING ucs2); SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c @@ -11516,6 +11575,112 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c 69 69 49 i 130 69 C4B0 İ 131 C4B1 49 ı +2C2F E2B19F E2B0AF Ⱟ +2C5F E2B19F E2B0AF ⱟ +A7C0 EA9F81 EA9F80 Ꟁ +A7C1 EA9F81 EA9F80 ꟁ +DROP TABLE case_folding; +CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0; +SHOW CREATE TABLE case_folding; +Table Create Table +case_folding CREATE TABLE `case_folding` ( + `code` int(1) NOT NULL, + `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci DEFAULT NULL, + `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)'); +UPDATE case_folding SET c=CHAR(code USING utf32); +SELECT +HEX(CONVERT(c USING utf32)) AS ch, +HEX(CONVERT(LOWER(c) USING utf32)) AS cl, +HEX(CONVERT(UPPER(c) USING utf32)) AS cu, +comment +FROM case_folding ORDER BY BINARY(c); +ch cl cu comment +00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0) +000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0) +0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0) +0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0) +DROP TABLE case_folding; +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci; +CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0; +SHOW CREATE TABLE case_folding; +Table Create Table +case_folding CREATE TABLE `case_folding` ( + `code` int(1) NOT NULL, + `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +INSERT INTO case_folding (code) VALUES +(0x23A), +(0x23E), +(0x23F), +(0x240), +(0x250), +(0x251), +(0x252), +(0x26B), +(0x271), +(0x27D); +INSERT INTO case_folding (code) VALUES +(0x0049) /* LATIN CAPITAL LETTER I */, +(0x0069) /* LATIN SMALL LETTER I */, +(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */, +(0x0131) /* LATIN SMALL LETTER DOTLESS I */ +; +INSERT INTO case_folding (code) VALUES +(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */, +(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */, +(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */; +UPDATE case_folding SET c=CHAR(code USING ucs2); +SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding; +HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c +23A E2B1A5 C8BA Ⱥ +23E E2B1A6 C8BE Ⱦ +23F C8BF E2B1BE ȿ +240 C980 E2B1BF ɀ +250 C990 E2B1AF ɐ +251 C991 E2B1AD ɑ +252 C992 E2B1B0 ɒ +26B C9AB E2B1A2 ɫ +271 C9B1 E2B1AE ɱ +27D C9BD E2B1A4 ɽ +49 C4B1 49 I +69 69 C4B0 i +130 69 C4B0 İ +131 C4B1 49 ı +2C2F E2B19F E2B0AF Ⱟ +2C5F E2B19F E2B0AF ⱟ +A7C0 EA9F81 EA9F80 Ꟁ +A7C1 EA9F81 EA9F80 ꟁ +DROP TABLE case_folding; +CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0; +SHOW CREATE TABLE case_folding; +Table Create Table +case_folding CREATE TABLE `case_folding` ( + `code` int(1) NOT NULL, + `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL, + `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)'); +INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)'); +UPDATE case_folding SET c=CHAR(code USING utf32); +SELECT +HEX(CONVERT(c USING utf32)) AS ch, +HEX(CONVERT(LOWER(c) USING utf32)) AS cl, +HEX(CONVERT(UPPER(c) USING utf32)) AS cu, +comment +FROM case_folding ORDER BY BINARY(c); +ch cl cu comment +00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0) +000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0) +0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0) +0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0) DROP TABLE case_folding; # # End of 10.10 tests diff --git a/mysql-test/main/ctype_utf8mb4_uca.test b/mysql-test/main/ctype_utf8mb4_uca.test index 3f428447cc9..1b709ebba69 100644 --- a/mysql-test/main/ctype_utf8mb4_uca.test +++ b/mysql-test/main/ctype_utf8mb4_uca.test @@ -435,6 +435,11 @@ DROP PROCEDURE test_styles; SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci; --source include/ctype_casefolding.inc +--source include/ctype_casefolding_supplementary.inc + +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci; +--source include/ctype_casefolding.inc +--source include/ctype_casefolding_supplementary.inc --echo # --echo # End of 10.10 tests diff --git a/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result new file mode 100644 index 00000000000..85e87f217cc --- /dev/null +++ b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result @@ -0,0 +1,2927 @@ +# +# Start of 10.10 tests +# +# +# MDEV-30577 Case folding for uca1400 collations is not up to date +# +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci; +EXECUTE IMMEDIATE SFORMAT(' +CREATE VIEW v_bmp AS +SELECT + seq AS codepoint, + LPAD(HEX(seq),4,''0'') AS codepoint_hex4, + CONVERT(CHAR(seq USING utf32) USING {}) COLLATE {} AS c +FROM + seq_0_to_65535', @@character_set_connection, @@collation_connection); +SELECT COLLATION(c) FROM v_bmp LIMIT 1; +COLLATION(c) +utf8mb4_uca1400_ai_ci +SELECT +codepoint_hex4, +HEX(CAST(LOWER(c) AS CHAR CHARACTER SET ucs2)), +HEX(CAST(UPPER(c) AS CHAR CHARACTER SET ucs2)) +FROM v_bmp +WHERE BINARY(c)<>BINARY(LOWER(c)) OR BINARY(c)<>BINARY(UPPER(c)); +codepoint_hex4 HEX(CAST(LOWER(c) AS CHAR CHARACTER SET ucs2)) HEX(CAST(UPPER(c) AS CHAR CHARACTER SET ucs2)) +0041 0061 0041 +0042 0062 0042 +0043 0063 0043 +0044 0064 0044 +0045 0065 0045 +0046 0066 0046 +0047 0067 0047 +0048 0068 0048 +0049 0069 0049 +004A 006A 004A +004B 006B 004B +004C 006C 004C +004D 006D 004D +004E 006E 004E +004F 006F 004F +0050 0070 0050 +0051 0071 0051 +0052 0072 0052 +0053 0073 0053 +0054 0074 0054 +0055 0075 0055 +0056 0076 0056 +0057 0077 0057 +0058 0078 0058 +0059 0079 0059 +005A 007A 005A +0061 0061 0041 +0062 0062 0042 +0063 0063 0043 +0064 0064 0044 +0065 0065 0045 +0066 0066 0046 +0067 0067 0047 +0068 0068 0048 +0069 0069 0049 +006A 006A 004A +006B 006B 004B +006C 006C 004C +006D 006D 004D +006E 006E 004E +006F 006F 004F +0070 0070 0050 +0071 0071 0051 +0072 0072 0052 +0073 0073 0053 +0074 0074 0054 +0075 0075 0055 +0076 0076 0056 +0077 0077 0057 +0078 0078 0058 +0079 0079 0059 +007A 007A 005A +00B5 00B5 039C +00C0 00E0 00C0 +00C1 00E1 00C1 +00C2 00E2 00C2 +00C3 00E3 00C3 +00C4 00E4 00C4 +00C5 00E5 00C5 +00C6 00E6 00C6 +00C7 00E7 00C7 +00C8 00E8 00C8 +00C9 00E9 00C9 +00CA 00EA 00CA +00CB 00EB 00CB +00CC 00EC 00CC +00CD 00ED 00CD +00CE 00EE 00CE +00CF 00EF 00CF +00D0 00F0 00D0 +00D1 00F1 00D1 +00D2 00F2 00D2 +00D3 00F3 00D3 +00D4 00F4 00D4 +00D5 00F5 00D5 +00D6 00F6 00D6 +00D8 00F8 00D8 +00D9 00F9 00D9 +00DA 00FA 00DA +00DB 00FB 00DB +00DC 00FC 00DC +00DD 00FD 00DD +00DE 00FE 00DE +00E0 00E0 00C0 +00E1 00E1 00C1 +00E2 00E2 00C2 +00E3 00E3 00C3 +00E4 00E4 00C4 +00E5 00E5 00C5 +00E6 00E6 00C6 +00E7 00E7 00C7 +00E8 00E8 00C8 +00E9 00E9 00C9 +00EA 00EA 00CA +00EB 00EB 00CB +00EC 00EC 00CC +00ED 00ED 00CD +00EE 00EE 00CE +00EF 00EF 00CF +00F0 00F0 00D0 +00F1 00F1 00D1 +00F2 00F2 00D2 +00F3 00F3 00D3 +00F4 00F4 00D4 +00F5 00F5 00D5 +00F6 00F6 00D6 +00F8 00F8 00D8 +00F9 00F9 00D9 +00FA 00FA 00DA +00FB 00FB 00DB +00FC 00FC 00DC +00FD 00FD 00DD +00FE 00FE 00DE +00FF 00FF 0178 +0100 0101 0100 +0101 0101 0100 +0102 0103 0102 +0103 0103 0102 +0104 0105 0104 +0105 0105 0104 +0106 0107 0106 +0107 0107 0106 +0108 0109 0108 +0109 0109 0108 +010A 010B 010A +010B 010B 010A +010C 010D 010C +010D 010D 010C +010E 010F 010E +010F 010F 010E +0110 0111 0110 +0111 0111 0110 +0112 0113 0112 +0113 0113 0112 +0114 0115 0114 +0115 0115 0114 +0116 0117 0116 +0117 0117 0116 +0118 0119 0118 +0119 0119 0118 +011A 011B 011A +011B 011B 011A +011C 011D 011C +011D 011D 011C +011E 011F 011E +011F 011F 011E +0120 0121 0120 +0121 0121 0120 +0122 0123 0122 +0123 0123 0122 +0124 0125 0124 +0125 0125 0124 +0126 0127 0126 +0127 0127 0126 +0128 0129 0128 +0129 0129 0128 +012A 012B 012A +012B 012B 012A +012C 012D 012C +012D 012D 012C +012E 012F 012E +012F 012F 012E +0130 0069 0130 +0131 0131 0049 +0132 0133 0132 +0133 0133 0132 +0134 0135 0134 +0135 0135 0134 +0136 0137 0136 +0137 0137 0136 +0139 013A 0139 +013A 013A 0139 +013B 013C 013B +013C 013C 013B +013D 013E 013D +013E 013E 013D +013F 0140 013F +0140 0140 013F +0141 0142 0141 +0142 0142 0141 +0143 0144 0143 +0144 0144 0143 +0145 0146 0145 +0146 0146 0145 +0147 0148 0147 +0148 0148 0147 +014A 014B 014A +014B 014B 014A +014C 014D 014C +014D 014D 014C +014E 014F 014E +014F 014F 014E +0150 0151 0150 +0151 0151 0150 +0152 0153 0152 +0153 0153 0152 +0154 0155 0154 +0155 0155 0154 +0156 0157 0156 +0157 0157 0156 +0158 0159 0158 +0159 0159 0158 +015A 015B 015A +015B 015B 015A +015C 015D 015C +015D 015D 015C +015E 015F 015E +015F 015F 015E +0160 0161 0160 +0161 0161 0160 +0162 0163 0162 +0163 0163 0162 +0164 0165 0164 +0165 0165 0164 +0166 0167 0166 +0167 0167 0166 +0168 0169 0168 +0169 0169 0168 +016A 016B 016A +016B 016B 016A +016C 016D 016C +016D 016D 016C +016E 016F 016E +016F 016F 016E +0170 0171 0170 +0171 0171 0170 +0172 0173 0172 +0173 0173 0172 +0174 0175 0174 +0175 0175 0174 +0176 0177 0176 +0177 0177 0176 +0178 00FF 0178 +0179 017A 0179 +017A 017A 0179 +017B 017C 017B +017C 017C 017B +017D 017E 017D +017E 017E 017D +017F 017F 0053 +0180 0180 0243 +0181 0253 0181 +0182 0183 0182 +0183 0183 0182 +0184 0185 0184 +0185 0185 0184 +0186 0254 0186 +0187 0188 0187 +0188 0188 0187 +0189 0256 0189 +018A 0257 018A +018B 018C 018B +018C 018C 018B +018E 01DD 018E +018F 0259 018F +0190 025B 0190 +0191 0192 0191 +0192 0192 0191 +0193 0260 0193 +0194 0263 0194 +0195 0195 01F6 +0196 0269 0196 +0197 0268 0197 +0198 0199 0198 +0199 0199 0198 +019A 019A 023D +019C 026F 019C +019D 0272 019D +019E 019E 0220 +019F 0275 019F +01A0 01A1 01A0 +01A1 01A1 01A0 +01A2 01A3 01A2 +01A3 01A3 01A2 +01A4 01A5 01A4 +01A5 01A5 01A4 +01A6 0280 01A6 +01A7 01A8 01A7 +01A8 01A8 01A7 +01A9 0283 01A9 +01AC 01AD 01AC +01AD 01AD 01AC +01AE 0288 01AE +01AF 01B0 01AF +01B0 01B0 01AF +01B1 028A 01B1 +01B2 028B 01B2 +01B3 01B4 01B3 +01B4 01B4 01B3 +01B5 01B6 01B5 +01B6 01B6 01B5 +01B7 0292 01B7 +01B8 01B9 01B8 +01B9 01B9 01B8 +01BC 01BD 01BC +01BD 01BD 01BC +01BF 01BF 01F7 +01C4 01C6 01C4 +01C5 01C6 01C4 +01C6 01C6 01C4 +01C7 01C9 01C7 +01C8 01C9 01C7 +01C9 01C9 01C7 +01CA 01CC 01CA +01CB 01CC 01CA +01CC 01CC 01CA +01CD 01CE 01CD +01CE 01CE 01CD +01CF 01D0 01CF +01D0 01D0 01CF +01D1 01D2 01D1 +01D2 01D2 01D1 +01D3 01D4 01D3 +01D4 01D4 01D3 +01D5 01D6 01D5 +01D6 01D6 01D5 +01D7 01D8 01D7 +01D8 01D8 01D7 +01D9 01DA 01D9 +01DA 01DA 01D9 +01DB 01DC 01DB +01DC 01DC 01DB +01DD 01DD 018E +01DE 01DF 01DE +01DF 01DF 01DE +01E0 01E1 01E0 +01E1 01E1 01E0 +01E2 01E3 01E2 +01E3 01E3 01E2 +01E4 01E5 01E4 +01E5 01E5 01E4 +01E6 01E7 01E6 +01E7 01E7 01E6 +01E8 01E9 01E8 +01E9 01E9 01E8 +01EA 01EB 01EA +01EB 01EB 01EA +01EC 01ED 01EC +01ED 01ED 01EC +01EE 01EF 01EE +01EF 01EF 01EE +01F1 01F3 01F1 +01F2 01F3 01F1 +01F3 01F3 01F1 +01F4 01F5 01F4 +01F5 01F5 01F4 +01F6 0195 01F6 +01F7 01BF 01F7 +01F8 01F9 01F8 +01F9 01F9 01F8 +01FA 01FB 01FA +01FB 01FB 01FA +01FC 01FD 01FC +01FD 01FD 01FC +01FE 01FF 01FE +01FF 01FF 01FE +0200 0201 0200 +0201 0201 0200 +0202 0203 0202 +0203 0203 0202 +0204 0205 0204 +0205 0205 0204 +0206 0207 0206 +0207 0207 0206 +0208 0209 0208 +0209 0209 0208 +020A 020B 020A +020B 020B 020A +020C 020D 020C +020D 020D 020C +020E 020F 020E +020F 020F 020E +0210 0211 0210 +0211 0211 0210 +0212 0213 0212 +0213 0213 0212 +0214 0215 0214 +0215 0215 0214 +0216 0217 0216 +0217 0217 0216 +0218 0219 0218 +0219 0219 0218 +021A 021B 021A +021B 021B 021A +021C 021D 021C +021D 021D 021C +021E 021F 021E +021F 021F 021E +0220 019E 0220 +0222 0223 0222 +0223 0223 0222 +0224 0225 0224 +0225 0225 0224 +0226 0227 0226 +0227 0227 0226 +0228 0229 0228 +0229 0229 0228 +022A 022B 022A +022B 022B 022A +022C 022D 022C +022D 022D 022C +022E 022F 022E +022F 022F 022E +0230 0231 0230 +0231 0231 0230 +0232 0233 0232 +0233 0233 0232 +023A 2C65 023A +023B 023C 023B +023C 023C 023B +023D 019A 023D +023E 2C66 023E +023F 023F 2C7E +0240 0240 2C7F +0241 0242 0241 +0242 0242 0241 +0243 0180 0243 +0244 0289 0244 +0245 028C 0245 +0246 0247 0246 +0247 0247 0246 +0248 0249 0248 +0249 0249 0248 +024A 024B 024A +024B 024B 024A +024C 024D 024C +024D 024D 024C +024E 024F 024E +024F 024F 024E +0250 0250 2C6F +0251 0251 2C6D +0252 0252 2C70 +0253 0253 0181 +0254 0254 0186 +0256 0256 0189 +0257 0257 018A +0259 0259 018F +025B 025B 0190 +025C 025C A7AB +0260 0260 0193 +0261 0261 A7AC +0263 0263 0194 +0265 0265 A78D +0266 0266 A7AA +0268 0268 0197 +0269 0269 0196 +026A 026A A7AE +026B 026B 2C62 +026C 026C A7AD +026F 026F 019C +0271 0271 2C6E +0272 0272 019D +0275 0275 019F +027D 027D 2C64 +0280 0280 01A6 +0282 0282 A7C5 +0283 0283 01A9 +0287 0287 A7B1 +0288 0288 01AE +0289 0289 0244 +028A 028A 01B1 +028B 028B 01B2 +028C 028C 0245 +0292 0292 01B7 +029D 029D A7B2 +029E 029E A7B0 +0345 0345 0399 +0370 0371 0370 +0371 0371 0370 +0372 0373 0372 +0373 0373 0372 +0376 0377 0376 +0377 0377 0376 +037B 037B 03FD +037C 037C 03FE +037D 037D 03FF +037F 03F3 037F +0386 03AC 0386 +0388 03AD 0388 +0389 03AE 0389 +038A 03AF 038A +038C 03CC 038C +038E 03CD 038E +038F 03CE 038F +0391 03B1 0391 +0392 03B2 0392 +0393 03B3 0393 +0394 03B4 0394 +0395 03B5 0395 +0396 03B6 0396 +0397 03B7 0397 +0398 03B8 0398 +0399 03B9 0399 +039A 03BA 039A +039B 03BB 039B +039C 03BC 039C +039D 03BD 039D +039E 03BE 039E +039F 03BF 039F +03A0 03C0 03A0 +03A1 03C1 03A1 +03A3 03C3 03A3 +03A4 03C4 03A4 +03A5 03C5 03A5 +03A6 03C6 03A6 +03A7 03C7 03A7 +03A8 03C8 03A8 +03A9 03C9 03A9 +03AA 03CA 03AA +03AB 03CB 03AB +03AC 03AC 0386 +03AD 03AD 0388 +03AE 03AE 0389 +03AF 03AF 038A +03B1 03B1 0391 +03B2 03B2 0392 +03B3 03B3 0393 +03B4 03B4 0394 +03B5 03B5 0395 +03B6 03B6 0396 +03B7 03B7 0397 +03B8 03B8 0398 +03B9 03B9 0399 +03BA 03BA 039A +03BB 03BB 039B +03BC 03BC 039C +03BD 03BD 039D +03BE 03BE 039E +03BF 03BF 039F +03C0 03C0 03A0 +03C1 03C1 03A1 +03C2 03C2 03A3 +03C3 03C3 03A3 +03C4 03C4 03A4 +03C5 03C5 03A5 +03C6 03C6 03A6 +03C7 03C7 03A7 +03C8 03C8 03A8 +03C9 03C9 03A9 +03CA 03CA 03AA +03CB 03CB 03AB +03CC 03CC 038C +03CD 03CD 038E +03CE 03CE 038F +03CF 03D7 03CF +03D0 03D0 0392 +03D1 03D1 0398 +03D5 03D5 03A6 +03D6 03D6 03A0 +03D7 03D7 03CF +03D8 03D9 03D8 +03D9 03D9 03D8 +03DA 03DB 03DA +03DB 03DB 03DA +03DC 03DD 03DC +03DD 03DD 03DC +03DE 03DF 03DE +03DF 03DF 03DE +03E0 03E1 03E0 +03E1 03E1 03E0 +03E2 03E3 03E2 +03E3 03E3 03E2 +03E4 03E5 03E4 +03E5 03E5 03E4 +03E6 03E7 03E6 +03E7 03E7 03E6 +03E8 03E9 03E8 +03E9 03E9 03E8 +03EA 03EB 03EA +03EB 03EB 03EA +03EC 03ED 03EC +03ED 03ED 03EC +03EE 03EF 03EE +03EF 03EF 03EE +03F0 03F0 039A +03F1 03F1 03A1 +03F2 03F2 03F9 +03F3 03F3 037F +03F4 03B8 03F4 +03F5 03F5 0395 +03F7 03F8 03F7 +03F8 03F8 03F7 +03F9 03F2 03F9 +03FA 03FB 03FA +03FB 03FB 03FA +03FD 037B 03FD +03FE 037C 03FE +03FF 037D 03FF +0400 0450 0400 +0401 0451 0401 +0402 0452 0402 +0403 0453 0403 +0404 0454 0404 +0405 0455 0405 +0406 0456 0406 +0407 0457 0407 +0408 0458 0408 +0409 0459 0409 +040A 045A 040A +040B 045B 040B +040C 045C 040C +040D 045D 040D +040E 045E 040E +040F 045F 040F +0410 0430 0410 +0411 0431 0411 +0412 0432 0412 +0413 0433 0413 +0414 0434 0414 +0415 0435 0415 +0416 0436 0416 +0417 0437 0417 +0418 0438 0418 +0419 0439 0419 +041A 043A 041A +041B 043B 041B +041C 043C 041C +041D 043D 041D +041E 043E 041E +041F 043F 041F +0420 0440 0420 +0421 0441 0421 +0422 0442 0422 +0423 0443 0423 +0424 0444 0424 +0425 0445 0425 +0426 0446 0426 +0427 0447 0427 +0428 0448 0428 +0429 0449 0429 +042A 044A 042A +042B 044B 042B +042C 044C 042C +042D 044D 042D +042E 044E 042E +042F 044F 042F +0430 0430 0410 +0431 0431 0411 +0432 0432 0412 +0433 0433 0413 +0434 0434 0414 +0435 0435 0415 +0436 0436 0416 +0437 0437 0417 +0438 0438 0418 +0439 0439 0419 +043A 043A 041A +043B 043B 041B +043C 043C 041C +043D 043D 041D +043E 043E 041E +043F 043F 041F +0440 0440 0420 +0441 0441 0421 +0442 0442 0422 +0443 0443 0423 +0444 0444 0424 +0445 0445 0425 +0446 0446 0426 +0447 0447 0427 +0448 0448 0428 +0449 0449 0429 +044A 044A 042A +044B 044B 042B +044C 044C 042C +044D 044D 042D +044E 044E 042E +044F 044F 042F +0450 0450 0400 +0451 0451 0401 +0452 0452 0402 +0453 0453 0403 +0454 0454 0404 +0455 0455 0405 +0456 0456 0406 +0457 0457 0407 +0458 0458 0408 +0459 0459 0409 +045A 045A 040A +045B 045B 040B +045C 045C 040C +045D 045D 040D +045E 045E 040E +045F 045F 040F +0460 0461 0460 +0461 0461 0460 +0462 0463 0462 +0463 0463 0462 +0464 0465 0464 +0465 0465 0464 +0466 0467 0466 +0467 0467 0466 +0468 0469 0468 +0469 0469 0468 +046A 046B 046A +046B 046B 046A +046C 046D 046C +046D 046D 046C +046E 046F 046E +046F 046F 046E +0470 0471 0470 +0471 0471 0470 +0472 0473 0472 +0473 0473 0472 +0474 0475 0474 +0475 0475 0474 +0476 0477 0476 +0477 0477 0476 +0478 0479 0478 +0479 0479 0478 +047A 047B 047A +047B 047B 047A +047C 047D 047C +047D 047D 047C +047E 047F 047E +047F 047F 047E +0480 0481 0480 +0481 0481 0480 +048A 048B 048A +048B 048B 048A +048C 048D 048C +048D 048D 048C +048E 048F 048E +048F 048F 048E +0490 0491 0490 +0491 0491 0490 +0492 0493 0492 +0493 0493 0492 +0494 0495 0494 +0495 0495 0494 +0496 0497 0496 +0497 0497 0496 +0498 0499 0498 +0499 0499 0498 +049A 049B 049A +049B 049B 049A +049C 049D 049C +049D 049D 049C +049E 049F 049E +049F 049F 049E +04A0 04A1 04A0 +04A1 04A1 04A0 +04A2 04A3 04A2 +04A3 04A3 04A2 +04A4 04A5 04A4 +04A5 04A5 04A4 +04A6 04A7 04A6 +04A7 04A7 04A6 +04A8 04A9 04A8 +04A9 04A9 04A8 +04AA 04AB 04AA +04AB 04AB 04AA +04AC 04AD 04AC +04AD 04AD 04AC +04AE 04AF 04AE +04AF 04AF 04AE +04B0 04B1 04B0 +04B1 04B1 04B0 +04B2 04B3 04B2 +04B3 04B3 04B2 +04B4 04B5 04B4 +04B5 04B5 04B4 +04B6 04B7 04B6 +04B7 04B7 04B6 +04B8 04B9 04B8 +04B9 04B9 04B8 +04BA 04BB 04BA +04BB 04BB 04BA +04BC 04BD 04BC +04BD 04BD 04BC +04BE 04BF 04BE +04BF 04BF 04BE +04C0 04CF 04C0 +04C1 04C2 04C1 +04C2 04C2 04C1 +04C3 04C4 04C3 +04C4 04C4 04C3 +04C5 04C6 04C5 +04C6 04C6 04C5 +04C7 04C8 04C7 +04C8 04C8 04C7 +04C9 04CA 04C9 +04CA 04CA 04C9 +04CB 04CC 04CB +04CC 04CC 04CB +04CD 04CE 04CD +04CE 04CE 04CD +04CF 04CF 04C0 +04D0 04D1 04D0 +04D1 04D1 04D0 +04D2 04D3 04D2 +04D3 04D3 04D2 +04D4 04D5 04D4 +04D5 04D5 04D4 +04D6 04D7 04D6 +04D7 04D7 04D6 +04D8 04D9 04D8 +04D9 04D9 04D8 +04DA 04DB 04DA +04DB 04DB 04DA +04DC 04DD 04DC +04DD 04DD 04DC +04DE 04DF 04DE +04DF 04DF 04DE +04E0 04E1 04E0 +04E1 04E1 04E0 +04E2 04E3 04E2 +04E3 04E3 04E2 +04E4 04E5 04E4 +04E5 04E5 04E4 +04E6 04E7 04E6 +04E7 04E7 04E6 +04E8 04E9 04E8 +04E9 04E9 04E8 +04EA 04EB 04EA +04EB 04EB 04EA +04EC 04ED 04EC +04ED 04ED 04EC +04EE 04EF 04EE +04EF 04EF 04EE +04F0 04F1 04F0 +04F1 04F1 04F0 +04F2 04F3 04F2 +04F3 04F3 04F2 +04F4 04F5 04F4 +04F5 04F5 04F4 +04F6 04F7 04F6 +04F7 04F7 04F6 +04F8 04F9 04F8 +04F9 04F9 04F8 +04FA 04FB 04FA +04FB 04FB 04FA +04FC 04FD 04FC +04FD 04FD 04FC +04FE 04FF 04FE +04FF 04FF 04FE +0500 0501 0500 +0501 0501 0500 +0502 0503 0502 +0503 0503 0502 +0504 0505 0504 +0505 0505 0504 +0506 0507 0506 +0507 0507 0506 +0508 0509 0508 +0509 0509 0508 +050A 050B 050A +050B 050B 050A +050C 050D 050C +050D 050D 050C +050E 050F 050E +050F 050F 050E +0510 0511 0510 +0511 0511 0510 +0512 0513 0512 +0513 0513 0512 +0514 0515 0514 +0515 0515 0514 +0516 0517 0516 +0517 0517 0516 +0518 0519 0518 +0519 0519 0518 +051A 051B 051A +051B 051B 051A +051C 051D 051C +051D 051D 051C +051E 051F 051E +051F 051F 051E +0520 0521 0520 +0521 0521 0520 +0522 0523 0522 +0523 0523 0522 +0524 0525 0524 +0525 0525 0524 +0526 0527 0526 +0527 0527 0526 +0528 0529 0528 +0529 0529 0528 +052A 052B 052A +052B 052B 052A +052C 052D 052C +052D 052D 052C +052E 052F 052E +052F 052F 052E +0531 0561 0531 +0532 0562 0532 +0533 0563 0533 +0534 0564 0534 +0535 0565 0535 +0536 0566 0536 +0537 0567 0537 +0538 0568 0538 +0539 0569 0539 +053A 056A 053A +053B 056B 053B +053C 056C 053C +053D 056D 053D +053E 056E 053E +053F 056F 053F +0540 0570 0540 +0541 0571 0541 +0542 0572 0542 +0543 0573 0543 +0544 0574 0544 +0545 0575 0545 +0546 0576 0546 +0547 0577 0547 +0548 0578 0548 +0549 0579 0549 +054A 057A 054A +054B 057B 054B +054C 057C 054C +054D 057D 054D +054E 057E 054E +054F 057F 054F +0550 0580 0550 +0551 0581 0551 +0552 0582 0552 +0553 0583 0553 +0554 0584 0554 +0555 0585 0555 +0556 0586 0556 +0561 0561 0531 +0562 0562 0532 +0563 0563 0533 +0564 0564 0534 +0565 0565 0535 +0566 0566 0536 +0567 0567 0537 +0568 0568 0538 +0569 0569 0539 +056A 056A 053A +056B 056B 053B +056C 056C 053C +056D 056D 053D +056E 056E 053E +056F 056F 053F +0570 0570 0540 +0571 0571 0541 +0572 0572 0542 +0573 0573 0543 +0574 0574 0544 +0575 0575 0545 +0576 0576 0546 +0577 0577 0547 +0578 0578 0548 +0579 0579 0549 +057A 057A 054A +057B 057B 054B +057C 057C 054C +057D 057D 054D +057E 057E 054E +057F 057F 054F +0580 0580 0550 +0581 0581 0551 +0582 0582 0552 +0583 0583 0553 +0584 0584 0554 +0585 0585 0555 +0586 0586 0556 +10A0 2D00 10A0 +10A1 2D01 10A1 +10A2 2D02 10A2 +10A3 2D03 10A3 +10A4 2D04 10A4 +10A5 2D05 10A5 +10A6 2D06 10A6 +10A7 2D07 10A7 +10A8 2D08 10A8 +10A9 2D09 10A9 +10AA 2D0A 10AA +10AB 2D0B 10AB +10AC 2D0C 10AC +10AD 2D0D 10AD +10AE 2D0E 10AE +10AF 2D0F 10AF +10B0 2D10 10B0 +10B1 2D11 10B1 +10B2 2D12 10B2 +10B3 2D13 10B3 +10B4 2D14 10B4 +10B5 2D15 10B5 +10B6 2D16 10B6 +10B7 2D17 10B7 +10B8 2D18 10B8 +10B9 2D19 10B9 +10BA 2D1A 10BA +10BB 2D1B 10BB +10BC 2D1C 10BC +10BD 2D1D 10BD +10BE 2D1E 10BE +10BF 2D1F 10BF +10C0 2D20 10C0 +10C1 2D21 10C1 +10C2 2D22 10C2 +10C3 2D23 10C3 +10C4 2D24 10C4 +10C5 2D25 10C5 +10C7 2D27 10C7 +10CD 2D2D 10CD +10D0 10D0 1C90 +10D1 10D1 1C91 +10D2 10D2 1C92 +10D3 10D3 1C93 +10D4 10D4 1C94 +10D5 10D5 1C95 +10D6 10D6 1C96 +10D7 10D7 1C97 +10D8 10D8 1C98 +10D9 10D9 1C99 +10DA 10DA 1C9A +10DB 10DB 1C9B +10DC 10DC 1C9C +10DD 10DD 1C9D +10DE 10DE 1C9E +10DF 10DF 1C9F +10E0 10E0 1CA0 +10E1 10E1 1CA1 +10E2 10E2 1CA2 +10E3 10E3 1CA3 +10E4 10E4 1CA4 +10E5 10E5 1CA5 +10E6 10E6 1CA6 +10E7 10E7 1CA7 +10E8 10E8 1CA8 +10E9 10E9 1CA9 +10EA 10EA 1CAA +10EB 10EB 1CAB +10EC 10EC 1CAC +10ED 10ED 1CAD +10EE 10EE 1CAE +10EF 10EF 1CAF +10F0 10F0 1CB0 +10F1 10F1 1CB1 +10F2 10F2 1CB2 +10F3 10F3 1CB3 +10F4 10F4 1CB4 +10F5 10F5 1CB5 +10F6 10F6 1CB6 +10F7 10F7 1CB7 +10F8 10F8 1CB8 +10F9 10F9 1CB9 +10FA 10FA 1CBA +10FD 10FD 1CBD +10FE 10FE 1CBE +10FF 10FF 1CBF +13A0 AB70 13A0 +13A1 AB71 13A1 +13A2 AB72 13A2 +13A3 AB73 13A3 +13A4 AB74 13A4 +13A5 AB75 13A5 +13A6 AB76 13A6 +13A7 AB77 13A7 +13A8 AB78 13A8 +13A9 AB79 13A9 +13AA AB7A 13AA +13AB AB7B 13AB +13AC AB7C 13AC +13AD AB7D 13AD +13AE AB7E 13AE +13AF AB7F 13AF +13B0 AB80 13B0 +13B1 AB81 13B1 +13B2 AB82 13B2 +13B3 AB83 13B3 +13B4 AB84 13B4 +13B5 AB85 13B5 +13B6 AB86 13B6 +13B7 AB87 13B7 +13B8 AB88 13B8 +13B9 AB89 13B9 +13BA AB8A 13BA +13BB AB8B 13BB +13BC AB8C 13BC +13BD AB8D 13BD +13BE AB8E 13BE +13BF AB8F 13BF +13C0 AB90 13C0 +13C1 AB91 13C1 +13C2 AB92 13C2 +13C3 AB93 13C3 +13C4 AB94 13C4 +13C5 AB95 13C5 +13C6 AB96 13C6 +13C7 AB97 13C7 +13C8 AB98 13C8 +13C9 AB99 13C9 +13CA AB9A 13CA +13CB AB9B 13CB +13CC AB9C 13CC +13CD AB9D 13CD +13CE AB9E 13CE +13CF AB9F 13CF +13D0 ABA0 13D0 +13D1 ABA1 13D1 +13D2 ABA2 13D2 +13D3 ABA3 13D3 +13D4 ABA4 13D4 +13D5 ABA5 13D5 +13D6 ABA6 13D6 +13D7 ABA7 13D7 +13D8 ABA8 13D8 +13D9 ABA9 13D9 +13DA ABAA 13DA +13DB ABAB 13DB +13DC ABAC 13DC +13DD ABAD 13DD +13DE ABAE 13DE +13DF ABAF 13DF +13E0 ABB0 13E0 +13E1 ABB1 13E1 +13E2 ABB2 13E2 +13E3 ABB3 13E3 +13E4 ABB4 13E4 +13E5 ABB5 13E5 +13E6 ABB6 13E6 +13E7 ABB7 13E7 +13E8 ABB8 13E8 +13E9 ABB9 13E9 +13EA ABBA 13EA +13EB ABBB 13EB +13EC ABBC 13EC +13ED ABBD 13ED +13EE ABBE 13EE +13EF ABBF 13EF +13F0 13F8 13F0 +13F1 13F9 13F1 +13F2 13FA 13F2 +13F3 13FB 13F3 +13F4 13FC 13F4 +13F5 13FD 13F5 +13F8 13F8 13F0 +13F9 13F9 13F1 +13FA 13FA 13F2 +13FB 13FB 13F3 +13FC 13FC 13F4 +13FD 13FD 13F5 +1C80 1C80 0412 +1C81 1C81 0414 +1C82 1C82 041E +1C83 1C83 0421 +1C84 1C84 0422 +1C85 1C85 0422 +1C86 1C86 042A +1C87 1C87 0462 +1C88 1C88 A64A +1C90 10D0 1C90 +1C91 10D1 1C91 +1C92 10D2 1C92 +1C93 10D3 1C93 +1C94 10D4 1C94 +1C95 10D5 1C95 +1C96 10D6 1C96 +1C97 10D7 1C97 +1C98 10D8 1C98 +1C99 10D9 1C99 +1C9A 10DA 1C9A +1C9B 10DB 1C9B +1C9C 10DC 1C9C +1C9D 10DD 1C9D +1C9E 10DE 1C9E +1C9F 10DF 1C9F +1CA0 10E0 1CA0 +1CA1 10E1 1CA1 +1CA2 10E2 1CA2 +1CA3 10E3 1CA3 +1CA4 10E4 1CA4 +1CA5 10E5 1CA5 +1CA6 10E6 1CA6 +1CA7 10E7 1CA7 +1CA8 10E8 1CA8 +1CA9 10E9 1CA9 +1CAA 10EA 1CAA +1CAB 10EB 1CAB +1CAC 10EC 1CAC +1CAD 10ED 1CAD +1CAE 10EE 1CAE +1CAF 10EF 1CAF +1CB0 10F0 1CB0 +1CB1 10F1 1CB1 +1CB2 10F2 1CB2 +1CB3 10F3 1CB3 +1CB4 10F4 1CB4 +1CB5 10F5 1CB5 +1CB6 10F6 1CB6 +1CB7 10F7 1CB7 +1CB8 10F8 1CB8 +1CB9 10F9 1CB9 +1CBA 10FA 1CBA +1CBD 10FD 1CBD +1CBE 10FE 1CBE +1CBF 10FF 1CBF +1D79 1D79 A77D +1D7D 1D7D 2C63 +1D8E 1D8E A7C6 +1E00 1E01 1E00 +1E01 1E01 1E00 +1E02 1E03 1E02 +1E03 1E03 1E02 +1E04 1E05 1E04 +1E05 1E05 1E04 +1E06 1E07 1E06 +1E07 1E07 1E06 +1E08 1E09 1E08 +1E09 1E09 1E08 +1E0A 1E0B 1E0A +1E0B 1E0B 1E0A +1E0C 1E0D 1E0C +1E0D 1E0D 1E0C +1E0E 1E0F 1E0E +1E0F 1E0F 1E0E +1E10 1E11 1E10 +1E11 1E11 1E10 +1E12 1E13 1E12 +1E13 1E13 1E12 +1E14 1E15 1E14 +1E15 1E15 1E14 +1E16 1E17 1E16 +1E17 1E17 1E16 +1E18 1E19 1E18 +1E19 1E19 1E18 +1E1A 1E1B 1E1A +1E1B 1E1B 1E1A +1E1C 1E1D 1E1C +1E1D 1E1D 1E1C +1E1E 1E1F 1E1E +1E1F 1E1F 1E1E +1E20 1E21 1E20 +1E21 1E21 1E20 +1E22 1E23 1E22 +1E23 1E23 1E22 +1E24 1E25 1E24 +1E25 1E25 1E24 +1E26 1E27 1E26 +1E27 1E27 1E26 +1E28 1E29 1E28 +1E29 1E29 1E28 +1E2A 1E2B 1E2A +1E2B 1E2B 1E2A +1E2C 1E2D 1E2C +1E2D 1E2D 1E2C +1E2E 1E2F 1E2E +1E2F 1E2F 1E2E +1E30 1E31 1E30 +1E31 1E31 1E30 +1E32 1E33 1E32 +1E33 1E33 1E32 +1E34 1E35 1E34 +1E35 1E35 1E34 +1E36 1E37 1E36 +1E37 1E37 1E36 +1E38 1E39 1E38 +1E39 1E39 1E38 +1E3A 1E3B 1E3A +1E3B 1E3B 1E3A +1E3C 1E3D 1E3C +1E3D 1E3D 1E3C +1E3E 1E3F 1E3E +1E3F 1E3F 1E3E +1E40 1E41 1E40 +1E41 1E41 1E40 +1E42 1E43 1E42 +1E43 1E43 1E42 +1E44 1E45 1E44 +1E45 1E45 1E44 +1E46 1E47 1E46 +1E47 1E47 1E46 +1E48 1E49 1E48 +1E49 1E49 1E48 +1E4A 1E4B 1E4A +1E4B 1E4B 1E4A +1E4C 1E4D 1E4C +1E4D 1E4D 1E4C +1E4E 1E4F 1E4E +1E4F 1E4F 1E4E +1E50 1E51 1E50 +1E51 1E51 1E50 +1E52 1E53 1E52 +1E53 1E53 1E52 +1E54 1E55 1E54 +1E55 1E55 1E54 +1E56 1E57 1E56 +1E57 1E57 1E56 +1E58 1E59 1E58 +1E59 1E59 1E58 +1E5A 1E5B 1E5A +1E5B 1E5B 1E5A +1E5C 1E5D 1E5C +1E5D 1E5D 1E5C +1E5E 1E5F 1E5E +1E5F 1E5F 1E5E +1E60 1E61 1E60 +1E61 1E61 1E60 +1E62 1E63 1E62 +1E63 1E63 1E62 +1E64 1E65 1E64 +1E65 1E65 1E64 +1E66 1E67 1E66 +1E67 1E67 1E66 +1E68 1E69 1E68 +1E69 1E69 1E68 +1E6A 1E6B 1E6A +1E6B 1E6B 1E6A +1E6C 1E6D 1E6C +1E6D 1E6D 1E6C +1E6E 1E6F 1E6E +1E6F 1E6F 1E6E +1E70 1E71 1E70 +1E71 1E71 1E70 +1E72 1E73 1E72 +1E73 1E73 1E72 +1E74 1E75 1E74 +1E75 1E75 1E74 +1E76 1E77 1E76 +1E77 1E77 1E76 +1E78 1E79 1E78 +1E79 1E79 1E78 +1E7A 1E7B 1E7A +1E7B 1E7B 1E7A +1E7C 1E7D 1E7C +1E7D 1E7D 1E7C +1E7E 1E7F 1E7E +1E7F 1E7F 1E7E +1E80 1E81 1E80 +1E81 1E81 1E80 +1E82 1E83 1E82 +1E83 1E83 1E82 +1E84 1E85 1E84 +1E85 1E85 1E84 +1E86 1E87 1E86 +1E87 1E87 1E86 +1E88 1E89 1E88 +1E89 1E89 1E88 +1E8A 1E8B 1E8A +1E8B 1E8B 1E8A +1E8C 1E8D 1E8C +1E8D 1E8D 1E8C +1E8E 1E8F 1E8E +1E8F 1E8F 1E8E +1E90 1E91 1E90 +1E91 1E91 1E90 +1E92 1E93 1E92 +1E93 1E93 1E92 +1E94 1E95 1E94 +1E95 1E95 1E94 +1E9B 1E9B 1E60 +1E9E 00DF 1E9E +1EA0 1EA1 1EA0 +1EA1 1EA1 1EA0 +1EA2 1EA3 1EA2 +1EA3 1EA3 1EA2 +1EA4 1EA5 1EA4 +1EA5 1EA5 1EA4 +1EA6 1EA7 1EA6 +1EA7 1EA7 1EA6 +1EA8 1EA9 1EA8 +1EA9 1EA9 1EA8 +1EAA 1EAB 1EAA +1EAB 1EAB 1EAA +1EAC 1EAD 1EAC +1EAD 1EAD 1EAC +1EAE 1EAF 1EAE +1EAF 1EAF 1EAE +1EB0 1EB1 1EB0 +1EB1 1EB1 1EB0 +1EB2 1EB3 1EB2 +1EB3 1EB3 1EB2 +1EB4 1EB5 1EB4 +1EB5 1EB5 1EB4 +1EB6 1EB7 1EB6 +1EB7 1EB7 1EB6 +1EB8 1EB9 1EB8 +1EB9 1EB9 1EB8 +1EBA 1EBB 1EBA +1EBB 1EBB 1EBA +1EBC 1EBD 1EBC +1EBD 1EBD 1EBC +1EBE 1EBF 1EBE +1EBF 1EBF 1EBE +1EC0 1EC1 1EC0 +1EC1 1EC1 1EC0 +1EC2 1EC3 1EC2 +1EC3 1EC3 1EC2 +1EC4 1EC5 1EC4 +1EC5 1EC5 1EC4 +1EC6 1EC7 1EC6 +1EC7 1EC7 1EC6 +1EC8 1EC9 1EC8 +1EC9 1EC9 1EC8 +1ECA 1ECB 1ECA +1ECB 1ECB 1ECA +1ECC 1ECD 1ECC +1ECD 1ECD 1ECC +1ECE 1ECF 1ECE +1ECF 1ECF 1ECE +1ED0 1ED1 1ED0 +1ED1 1ED1 1ED0 +1ED2 1ED3 1ED2 +1ED3 1ED3 1ED2 +1ED4 1ED5 1ED4 +1ED5 1ED5 1ED4 +1ED6 1ED7 1ED6 +1ED7 1ED7 1ED6 +1ED8 1ED9 1ED8 +1ED9 1ED9 1ED8 +1EDA 1EDB 1EDA +1EDB 1EDB 1EDA +1EDC 1EDD 1EDC +1EDD 1EDD 1EDC +1EDE 1EDF 1EDE +1EDF 1EDF 1EDE +1EE0 1EE1 1EE0 +1EE1 1EE1 1EE0 +1EE2 1EE3 1EE2 +1EE3 1EE3 1EE2 +1EE4 1EE5 1EE4 +1EE5 1EE5 1EE4 +1EE6 1EE7 1EE6 +1EE7 1EE7 1EE6 +1EE8 1EE9 1EE8 +1EE9 1EE9 1EE8 +1EEA 1EEB 1EEA +1EEB 1EEB 1EEA +1EEC 1EED 1EEC +1EED 1EED 1EEC +1EEE 1EEF 1EEE +1EEF 1EEF 1EEE +1EF0 1EF1 1EF0 +1EF1 1EF1 1EF0 +1EF2 1EF3 1EF2 +1EF3 1EF3 1EF2 +1EF4 1EF5 1EF4 +1EF5 1EF5 1EF4 +1EF6 1EF7 1EF6 +1EF7 1EF7 1EF6 +1EF8 1EF9 1EF8 +1EF9 1EF9 1EF8 +1EFA 1EFB 1EFA +1EFB 1EFB 1EFA +1EFC 1EFD 1EFC +1EFD 1EFD 1EFC +1EFE 1EFF 1EFE +1EFF 1EFF 1EFE +1F00 1F00 1F08 +1F01 1F01 1F09 +1F02 1F02 1F0A +1F03 1F03 1F0B +1F04 1F04 1F0C +1F05 1F05 1F0D +1F06 1F06 1F0E +1F07 1F07 1F0F +1F08 1F00 1F08 +1F09 1F01 1F09 +1F0A 1F02 1F0A +1F0B 1F03 1F0B +1F0C 1F04 1F0C +1F0D 1F05 1F0D +1F0E 1F06 1F0E +1F0F 1F07 1F0F +1F10 1F10 1F18 +1F11 1F11 1F19 +1F12 1F12 1F1A +1F13 1F13 1F1B +1F14 1F14 1F1C +1F15 1F15 1F1D +1F18 1F10 1F18 +1F19 1F11 1F19 +1F1A 1F12 1F1A +1F1B 1F13 1F1B +1F1C 1F14 1F1C +1F1D 1F15 1F1D +1F20 1F20 1F28 +1F21 1F21 1F29 +1F22 1F22 1F2A +1F23 1F23 1F2B +1F24 1F24 1F2C +1F25 1F25 1F2D +1F26 1F26 1F2E +1F27 1F27 1F2F +1F28 1F20 1F28 +1F29 1F21 1F29 +1F2A 1F22 1F2A +1F2B 1F23 1F2B +1F2C 1F24 1F2C +1F2D 1F25 1F2D +1F2E 1F26 1F2E +1F2F 1F27 1F2F +1F30 1F30 1F38 +1F31 1F31 1F39 +1F32 1F32 1F3A +1F33 1F33 1F3B +1F34 1F34 1F3C +1F35 1F35 1F3D +1F36 1F36 1F3E +1F37 1F37 1F3F +1F38 1F30 1F38 +1F39 1F31 1F39 +1F3A 1F32 1F3A +1F3B 1F33 1F3B +1F3C 1F34 1F3C +1F3D 1F35 1F3D +1F3E 1F36 1F3E +1F3F 1F37 1F3F +1F40 1F40 1F48 +1F41 1F41 1F49 +1F42 1F42 1F4A +1F43 1F43 1F4B +1F44 1F44 1F4C +1F45 1F45 1F4D +1F48 1F40 1F48 +1F49 1F41 1F49 +1F4A 1F42 1F4A +1F4B 1F43 1F4B +1F4C 1F44 1F4C +1F4D 1F45 1F4D +1F51 1F51 1F59 +1F53 1F53 1F5B +1F55 1F55 1F5D +1F57 1F57 1F5F +1F59 1F51 1F59 +1F5B 1F53 1F5B +1F5D 1F55 1F5D +1F5F 1F57 1F5F +1F60 1F60 1F68 +1F61 1F61 1F69 +1F62 1F62 1F6A +1F63 1F63 1F6B +1F64 1F64 1F6C +1F65 1F65 1F6D +1F66 1F66 1F6E +1F67 1F67 1F6F +1F68 1F60 1F68 +1F69 1F61 1F69 +1F6A 1F62 1F6A +1F6B 1F63 1F6B +1F6C 1F64 1F6C +1F6D 1F65 1F6D +1F6E 1F66 1F6E +1F6F 1F67 1F6F +1F70 1F70 1FBA +1F71 1F71 1FBB +1F72 1F72 1FC8 +1F73 1F73 1FC9 +1F74 1F74 1FCA +1F75 1F75 1FCB +1F76 1F76 1FDA +1F77 1F77 1FDB +1F78 1F78 1FF8 +1F79 1F79 1FF9 +1F7A 1F7A 1FEA +1F7B 1F7B 1FEB +1F7C 1F7C 1FFA +1F7D 1F7D 1FFB +1F80 1F80 1F88 +1F81 1F81 1F89 +1F82 1F82 1F8A +1F83 1F83 1F8B +1F84 1F84 1F8C +1F85 1F85 1F8D +1F86 1F86 1F8E +1F87 1F87 1F8F +1F88 1F80 1F88 +1F89 1F81 1F89 +1F8A 1F82 1F8A +1F8B 1F83 1F8B +1F8C 1F84 1F8C +1F8D 1F85 1F8D +1F8E 1F86 1F8E +1F8F 1F87 1F8F +1F90 1F90 1F98 +1F91 1F91 1F99 +1F92 1F92 1F9A +1F93 1F93 1F9B +1F94 1F94 1F9C +1F95 1F95 1F9D +1F96 1F96 1F9E +1F97 1F97 1F9F +1F98 1F90 1F98 +1F99 1F91 1F99 +1F9A 1F92 1F9A +1F9B 1F93 1F9B +1F9C 1F94 1F9C +1F9D 1F95 1F9D +1F9E 1F96 1F9E +1F9F 1F97 1F9F +1FA0 1FA0 1FA8 +1FA1 1FA1 1FA9 +1FA2 1FA2 1FAA +1FA3 1FA3 1FAB +1FA4 1FA4 1FAC +1FA5 1FA5 1FAD +1FA6 1FA6 1FAE +1FA7 1FA7 1FAF +1FA8 1FA0 1FA8 +1FA9 1FA1 1FA9 +1FAA 1FA2 1FAA +1FAB 1FA3 1FAB +1FAC 1FA4 1FAC +1FAD 1FA5 1FAD +1FAE 1FA6 1FAE +1FAF 1FA7 1FAF +1FB0 1FB0 1FB8 +1FB1 1FB1 1FB9 +1FB3 1FB3 1FBC +1FB8 1FB0 1FB8 +1FB9 1FB1 1FB9 +1FBA 1F70 1FBA +1FBB 1F71 1FBB +1FBC 1FB3 1FBC +1FBE 1FBE 0399 +1FC3 1FC3 1FCC +1FC8 1F72 1FC8 +1FC9 1F73 1FC9 +1FCA 1F74 1FCA +1FCB 1F75 1FCB +1FCC 1FC3 1FCC +1FD0 1FD0 1FD8 +1FD1 1FD1 1FD9 +1FD8 1FD0 1FD8 +1FD9 1FD1 1FD9 +1FDA 1F76 1FDA +1FDB 1F77 1FDB +1FE0 1FE0 1FE8 +1FE1 1FE1 1FE9 +1FE5 1FE5 1FEC +1FE8 1FE0 1FE8 +1FE9 1FE1 1FE9 +1FEA 1F7A 1FEA +1FEB 1F7B 1FEB +1FEC 1FE5 1FEC +1FF3 1FF3 1FFC +1FF8 1F78 1FF8 +1FF9 1F79 1FF9 +1FFA 1F7C 1FFA +1FFB 1F7D 1FFB +1FFC 1FF3 1FFC +2126 03C9 2126 +212A 006B 212A +212B 00E5 212B +2132 214E 2132 +214E 214E 2132 +2160 2170 2160 +2161 2171 2161 +2162 2172 2162 +2163 2173 2163 +2164 2174 2164 +2165 2175 2165 +2166 2176 2166 +2167 2177 2167 +2168 2178 2168 +2169 2179 2169 +216A 217A 216A +216B 217B 216B +216C 217C 216C +216D 217D 216D +216E 217E 216E +216F 217F 216F +2170 2170 2160 +2171 2171 2161 +2172 2172 2162 +2173 2173 2163 +2174 2174 2164 +2175 2175 2165 +2176 2176 2166 +2177 2177 2167 +2178 2178 2168 +2179 2179 2169 +217A 217A 216A +217B 217B 216B +217C 217C 216C +217D 217D 216D +217E 217E 216E +217F 217F 216F +2183 2184 2183 +2184 2184 2183 +24B6 24D0 24B6 +24B7 24D1 24B7 +24B8 24D2 24B8 +24B9 24D3 24B9 +24BA 24D4 24BA +24BB 24D5 24BB +24BC 24D6 24BC +24BD 24D7 24BD +24BE 24D8 24BE +24BF 24D9 24BF +24C0 24DA 24C0 +24C1 24DB 24C1 +24C2 24DC 24C2 +24C3 24DD 24C3 +24C4 24DE 24C4 +24C5 24DF 24C5 +24C6 24E0 24C6 +24C7 24E1 24C7 +24C8 24E2 24C8 +24C9 24E3 24C9 +24CA 24E4 24CA +24CB 24E5 24CB +24CC 24E6 24CC +24CD 24E7 24CD +24CE 24E8 24CE +24CF 24E9 24CF +24D0 24D0 24B6 +24D1 24D1 24B7 +24D2 24D2 24B8 +24D3 24D3 24B9 +24D4 24D4 24BA +24D5 24D5 24BB +24D6 24D6 24BC +24D7 24D7 24BD +24D8 24D8 24BE +24D9 24D9 24BF +24DA 24DA 24C0 +24DB 24DB 24C1 +24DC 24DC 24C2 +24DD 24DD 24C3 +24DE 24DE 24C4 +24DF 24DF 24C5 +24E0 24E0 24C6 +24E1 24E1 24C7 +24E2 24E2 24C8 +24E3 24E3 24C9 +24E4 24E4 24CA +24E5 24E5 24CB +24E6 24E6 24CC +24E7 24E7 24CD +24E8 24E8 24CE +24E9 24E9 24CF +2C00 2C30 2C00 +2C01 2C31 2C01 +2C02 2C32 2C02 +2C03 2C33 2C03 +2C04 2C34 2C04 +2C05 2C35 2C05 +2C06 2C36 2C06 +2C07 2C37 2C07 +2C08 2C38 2C08 +2C09 2C39 2C09 +2C0A 2C3A 2C0A +2C0B 2C3B 2C0B +2C0C 2C3C 2C0C +2C0D 2C3D 2C0D +2C0E 2C3E 2C0E +2C0F 2C3F 2C0F +2C10 2C40 2C10 +2C11 2C41 2C11 +2C12 2C42 2C12 +2C13 2C43 2C13 +2C14 2C44 2C14 +2C15 2C45 2C15 +2C16 2C46 2C16 +2C17 2C47 2C17 +2C18 2C48 2C18 +2C19 2C49 2C19 +2C1A 2C4A 2C1A +2C1B 2C4B 2C1B +2C1C 2C4C 2C1C +2C1D 2C4D 2C1D +2C1E 2C4E 2C1E +2C1F 2C4F 2C1F +2C20 2C50 2C20 +2C21 2C51 2C21 +2C22 2C52 2C22 +2C23 2C53 2C23 +2C24 2C54 2C24 +2C25 2C55 2C25 +2C26 2C56 2C26 +2C27 2C57 2C27 +2C28 2C58 2C28 +2C29 2C59 2C29 +2C2A 2C5A 2C2A +2C2B 2C5B 2C2B +2C2C 2C5C 2C2C +2C2D 2C5D 2C2D +2C2E 2C5E 2C2E +2C2F 2C5F 2C2F +2C30 2C30 2C00 +2C31 2C31 2C01 +2C32 2C32 2C02 +2C33 2C33 2C03 +2C34 2C34 2C04 +2C35 2C35 2C05 +2C36 2C36 2C06 +2C37 2C37 2C07 +2C38 2C38 2C08 +2C39 2C39 2C09 +2C3A 2C3A 2C0A +2C3B 2C3B 2C0B +2C3C 2C3C 2C0C +2C3D 2C3D 2C0D +2C3E 2C3E 2C0E +2C3F 2C3F 2C0F +2C40 2C40 2C10 +2C41 2C41 2C11 +2C42 2C42 2C12 +2C43 2C43 2C13 +2C44 2C44 2C14 +2C45 2C45 2C15 +2C46 2C46 2C16 +2C47 2C47 2C17 +2C48 2C48 2C18 +2C49 2C49 2C19 +2C4A 2C4A 2C1A +2C4B 2C4B 2C1B +2C4C 2C4C 2C1C +2C4D 2C4D 2C1D +2C4E 2C4E 2C1E +2C4F 2C4F 2C1F +2C50 2C50 2C20 +2C51 2C51 2C21 +2C52 2C52 2C22 +2C53 2C53 2C23 +2C54 2C54 2C24 +2C55 2C55 2C25 +2C56 2C56 2C26 +2C57 2C57 2C27 +2C58 2C58 2C28 +2C59 2C59 2C29 +2C5A 2C5A 2C2A +2C5B 2C5B 2C2B +2C5C 2C5C 2C2C +2C5D 2C5D 2C2D +2C5E 2C5E 2C2E +2C5F 2C5F 2C2F +2C60 2C61 2C60 +2C61 2C61 2C60 +2C62 026B 2C62 +2C63 1D7D 2C63 +2C64 027D 2C64 +2C65 2C65 023A +2C66 2C66 023E +2C67 2C68 2C67 +2C68 2C68 2C67 +2C69 2C6A 2C69 +2C6A 2C6A 2C69 +2C6B 2C6C 2C6B +2C6C 2C6C 2C6B +2C6D 0251 2C6D +2C6E 0271 2C6E +2C6F 0250 2C6F +2C70 0252 2C70 +2C72 2C73 2C72 +2C73 2C73 2C72 +2C75 2C76 2C75 +2C76 2C76 2C75 +2C7E 023F 2C7E +2C7F 0240 2C7F +2C80 2C81 2C80 +2C81 2C81 2C80 +2C82 2C83 2C82 +2C83 2C83 2C82 +2C84 2C85 2C84 +2C85 2C85 2C84 +2C86 2C87 2C86 +2C87 2C87 2C86 +2C88 2C89 2C88 +2C89 2C89 2C88 +2C8A 2C8B 2C8A +2C8B 2C8B 2C8A +2C8C 2C8D 2C8C +2C8D 2C8D 2C8C +2C8E 2C8F 2C8E +2C8F 2C8F 2C8E +2C90 2C91 2C90 +2C91 2C91 2C90 +2C92 2C93 2C92 +2C93 2C93 2C92 +2C94 2C95 2C94 +2C95 2C95 2C94 +2C96 2C97 2C96 +2C97 2C97 2C96 +2C98 2C99 2C98 +2C99 2C99 2C98 +2C9A 2C9B 2C9A +2C9B 2C9B 2C9A +2C9C 2C9D 2C9C +2C9D 2C9D 2C9C +2C9E 2C9F 2C9E +2C9F 2C9F 2C9E +2CA0 2CA1 2CA0 +2CA1 2CA1 2CA0 +2CA2 2CA3 2CA2 +2CA3 2CA3 2CA2 +2CA4 2CA5 2CA4 +2CA5 2CA5 2CA4 +2CA6 2CA7 2CA6 +2CA7 2CA7 2CA6 +2CA8 2CA9 2CA8 +2CA9 2CA9 2CA8 +2CAA 2CAB 2CAA +2CAB 2CAB 2CAA +2CAC 2CAD 2CAC +2CAD 2CAD 2CAC +2CAE 2CAF 2CAE +2CAF 2CAF 2CAE +2CB0 2CB1 2CB0 +2CB1 2CB1 2CB0 +2CB2 2CB3 2CB2 +2CB3 2CB3 2CB2 +2CB4 2CB5 2CB4 +2CB5 2CB5 2CB4 +2CB6 2CB7 2CB6 +2CB7 2CB7 2CB6 +2CB8 2CB9 2CB8 +2CB9 2CB9 2CB8 +2CBA 2CBB 2CBA +2CBB 2CBB 2CBA +2CBC 2CBD 2CBC +2CBD 2CBD 2CBC +2CBE 2CBF 2CBE +2CBF 2CBF 2CBE +2CC0 2CC1 2CC0 +2CC1 2CC1 2CC0 +2CC2 2CC3 2CC2 +2CC3 2CC3 2CC2 +2CC4 2CC5 2CC4 +2CC5 2CC5 2CC4 +2CC6 2CC7 2CC6 +2CC7 2CC7 2CC6 +2CC8 2CC9 2CC8 +2CC9 2CC9 2CC8 +2CCA 2CCB 2CCA +2CCB 2CCB 2CCA +2CCC 2CCD 2CCC +2CCD 2CCD 2CCC +2CCE 2CCF 2CCE +2CCF 2CCF 2CCE +2CD0 2CD1 2CD0 +2CD1 2CD1 2CD0 +2CD2 2CD3 2CD2 +2CD3 2CD3 2CD2 +2CD4 2CD5 2CD4 +2CD5 2CD5 2CD4 +2CD6 2CD7 2CD6 +2CD7 2CD7 2CD6 +2CD8 2CD9 2CD8 +2CD9 2CD9 2CD8 +2CDA 2CDB 2CDA +2CDB 2CDB 2CDA +2CDC 2CDD 2CDC +2CDD 2CDD 2CDC +2CDE 2CDF 2CDE +2CDF 2CDF 2CDE +2CE0 2CE1 2CE0 +2CE1 2CE1 2CE0 +2CE2 2CE3 2CE2 +2CE3 2CE3 2CE2 +2CEB 2CEC 2CEB +2CEC 2CEC 2CEB +2CED 2CEE 2CED +2CEE 2CEE 2CED +2CF2 2CF3 2CF2 +2CF3 2CF3 2CF2 +2D00 2D00 10A0 +2D01 2D01 10A1 +2D02 2D02 10A2 +2D03 2D03 10A3 +2D04 2D04 10A4 +2D05 2D05 10A5 +2D06 2D06 10A6 +2D07 2D07 10A7 +2D08 2D08 10A8 +2D09 2D09 10A9 +2D0A 2D0A 10AA +2D0B 2D0B 10AB +2D0C 2D0C 10AC +2D0D 2D0D 10AD +2D0E 2D0E 10AE +2D0F 2D0F 10AF +2D10 2D10 10B0 +2D11 2D11 10B1 +2D12 2D12 10B2 +2D13 2D13 10B3 +2D14 2D14 10B4 +2D15 2D15 10B5 +2D16 2D16 10B6 +2D17 2D17 10B7 +2D18 2D18 10B8 +2D19 2D19 10B9 +2D1A 2D1A 10BA +2D1B 2D1B 10BB +2D1C 2D1C 10BC +2D1D 2D1D 10BD +2D1E 2D1E 10BE +2D1F 2D1F 10BF +2D20 2D20 10C0 +2D21 2D21 10C1 +2D22 2D22 10C2 +2D23 2D23 10C3 +2D24 2D24 10C4 +2D25 2D25 10C5 +2D27 2D27 10C7 +2D2D 2D2D 10CD +A640 A641 A640 +A641 A641 A640 +A642 A643 A642 +A643 A643 A642 +A644 A645 A644 +A645 A645 A644 +A646 A647 A646 +A647 A647 A646 +A648 A649 A648 +A649 A649 A648 +A64A A64B A64A +A64B A64B A64A +A64C A64D A64C +A64D A64D A64C +A64E A64F A64E +A64F A64F A64E +A650 A651 A650 +A651 A651 A650 +A652 A653 A652 +A653 A653 A652 +A654 A655 A654 +A655 A655 A654 +A656 A657 A656 +A657 A657 A656 +A658 A659 A658 +A659 A659 A658 +A65A A65B A65A +A65B A65B A65A +A65C A65D A65C +A65D A65D A65C +A65E A65F A65E +A65F A65F A65E +A660 A661 A660 +A661 A661 A660 +A662 A663 A662 +A663 A663 A662 +A664 A665 A664 +A665 A665 A664 +A666 A667 A666 +A667 A667 A666 +A668 A669 A668 +A669 A669 A668 +A66A A66B A66A +A66B A66B A66A +A66C A66D A66C +A66D A66D A66C +A680 A681 A680 +A681 A681 A680 +A682 A683 A682 +A683 A683 A682 +A684 A685 A684 +A685 A685 A684 +A686 A687 A686 +A687 A687 A686 +A688 A689 A688 +A689 A689 A688 +A68A A68B A68A +A68B A68B A68A +A68C A68D A68C +A68D A68D A68C +A68E A68F A68E +A68F A68F A68E +A690 A691 A690 +A691 A691 A690 +A692 A693 A692 +A693 A693 A692 +A694 A695 A694 +A695 A695 A694 +A696 A697 A696 +A697 A697 A696 +A698 A699 A698 +A699 A699 A698 +A69A A69B A69A +A69B A69B A69A +A722 A723 A722 +A723 A723 A722 +A724 A725 A724 +A725 A725 A724 +A726 A727 A726 +A727 A727 A726 +A728 A729 A728 +A729 A729 A728 +A72A A72B A72A +A72B A72B A72A +A72C A72D A72C +A72D A72D A72C +A72E A72F A72E +A72F A72F A72E +A732 A733 A732 +A733 A733 A732 +A734 A735 A734 +A735 A735 A734 +A736 A737 A736 +A737 A737 A736 +A738 A739 A738 +A739 A739 A738 +A73A A73B A73A +A73B A73B A73A +A73C A73D A73C +A73D A73D A73C +A73E A73F A73E +A73F A73F A73E +A740 A741 A740 +A741 A741 A740 +A742 A743 A742 +A743 A743 A742 +A744 A745 A744 +A745 A745 A744 +A746 A747 A746 +A747 A747 A746 +A748 A749 A748 +A749 A749 A748 +A74A A74B A74A +A74B A74B A74A +A74C A74D A74C +A74D A74D A74C +A74E A74F A74E +A74F A74F A74E +A750 A751 A750 +A751 A751 A750 +A752 A753 A752 +A753 A753 A752 +A754 A755 A754 +A755 A755 A754 +A756 A757 A756 +A757 A757 A756 +A758 A759 A758 +A759 A759 A758 +A75A A75B A75A +A75B A75B A75A +A75C A75D A75C +A75D A75D A75C +A75E A75F A75E +A75F A75F A75E +A760 A761 A760 +A761 A761 A760 +A762 A763 A762 +A763 A763 A762 +A764 A765 A764 +A765 A765 A764 +A766 A767 A766 +A767 A767 A766 +A768 A769 A768 +A769 A769 A768 +A76A A76B A76A +A76B A76B A76A +A76C A76D A76C +A76D A76D A76C +A76E A76F A76E +A76F A76F A76E +A779 A77A A779 +A77A A77A A779 +A77B A77C A77B +A77C A77C A77B +A77D 1D79 A77D +A77E A77F A77E +A77F A77F A77E +A780 A781 A780 +A781 A781 A780 +A782 A783 A782 +A783 A783 A782 +A784 A785 A784 +A785 A785 A784 +A786 A787 A786 +A787 A787 A786 +A78B A78C A78B +A78C A78C A78B +A78D 0265 A78D +A790 A791 A790 +A791 A791 A790 +A792 A793 A792 +A793 A793 A792 +A794 A794 A7C4 +A796 A797 A796 +A797 A797 A796 +A798 A799 A798 +A799 A799 A798 +A79A A79B A79A +A79B A79B A79A +A79C A79D A79C +A79D A79D A79C +A79E A79F A79E +A79F A79F A79E +A7A0 A7A1 A7A0 +A7A1 A7A1 A7A0 +A7A2 A7A3 A7A2 +A7A3 A7A3 A7A2 +A7A4 A7A5 A7A4 +A7A5 A7A5 A7A4 +A7A6 A7A7 A7A6 +A7A7 A7A7 A7A6 +A7A8 A7A9 A7A8 +A7A9 A7A9 A7A8 +A7AA 0266 A7AA +A7AB 025C A7AB +A7AC 0261 A7AC +A7AD 026C A7AD +A7AE 026A A7AE +A7B0 029E A7B0 +A7B1 0287 A7B1 +A7B2 029D A7B2 +A7B3 AB53 A7B3 +A7B4 A7B5 A7B4 +A7B5 A7B5 A7B4 +A7B6 A7B7 A7B6 +A7B7 A7B7 A7B6 +A7B8 A7B9 A7B8 +A7B9 A7B9 A7B8 +A7BA A7BB A7BA +A7BB A7BB A7BA +A7BC A7BD A7BC +A7BD A7BD A7BC +A7BE A7BF A7BE +A7BF A7BF A7BE +A7C0 A7C1 A7C0 +A7C1 A7C1 A7C0 +A7C2 A7C3 A7C2 +A7C3 A7C3 A7C2 +A7C4 A794 A7C4 +A7C5 0282 A7C5 +A7C6 1D8E A7C6 +A7C7 A7C8 A7C7 +A7C8 A7C8 A7C7 +A7C9 A7CA A7C9 +A7CA A7CA A7C9 +A7D0 A7D1 A7D0 +A7D1 A7D1 A7D0 +A7D6 A7D7 A7D6 +A7D7 A7D7 A7D6 +A7D8 A7D9 A7D8 +A7D9 A7D9 A7D8 +A7F5 A7F6 A7F5 +A7F6 A7F6 A7F5 +AB53 AB53 A7B3 +AB70 AB70 13A0 +AB71 AB71 13A1 +AB72 AB72 13A2 +AB73 AB73 13A3 +AB74 AB74 13A4 +AB75 AB75 13A5 +AB76 AB76 13A6 +AB77 AB77 13A7 +AB78 AB78 13A8 +AB79 AB79 13A9 +AB7A AB7A 13AA +AB7B AB7B 13AB +AB7C AB7C 13AC +AB7D AB7D 13AD +AB7E AB7E 13AE +AB7F AB7F 13AF +AB80 AB80 13B0 +AB81 AB81 13B1 +AB82 AB82 13B2 +AB83 AB83 13B3 +AB84 AB84 13B4 +AB85 AB85 13B5 +AB86 AB86 13B6 +AB87 AB87 13B7 +AB88 AB88 13B8 +AB89 AB89 13B9 +AB8A AB8A 13BA +AB8B AB8B 13BB +AB8C AB8C 13BC +AB8D AB8D 13BD +AB8E AB8E 13BE +AB8F AB8F 13BF +AB90 AB90 13C0 +AB91 AB91 13C1 +AB92 AB92 13C2 +AB93 AB93 13C3 +AB94 AB94 13C4 +AB95 AB95 13C5 +AB96 AB96 13C6 +AB97 AB97 13C7 +AB98 AB98 13C8 +AB99 AB99 13C9 +AB9A AB9A 13CA +AB9B AB9B 13CB +AB9C AB9C 13CC +AB9D AB9D 13CD +AB9E AB9E 13CE +AB9F AB9F 13CF +ABA0 ABA0 13D0 +ABA1 ABA1 13D1 +ABA2 ABA2 13D2 +ABA3 ABA3 13D3 +ABA4 ABA4 13D4 +ABA5 ABA5 13D5 +ABA6 ABA6 13D6 +ABA7 ABA7 13D7 +ABA8 ABA8 13D8 +ABA9 ABA9 13D9 +ABAA ABAA 13DA +ABAB ABAB 13DB +ABAC ABAC 13DC +ABAD ABAD 13DD +ABAE ABAE 13DE +ABAF ABAF 13DF +ABB0 ABB0 13E0 +ABB1 ABB1 13E1 +ABB2 ABB2 13E2 +ABB3 ABB3 13E3 +ABB4 ABB4 13E4 +ABB5 ABB5 13E5 +ABB6 ABB6 13E6 +ABB7 ABB7 13E7 +ABB8 ABB8 13E8 +ABB9 ABB9 13E9 +ABBA ABBA 13EA +ABBB ABBB 13EB +ABBC ABBC 13EC +ABBD ABBD 13ED +ABBE ABBE 13EE +ABBF ABBF 13EF +FF21 FF41 FF21 +FF22 FF42 FF22 +FF23 FF43 FF23 +FF24 FF44 FF24 +FF25 FF45 FF25 +FF26 FF46 FF26 +FF27 FF47 FF27 +FF28 FF48 FF28 +FF29 FF49 FF29 +FF2A FF4A FF2A +FF2B FF4B FF2B +FF2C FF4C FF2C +FF2D FF4D FF2D +FF2E FF4E FF2E +FF2F FF4F FF2F +FF30 FF50 FF30 +FF31 FF51 FF31 +FF32 FF52 FF32 +FF33 FF53 FF33 +FF34 FF54 FF34 +FF35 FF55 FF35 +FF36 FF56 FF36 +FF37 FF57 FF37 +FF38 FF58 FF38 +FF39 FF59 FF39 +FF3A FF5A FF3A +FF41 FF41 FF21 +FF42 FF42 FF22 +FF43 FF43 FF23 +FF44 FF44 FF24 +FF45 FF45 FF25 +FF46 FF46 FF26 +FF47 FF47 FF27 +FF48 FF48 FF28 +FF49 FF49 FF29 +FF4A FF4A FF2A +FF4B FF4B FF2B +FF4C FF4C FF2C +FF4D FF4D FF2D +FF4E FF4E FF2E +FF4F FF4F FF2F +FF50 FF50 FF30 +FF51 FF51 FF31 +FF52 FF52 FF32 +FF53 FF53 FF33 +FF54 FF54 FF34 +FF55 FF55 FF35 +FF56 FF56 FF36 +FF57 FF57 FF37 +FF58 FF58 FF38 +FF59 FF59 FF39 +FF5A FF5A FF3A +DROP VIEW v_bmp; +EXECUTE IMMEDIATE SFORMAT(' +CREATE VIEW v_supplementary AS +SELECT + seq AS codepoint, + LPAD(HEX(seq),8,''0'') AS codepoint_hex8, + CONVERT(CHAR(seq USING utf32) USING {}) COLLATE {} AS c +FROM + seq_65536_to_1114111', @@character_set_connection, @@collation_connection); +SELECT COLLATION(c) FROM v_supplementary LIMIT 1; +COLLATION(c) +utf8mb4_uca1400_ai_ci +SELECT +codepoint_hex8, +HEX(CAST(LOWER(c) AS CHAR CHARACTER SET utf32)), +HEX(CAST(UPPER(c) AS CHAR CHARACTER SET utf32)) +FROM v_supplementary +WHERE BINARY(c)<>BINARY(LOWER(c)) OR BINARY(c)<>BINARY(UPPER(c)); +codepoint_hex8 HEX(CAST(LOWER(c) AS CHAR CHARACTER SET utf32)) HEX(CAST(UPPER(c) AS CHAR CHARACTER SET utf32)) +00010400 00010428 00010400 +00010401 00010429 00010401 +00010402 0001042A 00010402 +00010403 0001042B 00010403 +00010404 0001042C 00010404 +00010405 0001042D 00010405 +00010406 0001042E 00010406 +00010407 0001042F 00010407 +00010408 00010430 00010408 +00010409 00010431 00010409 +0001040A 00010432 0001040A +0001040B 00010433 0001040B +0001040C 00010434 0001040C +0001040D 00010435 0001040D +0001040E 00010436 0001040E +0001040F 00010437 0001040F +00010410 00010438 00010410 +00010411 00010439 00010411 +00010412 0001043A 00010412 +00010413 0001043B 00010413 +00010414 0001043C 00010414 +00010415 0001043D 00010415 +00010416 0001043E 00010416 +00010417 0001043F 00010417 +00010418 00010440 00010418 +00010419 00010441 00010419 +0001041A 00010442 0001041A +0001041B 00010443 0001041B +0001041C 00010444 0001041C +0001041D 00010445 0001041D +0001041E 00010446 0001041E +0001041F 00010447 0001041F +00010420 00010448 00010420 +00010421 00010449 00010421 +00010422 0001044A 00010422 +00010423 0001044B 00010423 +00010424 0001044C 00010424 +00010425 0001044D 00010425 +00010426 0001044E 00010426 +00010427 0001044F 00010427 +00010428 00010428 00010400 +00010429 00010429 00010401 +0001042A 0001042A 00010402 +0001042B 0001042B 00010403 +0001042C 0001042C 00010404 +0001042D 0001042D 00010405 +0001042E 0001042E 00010406 +0001042F 0001042F 00010407 +00010430 00010430 00010408 +00010431 00010431 00010409 +00010432 00010432 0001040A +00010433 00010433 0001040B +00010434 00010434 0001040C +00010435 00010435 0001040D +00010436 00010436 0001040E +00010437 00010437 0001040F +00010438 00010438 00010410 +00010439 00010439 00010411 +0001043A 0001043A 00010412 +0001043B 0001043B 00010413 +0001043C 0001043C 00010414 +0001043D 0001043D 00010415 +0001043E 0001043E 00010416 +0001043F 0001043F 00010417 +00010440 00010440 00010418 +00010441 00010441 00010419 +00010442 00010442 0001041A +00010443 00010443 0001041B +00010444 00010444 0001041C +00010445 00010445 0001041D +00010446 00010446 0001041E +00010447 00010447 0001041F +00010448 00010448 00010420 +00010449 00010449 00010421 +0001044A 0001044A 00010422 +0001044B 0001044B 00010423 +0001044C 0001044C 00010424 +0001044D 0001044D 00010425 +0001044E 0001044E 00010426 +0001044F 0001044F 00010427 +000104B0 000104D8 000104B0 +000104B1 000104D9 000104B1 +000104B2 000104DA 000104B2 +000104B3 000104DB 000104B3 +000104B4 000104DC 000104B4 +000104B5 000104DD 000104B5 +000104B6 000104DE 000104B6 +000104B7 000104DF 000104B7 +000104B8 000104E0 000104B8 +000104B9 000104E1 000104B9 +000104BA 000104E2 000104BA +000104BB 000104E3 000104BB +000104BC 000104E4 000104BC +000104BD 000104E5 000104BD +000104BE 000104E6 000104BE +000104BF 000104E7 000104BF +000104C0 000104E8 000104C0 +000104C1 000104E9 000104C1 +000104C2 000104EA 000104C2 +000104C3 000104EB 000104C3 +000104C4 000104EC 000104C4 +000104C5 000104ED 000104C5 +000104C6 000104EE 000104C6 +000104C7 000104EF 000104C7 +000104C8 000104F0 000104C8 +000104C9 000104F1 000104C9 +000104CA 000104F2 000104CA +000104CB 000104F3 000104CB +000104CC 000104F4 000104CC +000104CD 000104F5 000104CD +000104CE 000104F6 000104CE +000104CF 000104F7 000104CF +000104D0 000104F8 000104D0 +000104D1 000104F9 000104D1 +000104D2 000104FA 000104D2 +000104D3 000104FB 000104D3 +000104D8 000104D8 000104B0 +000104D9 000104D9 000104B1 +000104DA 000104DA 000104B2 +000104DB 000104DB 000104B3 +000104DC 000104DC 000104B4 +000104DD 000104DD 000104B5 +000104DE 000104DE 000104B6 +000104DF 000104DF 000104B7 +000104E0 000104E0 000104B8 +000104E1 000104E1 000104B9 +000104E2 000104E2 000104BA +000104E3 000104E3 000104BB +000104E4 000104E4 000104BC +000104E5 000104E5 000104BD +000104E6 000104E6 000104BE +000104E7 000104E7 000104BF +000104E8 000104E8 000104C0 +000104E9 000104E9 000104C1 +000104EA 000104EA 000104C2 +000104EB 000104EB 000104C3 +000104EC 000104EC 000104C4 +000104ED 000104ED 000104C5 +000104EE 000104EE 000104C6 +000104EF 000104EF 000104C7 +000104F0 000104F0 000104C8 +000104F1 000104F1 000104C9 +000104F2 000104F2 000104CA +000104F3 000104F3 000104CB +000104F4 000104F4 000104CC +000104F5 000104F5 000104CD +000104F6 000104F6 000104CE +000104F7 000104F7 000104CF +000104F8 000104F8 000104D0 +000104F9 000104F9 000104D1 +000104FA 000104FA 000104D2 +000104FB 000104FB 000104D3 +00010570 00010597 00010570 +00010571 00010598 00010571 +00010572 00010599 00010572 +00010573 0001059A 00010573 +00010574 0001059B 00010574 +00010575 0001059C 00010575 +00010576 0001059D 00010576 +00010577 0001059E 00010577 +00010578 0001059F 00010578 +00010579 000105A0 00010579 +0001057A 000105A1 0001057A +0001057C 000105A3 0001057C +0001057D 000105A4 0001057D +0001057E 000105A5 0001057E +0001057F 000105A6 0001057F +00010580 000105A7 00010580 +00010581 000105A8 00010581 +00010582 000105A9 00010582 +00010583 000105AA 00010583 +00010584 000105AB 00010584 +00010585 000105AC 00010585 +00010586 000105AD 00010586 +00010587 000105AE 00010587 +00010588 000105AF 00010588 +00010589 000105B0 00010589 +0001058A 000105B1 0001058A +0001058C 000105B3 0001058C +0001058D 000105B4 0001058D +0001058E 000105B5 0001058E +0001058F 000105B6 0001058F +00010590 000105B7 00010590 +00010591 000105B8 00010591 +00010592 000105B9 00010592 +00010594 000105BB 00010594 +00010595 000105BC 00010595 +00010597 00010597 00010570 +00010598 00010598 00010571 +00010599 00010599 00010572 +0001059A 0001059A 00010573 +0001059B 0001059B 00010574 +0001059C 0001059C 00010575 +0001059D 0001059D 00010576 +0001059E 0001059E 00010577 +0001059F 0001059F 00010578 +000105A0 000105A0 00010579 +000105A1 000105A1 0001057A +000105A3 000105A3 0001057C +000105A4 000105A4 0001057D +000105A5 000105A5 0001057E +000105A6 000105A6 0001057F +000105A7 000105A7 00010580 +000105A8 000105A8 00010581 +000105A9 000105A9 00010582 +000105AA 000105AA 00010583 +000105AB 000105AB 00010584 +000105AC 000105AC 00010585 +000105AD 000105AD 00010586 +000105AE 000105AE 00010587 +000105AF 000105AF 00010588 +000105B0 000105B0 00010589 +000105B1 000105B1 0001058A +000105B3 000105B3 0001058C +000105B4 000105B4 0001058D +000105B5 000105B5 0001058E +000105B6 000105B6 0001058F +000105B7 000105B7 00010590 +000105B8 000105B8 00010591 +000105B9 000105B9 00010592 +000105BB 000105BB 00010594 +000105BC 000105BC 00010595 +00010C80 00010CC0 00010C80 +00010C81 00010CC1 00010C81 +00010C82 00010CC2 00010C82 +00010C83 00010CC3 00010C83 +00010C84 00010CC4 00010C84 +00010C85 00010CC5 00010C85 +00010C86 00010CC6 00010C86 +00010C87 00010CC7 00010C87 +00010C88 00010CC8 00010C88 +00010C89 00010CC9 00010C89 +00010C8A 00010CCA 00010C8A +00010C8B 00010CCB 00010C8B +00010C8C 00010CCC 00010C8C +00010C8D 00010CCD 00010C8D +00010C8E 00010CCE 00010C8E +00010C8F 00010CCF 00010C8F +00010C90 00010CD0 00010C90 +00010C91 00010CD1 00010C91 +00010C92 00010CD2 00010C92 +00010C93 00010CD3 00010C93 +00010C94 00010CD4 00010C94 +00010C95 00010CD5 00010C95 +00010C96 00010CD6 00010C96 +00010C97 00010CD7 00010C97 +00010C98 00010CD8 00010C98 +00010C99 00010CD9 00010C99 +00010C9A 00010CDA 00010C9A +00010C9B 00010CDB 00010C9B +00010C9C 00010CDC 00010C9C +00010C9D 00010CDD 00010C9D +00010C9E 00010CDE 00010C9E +00010C9F 00010CDF 00010C9F +00010CA0 00010CE0 00010CA0 +00010CA1 00010CE1 00010CA1 +00010CA2 00010CE2 00010CA2 +00010CA3 00010CE3 00010CA3 +00010CA4 00010CE4 00010CA4 +00010CA5 00010CE5 00010CA5 +00010CA6 00010CE6 00010CA6 +00010CA7 00010CE7 00010CA7 +00010CA8 00010CE8 00010CA8 +00010CA9 00010CE9 00010CA9 +00010CAA 00010CEA 00010CAA +00010CAB 00010CEB 00010CAB +00010CAC 00010CEC 00010CAC +00010CAD 00010CED 00010CAD +00010CAE 00010CEE 00010CAE +00010CAF 00010CEF 00010CAF +00010CB0 00010CF0 00010CB0 +00010CB1 00010CF1 00010CB1 +00010CB2 00010CF2 00010CB2 +00010CC0 00010CC0 00010C80 +00010CC1 00010CC1 00010C81 +00010CC2 00010CC2 00010C82 +00010CC3 00010CC3 00010C83 +00010CC4 00010CC4 00010C84 +00010CC5 00010CC5 00010C85 +00010CC6 00010CC6 00010C86 +00010CC7 00010CC7 00010C87 +00010CC8 00010CC8 00010C88 +00010CC9 00010CC9 00010C89 +00010CCA 00010CCA 00010C8A +00010CCB 00010CCB 00010C8B +00010CCC 00010CCC 00010C8C +00010CCD 00010CCD 00010C8D +00010CCE 00010CCE 00010C8E +00010CCF 00010CCF 00010C8F +00010CD0 00010CD0 00010C90 +00010CD1 00010CD1 00010C91 +00010CD2 00010CD2 00010C92 +00010CD3 00010CD3 00010C93 +00010CD4 00010CD4 00010C94 +00010CD5 00010CD5 00010C95 +00010CD6 00010CD6 00010C96 +00010CD7 00010CD7 00010C97 +00010CD8 00010CD8 00010C98 +00010CD9 00010CD9 00010C99 +00010CDA 00010CDA 00010C9A +00010CDB 00010CDB 00010C9B +00010CDC 00010CDC 00010C9C +00010CDD 00010CDD 00010C9D +00010CDE 00010CDE 00010C9E +00010CDF 00010CDF 00010C9F +00010CE0 00010CE0 00010CA0 +00010CE1 00010CE1 00010CA1 +00010CE2 00010CE2 00010CA2 +00010CE3 00010CE3 00010CA3 +00010CE4 00010CE4 00010CA4 +00010CE5 00010CE5 00010CA5 +00010CE6 00010CE6 00010CA6 +00010CE7 00010CE7 00010CA7 +00010CE8 00010CE8 00010CA8 +00010CE9 00010CE9 00010CA9 +00010CEA 00010CEA 00010CAA +00010CEB 00010CEB 00010CAB +00010CEC 00010CEC 00010CAC +00010CED 00010CED 00010CAD +00010CEE 00010CEE 00010CAE +00010CEF 00010CEF 00010CAF +00010CF0 00010CF0 00010CB0 +00010CF1 00010CF1 00010CB1 +00010CF2 00010CF2 00010CB2 +000118A0 000118C0 000118A0 +000118A1 000118C1 000118A1 +000118A2 000118C2 000118A2 +000118A3 000118C3 000118A3 +000118A4 000118C4 000118A4 +000118A5 000118C5 000118A5 +000118A6 000118C6 000118A6 +000118A7 000118C7 000118A7 +000118A8 000118C8 000118A8 +000118A9 000118C9 000118A9 +000118AA 000118CA 000118AA +000118AB 000118CB 000118AB +000118AC 000118CC 000118AC +000118AD 000118CD 000118AD +000118AE 000118CE 000118AE +000118AF 000118CF 000118AF +000118B0 000118D0 000118B0 +000118B1 000118D1 000118B1 +000118B2 000118D2 000118B2 +000118B3 000118D3 000118B3 +000118B4 000118D4 000118B4 +000118B5 000118D5 000118B5 +000118B6 000118D6 000118B6 +000118B7 000118D7 000118B7 +000118B8 000118D8 000118B8 +000118B9 000118D9 000118B9 +000118BA 000118DA 000118BA +000118BB 000118DB 000118BB +000118BC 000118DC 000118BC +000118BD 000118DD 000118BD +000118BE 000118DE 000118BE +000118BF 000118DF 000118BF +000118C0 000118C0 000118A0 +000118C1 000118C1 000118A1 +000118C2 000118C2 000118A2 +000118C3 000118C3 000118A3 +000118C4 000118C4 000118A4 +000118C5 000118C5 000118A5 +000118C6 000118C6 000118A6 +000118C7 000118C7 000118A7 +000118C8 000118C8 000118A8 +000118C9 000118C9 000118A9 +000118CA 000118CA 000118AA +000118CB 000118CB 000118AB +000118CC 000118CC 000118AC +000118CD 000118CD 000118AD +000118CE 000118CE 000118AE +000118CF 000118CF 000118AF +000118D0 000118D0 000118B0 +000118D1 000118D1 000118B1 +000118D2 000118D2 000118B2 +000118D3 000118D3 000118B3 +000118D4 000118D4 000118B4 +000118D5 000118D5 000118B5 +000118D6 000118D6 000118B6 +000118D7 000118D7 000118B7 +000118D8 000118D8 000118B8 +000118D9 000118D9 000118B9 +000118DA 000118DA 000118BA +000118DB 000118DB 000118BB +000118DC 000118DC 000118BC +000118DD 000118DD 000118BD +000118DE 000118DE 000118BE +000118DF 000118DF 000118BF +00016E40 00016E60 00016E40 +00016E41 00016E61 00016E41 +00016E42 00016E62 00016E42 +00016E43 00016E63 00016E43 +00016E44 00016E64 00016E44 +00016E45 00016E65 00016E45 +00016E46 00016E66 00016E46 +00016E47 00016E67 00016E47 +00016E48 00016E68 00016E48 +00016E49 00016E69 00016E49 +00016E4A 00016E6A 00016E4A +00016E4B 00016E6B 00016E4B +00016E4C 00016E6C 00016E4C +00016E4D 00016E6D 00016E4D +00016E4E 00016E6E 00016E4E +00016E4F 00016E6F 00016E4F +00016E50 00016E70 00016E50 +00016E51 00016E71 00016E51 +00016E52 00016E72 00016E52 +00016E53 00016E73 00016E53 +00016E54 00016E74 00016E54 +00016E55 00016E75 00016E55 +00016E56 00016E76 00016E56 +00016E57 00016E77 00016E57 +00016E58 00016E78 00016E58 +00016E59 00016E79 00016E59 +00016E5A 00016E7A 00016E5A +00016E5B 00016E7B 00016E5B +00016E5C 00016E7C 00016E5C +00016E5D 00016E7D 00016E5D +00016E5E 00016E7E 00016E5E +00016E5F 00016E7F 00016E5F +00016E60 00016E60 00016E40 +00016E61 00016E61 00016E41 +00016E62 00016E62 00016E42 +00016E63 00016E63 00016E43 +00016E64 00016E64 00016E44 +00016E65 00016E65 00016E45 +00016E66 00016E66 00016E46 +00016E67 00016E67 00016E47 +00016E68 00016E68 00016E48 +00016E69 00016E69 00016E49 +00016E6A 00016E6A 00016E4A +00016E6B 00016E6B 00016E4B +00016E6C 00016E6C 00016E4C +00016E6D 00016E6D 00016E4D +00016E6E 00016E6E 00016E4E +00016E6F 00016E6F 00016E4F +00016E70 00016E70 00016E50 +00016E71 00016E71 00016E51 +00016E72 00016E72 00016E52 +00016E73 00016E73 00016E53 +00016E74 00016E74 00016E54 +00016E75 00016E75 00016E55 +00016E76 00016E76 00016E56 +00016E77 00016E77 00016E57 +00016E78 00016E78 00016E58 +00016E79 00016E79 00016E59 +00016E7A 00016E7A 00016E5A +00016E7B 00016E7B 00016E5B +00016E7C 00016E7C 00016E5C +00016E7D 00016E7D 00016E5D +00016E7E 00016E7E 00016E5E +00016E7F 00016E7F 00016E5F +0001E900 0001E922 0001E900 +0001E901 0001E923 0001E901 +0001E902 0001E924 0001E902 +0001E903 0001E925 0001E903 +0001E904 0001E926 0001E904 +0001E905 0001E927 0001E905 +0001E906 0001E928 0001E906 +0001E907 0001E929 0001E907 +0001E908 0001E92A 0001E908 +0001E909 0001E92B 0001E909 +0001E90A 0001E92C 0001E90A +0001E90B 0001E92D 0001E90B +0001E90C 0001E92E 0001E90C +0001E90D 0001E92F 0001E90D +0001E90E 0001E930 0001E90E +0001E90F 0001E931 0001E90F +0001E910 0001E932 0001E910 +0001E911 0001E933 0001E911 +0001E912 0001E934 0001E912 +0001E913 0001E935 0001E913 +0001E914 0001E936 0001E914 +0001E915 0001E937 0001E915 +0001E916 0001E938 0001E916 +0001E917 0001E939 0001E917 +0001E918 0001E93A 0001E918 +0001E919 0001E93B 0001E919 +0001E91A 0001E93C 0001E91A +0001E91B 0001E93D 0001E91B +0001E91C 0001E93E 0001E91C +0001E91D 0001E93F 0001E91D +0001E91E 0001E940 0001E91E +0001E91F 0001E941 0001E91F +0001E920 0001E942 0001E920 +0001E921 0001E943 0001E921 +0001E922 0001E922 0001E900 +0001E923 0001E923 0001E901 +0001E924 0001E924 0001E902 +0001E925 0001E925 0001E903 +0001E926 0001E926 0001E904 +0001E927 0001E927 0001E905 +0001E928 0001E928 0001E906 +0001E929 0001E929 0001E907 +0001E92A 0001E92A 0001E908 +0001E92B 0001E92B 0001E909 +0001E92C 0001E92C 0001E90A +0001E92D 0001E92D 0001E90B +0001E92E 0001E92E 0001E90C +0001E92F 0001E92F 0001E90D +0001E930 0001E930 0001E90E +0001E931 0001E931 0001E90F +0001E932 0001E932 0001E910 +0001E933 0001E933 0001E911 +0001E934 0001E934 0001E912 +0001E935 0001E935 0001E913 +0001E936 0001E936 0001E914 +0001E937 0001E937 0001E915 +0001E938 0001E938 0001E916 +0001E939 0001E939 0001E917 +0001E93A 0001E93A 0001E918 +0001E93B 0001E93B 0001E919 +0001E93C 0001E93C 0001E91A +0001E93D 0001E93D 0001E91B +0001E93E 0001E93E 0001E91C +0001E93F 0001E93F 0001E91D +0001E940 0001E940 0001E91E +0001E941 0001E941 0001E91F +0001E942 0001E942 0001E920 +0001E943 0001E943 0001E921 +DROP VIEW v_supplementary; +# +# End of 10.10 tests +# diff --git a/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test new file mode 100644 index 00000000000..288f86155e2 --- /dev/null +++ b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test @@ -0,0 +1,15 @@ +--echo # +--echo # Start of 10.10 tests +--echo # + +--echo # +--echo # MDEV-30577 Case folding for uca1400 collations is not up to date +--echo # + +SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci; +--source include/ctype_unicode_casefold_bmp.inc +--source include/ctype_unicode_casefold_supplementary.inc + +--echo # +--echo # End of 10.10 tests +--echo # diff --git a/mysql-test/main/derived.result b/mysql-test/main/derived.result index 112a72a2bf6..e15be3aecc4 100644 --- a/mysql-test/main/derived.result +++ b/mysql-test/main/derived.result @@ -1357,6 +1357,29 @@ a b DROP VIEW v1; DROP TABLE t1; # +# MDEV-28616: derived table over union with order by clause that +# contains subquery with unresolvable column reference +# +SELECT 1 FROM ( +SELECT 1 UNION SELECT 2 ORDER BY (SELECT 1 FROM DUAL WHERE xxx = 0) +) dt; +ERROR 42S22: Unknown column 'xxx' in 'where clause' +create table t1 (a int, b int); +insert into t1 values (3,8), (7,2), (1,4), (5,9); +create table t2 (a int, b int); +insert into t2 values (9,1), (7,3), (2,6); +create table t3 (c int, d int); +insert into t3 values (7,8), (1,2), (3,8); +select * from +( +select a,b from t1 where t1.a > 3 +union +select a,b from t2 where t2.b < 6 +order by (a - b / (select a + max(c) from t3 where d = x)) +) dt; +ERROR 42S22: Unknown column 'x' in 'where clause' +drop table t1,t2,t3; +# # End of 10.3 tests # # diff --git a/mysql-test/main/derived.test b/mysql-test/main/derived.test index e5f01e15821..83de98c5d89 100644 --- a/mysql-test/main/derived.test +++ b/mysql-test/main/derived.test @@ -1152,6 +1152,36 @@ SELECT * FROM v1 WHERE b > 0; DROP VIEW v1; DROP TABLE t1; +--echo # +--echo # MDEV-28616: derived table over union with order by clause that +--echo # contains subquery with unresolvable column reference +--echo # + +--error ER_BAD_FIELD_ERROR +SELECT 1 FROM ( + SELECT 1 UNION SELECT 2 ORDER BY (SELECT 1 FROM DUAL WHERE xxx = 0) +) dt; + +create table t1 (a int, b int); +insert into t1 values (3,8), (7,2), (1,4), (5,9); + +create table t2 (a int, b int); +insert into t2 values (9,1), (7,3), (2,6); + +create table t3 (c int, d int); +insert into t3 values (7,8), (1,2), (3,8); + +--error ER_BAD_FIELD_ERROR +select * from +( + select a,b from t1 where t1.a > 3 + union + select a,b from t2 where t2.b < 6 + order by (a - b / (select a + max(c) from t3 where d = x)) +) dt; + +drop table t1,t2,t3; + --echo # --echo # End of 10.3 tests --echo # diff --git a/mysql-test/main/group_min_max.result b/mysql-test/main/group_min_max.result index a227246e7ec..cf4bfd62424 100644 --- a/mysql-test/main/group_min_max.result +++ b/mysql-test/main/group_min_max.result @@ -4117,6 +4117,18 @@ MIN(pk) 1 DROP TABLE t1, t2; # +# MDEV-30605 Wrong result while using index for group-by +# +CREATE TABLE t1 (pk INT primary key, a int, key(a)) engine=innodb; +INSERT INTO t1 VALUES (1,-1),(2,8),(3,5),(4,-1),(5,10), (6,-1); +SELECT MIN(pk), a FROM t1 WHERE pk <> 1 GROUP BY a; +MIN(pk) a +4 -1 +3 5 +2 8 +5 10 +DROP TABLE t1; +# # End of 10.5 tests # # diff --git a/mysql-test/main/group_min_max.test b/mysql-test/main/group_min_max.test index d230cd15749..a1d2988ad4c 100644 --- a/mysql-test/main/group_min_max.test +++ b/mysql-test/main/group_min_max.test @@ -1745,6 +1745,17 @@ SELECT SQL_BUFFER_RESULT MIN(pk) FROM t1, t2; SELECT MIN(pk) FROM t1, t2; DROP TABLE t1, t2; +--echo # +--echo # MDEV-30605 Wrong result while using index for group-by +--echo # + +CREATE TABLE t1 (pk INT primary key, a int, key(a)) engine=innodb; +INSERT INTO t1 VALUES (1,-1),(2,8),(3,5),(4,-1),(5,10), (6,-1); + +SELECT MIN(pk), a FROM t1 WHERE pk <> 1 GROUP BY a; + +DROP TABLE t1; + --echo # --echo # End of 10.5 tests --echo # diff --git a/mysql-test/main/mysql_tzinfo_to_sql_symlink.result b/mysql-test/main/mysql_tzinfo_to_sql_symlink.result index b6b35e44988..97548768a2d 100644 --- a/mysql-test/main/mysql_tzinfo_to_sql_symlink.result +++ b/mysql-test/main/mysql_tzinfo_to_sql_symlink.result @@ -10,13 +10,13 @@ CREATE TABLE time_zone_leap_second LIKE mysql.time_zone_leap_second; set @wsrep_is_on=(select coalesce(sum(SESSION_VALUE='ON'), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_on'); SET STATEMENT SQL_MODE='' FOR SELECT concat('%', GROUP_CONCAT(OPTION), '%') INTO @replicate_opt FROM (SELECT DISTINCT concat('REPLICATE_', UPPER(ENGINE)) AS OPTION FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('time_zone', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'time_zone_leap_second') AND ENGINE in ('MyISAM', 'Aria')) AS o ORDER BY OPTION DESC; set @wsrep_cannot_replicate_tz=@wsrep_is_on AND (select coalesce(sum(GLOBAL_VALUE NOT LIKE @replicate_opt), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_mode'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_name'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_name''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_name ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition_type'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition_type''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition_type ENGINE=InnoDB', 'do 0'); TRUNCATE TABLE time_zone; TRUNCATE TABLE time_zone_name; @@ -59,13 +59,13 @@ execute immediate if(@wsrep_cannot_replicate_tz, concat('ALTER TABLE time_zone_t set @wsrep_is_on=(select coalesce(sum(SESSION_VALUE='ON'), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_on'); SET STATEMENT SQL_MODE='' FOR SELECT concat('%', GROUP_CONCAT(OPTION), '%') INTO @replicate_opt FROM (SELECT DISTINCT concat('REPLICATE_', UPPER(ENGINE)) AS OPTION FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('time_zone', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'time_zone_leap_second') AND ENGINE in ('MyISAM', 'Aria')) AS o ORDER BY OPTION DESC; set @wsrep_cannot_replicate_tz=@wsrep_is_on AND (select coalesce(sum(GLOBAL_VALUE NOT LIKE @replicate_opt), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_mode'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_name'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_name''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_name ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition_type'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition_type''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition_type ENGINE=InnoDB', 'do 0'); TRUNCATE TABLE time_zone; TRUNCATE TABLE time_zone_name; @@ -191,13 +191,13 @@ TRUNCATE TABLE time_zone_leap_second; set @wsrep_is_on=(select coalesce(sum(SESSION_VALUE='ON'), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_on'); SET STATEMENT SQL_MODE='' FOR SELECT concat('%', GROUP_CONCAT(OPTION), '%') INTO @replicate_opt FROM (SELECT DISTINCT concat('REPLICATE_', UPPER(ENGINE)) AS OPTION FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('time_zone', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'time_zone_leap_second') AND ENGINE in ('MyISAM', 'Aria')) AS o ORDER BY OPTION DESC; set @wsrep_cannot_replicate_tz=@wsrep_is_on AND (select coalesce(sum(GLOBAL_VALUE NOT LIKE @replicate_opt), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_mode'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_name'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_name''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_name ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition_type'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition_type''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition_type ENGINE=InnoDB', 'do 0'); /*M!100602 execute immediate if(@wsrep_cannot_replicate_tz, 'start transaction', 'LOCK TABLES time_zone WRITE, time_zone_leap_second WRITE, @@ -313,20 +313,20 @@ TRUNCATE TABLE time_zone_leap_second; set @wsrep_is_on=(select coalesce(sum(SESSION_VALUE='ON'), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_on'); SET STATEMENT SQL_MODE='' FOR SELECT concat('%', GROUP_CONCAT(OPTION), '%') INTO @replicate_opt FROM (SELECT DISTINCT concat('REPLICATE_', UPPER(ENGINE)) AS OPTION FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('time_zone', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'time_zone_leap_second') AND ENGINE in ('MyISAM', 'Aria')) AS o ORDER BY OPTION DESC; set @wsrep_cannot_replicate_tz=@wsrep_is_on AND (select coalesce(sum(GLOBAL_VALUE NOT LIKE @replicate_opt), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_mode'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_name'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_name''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_name ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition_type'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition_type''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition_type ENGINE=InnoDB', 'do 0'); /*M!100602 execute immediate if(@wsrep_cannot_replicate_tz, 'start transaction', 'LOCK TABLES time_zone WRITE, time_zone_leap_second WRITE, time_zone_name WRITE, time_zone_transition WRITE, time_zone_transition_type WRITE')*/; -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_leap_second_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_leap_second'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_leap_second_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_leap_second''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_leap_second ENGINE=InnoDB', 'do 0'); TRUNCATE TABLE time_zone_leap_second; execute immediate if(@wsrep_cannot_replicate_tz, concat('ALTER TABLE time_zone_leap_second ENGINE=', @time_zone_leap_second_engine), 'do 0'); @@ -497,13 +497,13 @@ set sql_mode=default; set @wsrep_is_on=(select coalesce(sum(SESSION_VALUE='ON'), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_on'); SET STATEMENT SQL_MODE='' FOR SELECT concat('%', GROUP_CONCAT(OPTION), '%') INTO @replicate_opt FROM (SELECT DISTINCT concat('REPLICATE_', UPPER(ENGINE)) AS OPTION FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME IN ('time_zone', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'time_zone_leap_second') AND ENGINE in ('MyISAM', 'Aria')) AS o ORDER BY OPTION DESC; set @wsrep_cannot_replicate_tz=@wsrep_is_on AND (select coalesce(sum(GLOBAL_VALUE NOT LIKE @replicate_opt), 0) from information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME='wsrep_mode'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_name'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_name_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_name''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_name ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition ENGINE=InnoDB', 'do 0'); -execute immediate if(@wsrep_cannot_replicate_tz, "select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME='time_zone_transition_type'", 'do 0'); +execute immediate if(@wsrep_cannot_replicate_tz, 'select ENGINE into @time_zone_transition_type_engine from information_schema.TABLES where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''time_zone_transition_type''', 'do 0'); execute immediate if(@wsrep_cannot_replicate_tz, 'ALTER TABLE time_zone_transition_type ENGINE=InnoDB', 'do 0'); TRUNCATE TABLE time_zone; TRUNCATE TABLE time_zone_name; diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result index 14523672a73..e004bab3068 100644 --- a/mysql-test/main/opt_trace.result +++ b/mysql-test/main/opt_trace.result @@ -11548,6 +11548,408 @@ SELECT a FROM t1 WHERE (a,b) in (SELECT @c,@d); a DROP TABLE t1; # +# MDEV-31085: multi-update using view with optimizer trace enabled +# +SET SESSION optimizer_trace = 'enabled=on'; +CREATE TABLE t (a int, b int); +CREATE VIEW v AS SELECT 1 AS c UNION SELECT 2 AS c; +INSERT INTO t VALUES (0,4),(5,6); +UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a; +SELECT * FROM information_schema.optimizer_trace; +QUERY TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE INSUFFICIENT_PRIVILEGES +UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a { + "steps": [ + { + "view": { + "table": "v", + "select_id": 2, + "algorithm": "materialized" + } + }, + { + "join_preparation": { + "select_id": 2, + "steps": [ + { + "expanded_query": "/* select#2 */ select 1 AS c" + } + ] + } + }, + { + "join_preparation": { + "select_id": 3, + "steps": [ + { + "expanded_query": "/* select#3 */ select 2 AS c" + } + ] + } + }, + { + "join_preparation": { + "select_id": 1, + "steps": [ + { + "expanded_query": "/* select#1 */ update t join v set t.b = t.a,t.a = v.c where v.c < t.a" + } + ] + } + }, + { + "join_optimization": { + "select_id": 1, + "steps": [ + { + "condition_processing": { + "condition": "WHERE", + "original_condition": "v.c < t.a", + "steps": [ + { + "transformation": "equality_propagation", + "resulting_condition": "v.c < t.a" + }, + { + "transformation": "constant_propagation", + "resulting_condition": "v.c < t.a" + }, + { + "transformation": "trivial_condition_removal", + "resulting_condition": "v.c < t.a" + } + ] + } + }, + { + "join_optimization": { + "select_id": 2, + "steps": [] + } + }, + { + "join_optimization": { + "select_id": 3, + "steps": [] + } + }, + { + "table_dependencies": [ + { + "table": "t", + "row_may_be_null": false, + "map_bit": 0, + "depends_on_map_bits": [] + }, + { + "table": "", + "row_may_be_null": false, + "map_bit": 1, + "depends_on_map_bits": [] + } + ] + }, + { + "ref_optimizer_key_uses": [] + }, + { + "rows_estimation": [ + { + "table": "t", + "table_scan": { + "rows": 2, + "read_cost": 0.01028441, + "read_and_compare_cost": 0.01034841 + } + }, + { + "table": "", + "table_scan": { + "rows": 2, + "read_cost": 0.012350033, + "read_and_compare_cost": 0.012418701 + } + } + ] + }, + { + "considered_execution_plans": [ + { + "plan_prefix": "", + "get_costs_for_tables": [ + { + "best_access_path": { + "table": "t", + "plan_details": { + "record_count": 1 + }, + "considered_access_paths": [ + { + "access_type": "scan", + "rows": 2, + "rows_after_filter": 2, + "rows_out": 2, + "cost": 0.01034841, + "index_only": false, + "chosen": true + } + ], + "chosen_access_method": { + "type": "scan", + "rows_read": 2, + "rows_out": 2, + "cost": 0.01034841, + "uses_join_buffering": false + } + } + }, + { + "best_access_path": { + "table": "", + "plan_details": { + "record_count": 1 + }, + "considered_access_paths": [ + { + "access_type": "scan", + "rows": 2, + "rows_after_filter": 2, + "rows_out": 2, + "cost": 0.012418701, + "index_only": false, + "chosen": true + } + ], + "chosen_access_method": { + "type": "scan", + "rows_read": 2, + "rows_out": 2, + "cost": 0.012418701, + "uses_join_buffering": false + } + } + } + ] + }, + { + "plan_prefix": "", + "table": "t", + "rows_for_plan": 2, + "cost_for_plan": 0.01034841, + "rest_of_plan": [ + { + "plan_prefix": "t", + "get_costs_for_tables": [ + { + "best_access_path": { + "table": "", + "plan_details": { + "record_count": 2 + }, + "considered_access_paths": [ + { + "access_type": "scan_with_join_cache", + "rows": 2, + "rows_after_filter": 2, + "rows_out": 2, + "cost": 0.012911897, + "index_only": false, + "chosen": true + } + ], + "chosen_access_method": { + "type": "scan", + "rows_read": 2, + "rows_out": 2, + "cost": 0.012911897, + "uses_join_buffering": true + } + } + } + ] + }, + { + "plan_prefix": "t", + "table": "", + "rows_for_plan": 4, + "cost_for_plan": 0.023260307 + } + ] + }, + { + "plan_prefix": "", + "table": "", + "rows_for_plan": 2, + "cost_for_plan": 0.012418701, + "pruned_by_heuristic": true + } + ] + }, + { + "best_join_order": ["t", ""], + "rows": 4, + "cost": 0.023260307 + }, + { + "substitute_best_equal": { + "condition": "WHERE", + "resulting_condition": "v.c < t.a" + } + }, + { + "attaching_conditions_to_tables": { + "attached_conditions_computation": [], + "attached_conditions_summary": [ + { + "table": "t", + "attached_condition": null + }, + { + "table": "", + "attached_condition": "v.c < t.a" + } + ] + } + }, + { + "make_join_readinfo": [] + } + ] + } + }, + { + "join_execution": { + "select_id": 1, + "steps": [ + { + "join_execution": { + "select_id": 2, + "steps": [] + } + }, + { + "join_execution": { + "select_id": 3, + "steps": [] + } + }, + { + "join_preparation": { + "select_id": "fake", + "steps": [ + { + "expanded_query": "select c AS c from dual" + } + ] + } + }, + { + "join_optimization": { + "select_id": "fake", + "steps": [ + { + "table_dependencies": [ + { + "table": "union", + "row_may_be_null": false, + "map_bit": 0, + "depends_on_map_bits": [] + } + ] + }, + { + "rows_estimation": [ + { + "table": "union", + "table_scan": { + "rows": 2, + "read_cost": 0.010020701, + "read_and_compare_cost": 0.010084701 + } + } + ] + }, + { + "considered_execution_plans": [ + { + "plan_prefix": "", + "get_costs_for_tables": [ + { + "best_access_path": { + "table": "union", + "plan_details": { + "record_count": 1 + }, + "considered_access_paths": [ + { + "access_type": "scan", + "rows": 2, + "rows_after_filter": 2, + "rows_out": 2, + "cost": 0.010084701, + "index_only": false, + "chosen": true + } + ], + "chosen_access_method": { + "type": "scan", + "rows_read": 2, + "rows_out": 2, + "cost": 0.010084701, + "uses_join_buffering": false + } + } + } + ] + }, + { + "plan_prefix": "", + "table": "union", + "rows_for_plan": 2, + "cost_for_plan": 0.010084701 + } + ] + }, + { + "best_join_order": ["union"], + "rows": 2, + "cost": 0.010084701 + }, + { + "attaching_conditions_to_tables": { + "attached_conditions_computation": [], + "attached_conditions_summary": [ + { + "table": "union", + "attached_condition": null + } + ] + } + }, + { + "make_join_readinfo": [] + } + ] + } + }, + { + "join_execution": { + "select_id": "fake", + "steps": [] + } + } + ] + } + } + ] +} 0 0 +SELECT * FROM t; +a b +0 4 +1 5 +SET optimizer_trace=DEFAULT; +DROP VIEW v; +DROP TABLE t; +# # End of 10.4 tests # set optimizer_trace='enabled=on'; diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test index 6f8040f1689..29b0f404446 100644 --- a/mysql-test/main/opt_trace.test +++ b/mysql-test/main/opt_trace.test @@ -653,6 +653,25 @@ INSERT INTO t1 VALUES (0,0); SELECT a FROM t1 WHERE (a,b) in (SELECT @c,@d); DROP TABLE t1; +--echo # +--echo # MDEV-31085: multi-update using view with optimizer trace enabled +--echo # + +SET SESSION optimizer_trace = 'enabled=on'; + +CREATE TABLE t (a int, b int); +CREATE VIEW v AS SELECT 1 AS c UNION SELECT 2 AS c; +INSERT INTO t VALUES (0,4),(5,6); +UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a; +SELECT * FROM information_schema.optimizer_trace; + +SELECT * FROM t; + +SET optimizer_trace=DEFAULT; + +DROP VIEW v; +DROP TABLE t; + --echo # --echo # End of 10.4 tests --echo # diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result index c0c459e57b4..2f343c7bca8 100644 --- a/mysql-test/main/parser.result +++ b/mysql-test/main/parser.result @@ -1905,12 +1905,32 @@ SET @@sql_mode=@save_sql_mode; # # MDEV-30151 parse error 1=2 not between/in # -select 1=2 not in (3,4); -1=2 not in (3,4) +SELECT 1=2 NOT IN (3,4); +1=2 NOT IN (3,4) 1 -select 1=2 not between 3 and 4; -1=2 not between 3 and 4 +SELECT 1=2 NOT BETWEEN 3 AND 4; +1=2 NOT BETWEEN 3 AND 4 1 +CREATE TABLE t1 ( f INT AS ( 1 IN ( 2 NOT BETWEEN 3 AND 4 ) ) ); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f` int(11) GENERATED ALWAYS AS (1 = 2 not between 3 and 4) VIRTUAL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +DROP TABLE t1; +CREATE TABLE t1 ( f INT, CHECK ( 1 IN ( 2 NOT BETWEEN 3 AND 4 ) ) ); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f` int(11) DEFAULT NULL, + CONSTRAINT `CONSTRAINT_1` CHECK (1 = 2 not between 3 and 4) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +DROP TABLE t1; +CREATE VIEW v1 AS SELECT 1 IN ( 2 NOT BETWEEN 3 AND 4 ); +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 = 2 not between 3 and 4 AS `1 IN ( 2 NOT BETWEEN 3 AND 4 )` latin1 latin1_swedish_ci +DROP VIEW v1; # # End of 10.3 tests # diff --git a/mysql-test/main/parser.test b/mysql-test/main/parser.test index 48cda68b416..dcad30b36b8 100644 --- a/mysql-test/main/parser.test +++ b/mysql-test/main/parser.test @@ -1687,8 +1687,21 @@ SET @@sql_mode=@save_sql_mode; --echo # --echo # MDEV-30151 parse error 1=2 not between/in --echo # -select 1=2 not in (3,4); -select 1=2 not between 3 and 4; + +SELECT 1=2 NOT IN (3,4); +SELECT 1=2 NOT BETWEEN 3 AND 4; + +CREATE TABLE t1 ( f INT AS ( 1 IN ( 2 NOT BETWEEN 3 AND 4 ) ) ); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 ( f INT, CHECK ( 1 IN ( 2 NOT BETWEEN 3 AND 4 ) ) ); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE VIEW v1 AS SELECT 1 IN ( 2 NOT BETWEEN 3 AND 4 ); +SHOW CREATE VIEW v1; +DROP VIEW v1; --echo # --echo # End of 10.3 tests diff --git a/mysql-test/main/sql_mode_pad_char_to_full_length.result b/mysql-test/main/sql_mode_pad_char_to_full_length.result new file mode 100644 index 00000000000..6f68aade613 --- /dev/null +++ b/mysql-test/main/sql_mode_pad_char_to_full_length.result @@ -0,0 +1,94 @@ +# +# Start of 10.4 tests +# +# +# MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +# +SET default_storage_engine=MyISAM; +# +# MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +# +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +SET sql_mode='pad_char_to_full_length'; +INSERT INTO t1 VALUES (0,0); +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE OR REPLACE TABLE t1 (a CHAR(20),b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(20) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +SET default_storage_engine=MEMORY; +# +# MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +# +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +SET sql_mode='pad_char_to_full_length'; +INSERT INTO t1 VALUES (0,0); +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE OR REPLACE TABLE t1 (a CHAR(20),b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(20) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +SET default_storage_engine=DEFAULT; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/sql_mode_pad_char_to_full_length.test b/mysql-test/main/sql_mode_pad_char_to_full_length.test new file mode 100644 index 00000000000..4d492bc1b70 --- /dev/null +++ b/mysql-test/main/sql_mode_pad_char_to_full_length.test @@ -0,0 +1,19 @@ +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +--echo # + +SET default_storage_engine=MyISAM; +--source include/sql_mode_pad_char_to_full_length.inc + +SET default_storage_engine=MEMORY; +--source include/sql_mode_pad_char_to_full_length.inc + +SET default_storage_engine=DEFAULT; + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/main/update.result b/mysql-test/main/update.result index f5edf1c6be3..b9b80fb48de 100644 --- a/mysql-test/main/update.result +++ b/mysql-test/main/update.result @@ -734,3 +734,32 @@ UPDATE t1,t2 SET t1.i1 = -39 WHERE t2.d1 <> t1.i1 AND t2.d1 = t1.d2; ERROR 22007: Incorrect datetime value: '19' for column `test`.`t1`.`i1` at row 1 DROP TABLE t1,t2; # End of MariaDB 10.2 tests +# +# MDEV-20773: UPDATE with LIKE predicate over non-indexed column +# of VARCHAR type +# +create table t1 (a1 varchar(30), a2 varchar(30) collate utf8_bin); +insert into t1 values +('aa','zzz'), ('b','xxaa'), ('ccc','yyy'), ('ddd','xxb'); +analyze table t1 persistent for all; +Table Op Msg_type Msg_text +test.t1 analyze status Engine-independent statistics collected +test.t1 analyze status OK +explain extended +update t1 set a1 = 'u' + where a2 like 'xx%' and exists(select 1 from t1 where t1.a1 < 'c'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 4 50.00 Using where +2 SUBQUERY t1 ALL NULL NULL NULL NULL 4 50.00 Using where +Warnings: +Note 1003 /* select#1 */ update `test`.`t1` set `test`.`t1`.`a1` = 'u' where `test`.`t1`.`a2` like 'xx%' +update t1 set a1 = 'u' + where a2 like 'xx%' and exists(select 1 from t1 where t1.a1 < 'c'); +select * from t1; +a1 a2 +aa zzz +u xxaa +ccc yyy +u xxb +drop table t1; +# End of MariaDB 10.4 tests diff --git a/mysql-test/main/update.test b/mysql-test/main/update.test index 8a6949447ee..147d69d50c9 100644 --- a/mysql-test/main/update.test +++ b/mysql-test/main/update.test @@ -676,3 +676,26 @@ UPDATE t1,t2 SET t1.i1 = -39 WHERE t2.d1 <> t1.i1 AND t2.d1 = t1.d2; DROP TABLE t1,t2; --echo # End of MariaDB 10.2 tests + +--echo # +--echo # MDEV-20773: UPDATE with LIKE predicate over non-indexed column +--echo # of VARCHAR type +--echo # + +create table t1 (a1 varchar(30), a2 varchar(30) collate utf8_bin); +insert into t1 values + ('aa','zzz'), ('b','xxaa'), ('ccc','yyy'), ('ddd','xxb'); +analyze table t1 persistent for all; + +explain extended +update t1 set a1 = 'u' + where a2 like 'xx%' and exists(select 1 from t1 where t1.a1 < 'c'); + +update t1 set a1 = 'u' + where a2 like 'xx%' and exists(select 1 from t1 where t1.a1 < 'c'); + +select * from t1; + +drop table t1; + +--echo # End of MariaDB 10.4 tests diff --git a/mysql-test/mariadb-test-run.pl b/mysql-test/mariadb-test-run.pl index 65c17801b16..1c4d2866c85 100755 --- a/mysql-test/mariadb-test-run.pl +++ b/mysql-test/mariadb-test-run.pl @@ -145,7 +145,6 @@ my $opt_start_exit; my $start_only; my $file_wsrep_provider; my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far. -my $test_name_for_report; our @global_suppressions; @@ -402,6 +401,11 @@ sub main { mtr_report("Collecting tests..."); my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list); + if (@$tests == 0) { + mtr_report("No tests to run..."); + exit 0; + } + mark_time_used('collect'); mysql_install_db(default_mysqld(), "$opt_vardir/install.db") unless using_extern(); @@ -516,13 +520,13 @@ sub main { } if ( not @$completed ) { - if ($test_name_for_report) - { - my $tinfo = My::Test->new(name => $test_name_for_report); - $tinfo->{result}= 'MTR_RES_FAILED'; - $tinfo->{comment}=' '; - mtr_report_test($tinfo); - } + my $test_name= mtr_grab_file($path_testlog); + $test_name =~ s/^CURRENT_TEST:\s//; + chomp($test_name); + my $tinfo = My::Test->new(name => $test_name); + $tinfo->{result}= 'MTR_RES_FAILED'; + $tinfo->{comment}=' '; + mtr_report_test($tinfo); mtr_error("Test suite aborted"); } @@ -3742,8 +3746,8 @@ sub resfile_report_test ($) { sub run_testcase ($$) { my ($tinfo, $server_socket)= @_; my $print_freq=20; - $test_name_for_report= $tinfo->{name}; - mtr_verbose("Running test:", $test_name_for_report); + + mtr_verbose("Running test:", $tinfo->{name}); $ENV{'MTR_TEST_NAME'} = $tinfo->{name}; resfile_report_test($tinfo) if $opt_resfile; @@ -5132,10 +5136,12 @@ sub mysqld_start ($$) { if (!$rc) { # Report failure about the last test case before exit - my $tinfo = My::Test->new(name => $test_name_for_report); + my $test_name= mtr_grab_file($path_current_testlog); + $test_name =~ s/^CURRENT_TEST:\s//; + my $tinfo = My::Test->new(name => $test_name); $tinfo->{result}= 'MTR_RES_FAILED'; $tinfo->{failures}= 1; - $tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $test_name_for_report); + $tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $tinfo->{name}); report_option('verbose', 1); mtr_report_test($tinfo); } diff --git a/mysql-test/suite/binlog/t/binlog_truncate_multi_engine.inc b/mysql-test/suite/binlog/t/binlog_truncate_multi_engine.inc index 52ce4741eaa..f3801070851 100644 --- a/mysql-test/suite/binlog/t/binlog_truncate_multi_engine.inc +++ b/mysql-test/suite/binlog/t/binlog_truncate_multi_engine.inc @@ -20,7 +20,9 @@ connect(con1,localhost,root,,); --source include/show_binary_logs.inc INSERT INTO t1 VALUES (1, REPEAT("x", 1)); INSERT INTO t2 VALUES (1, REPEAT("x", 1)); -if (`SELECT $case = "B"`) +--let $is_case_B=`SELECT $case = "B"` + +if ($is_case_B) { --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect wait-binlog_truncate_multi_engine.test @@ -39,12 +41,12 @@ if (`SELECT $debug_sync_action != ""`) send COMMIT; --connection default -if (`SELECT $case = "B"`) +if ($is_case_B) { --source include/wait_until_disconnected.inc --source include/start_mysqld.inc } -if (`SELECT $case != "B"`) +if (!$is_case_B) { SET DEBUG_SYNC= "now WAIT_FOR con1_ready"; --echo List of binary logs after rotation diff --git a/mysql-test/suite/galera/r/MDEV-30804.result b/mysql-test/suite/galera/r/MDEV-30804.result new file mode 100644 index 00000000000..2bf323d19f8 --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-30804.result @@ -0,0 +1,11 @@ +connection node_2; +connection node_1; +CREATE TABLE t (a INT) ENGINE=Aria; +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +START TRANSACTION; +INSERT INTO t VALUES ('1'); +INSERT INTO t1 VALUES ('1'); +COMMIT; +ERROR HY000: Transactional commit not supported by involved engine(s) +DROP TABLE t; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/MDEV-30955.result b/mysql-test/suite/galera/r/MDEV-30955.result new file mode 100644 index 00000000000..2a090cb58bc --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-30955.result @@ -0,0 +1,26 @@ +connection node_2; +connection node_1; +CREATE TABLE t (a CHAR(1) KEY); +START TRANSACTION; +HANDLER t OPEN; +disconnect node_1; +connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1; +DROP TABLE t; +BACKUP STAGE START; +START TRANSACTION; +disconnect node_1; +connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1; +connection node_1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY); +START TRANSACTION; +INSERT INTO t1 VALUES(1); +HANDLER t2 OPEN; +connection node_2; +INSERT INTO t1 VALUES(1); +connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1; +connection node_1a; +connection node_1; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +DROP TABLE t1,t2; diff --git a/mysql-test/suite/galera/r/galera_var_replicate_aria_on.result b/mysql-test/suite/galera/r/galera_var_replicate_aria_on.result index 39fd748314c..91c07ba6681 100644 --- a/mysql-test/suite/galera/r/galera_var_replicate_aria_on.result +++ b/mysql-test/suite/galera/r/galera_var_replicate_aria_on.result @@ -89,11 +89,8 @@ connection node_1; SET GLOBAL wsrep_sync_wait=15; CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=Aria; CREATE TABLE t2 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB; -SET AUTOCOMMIT=OFF; -START TRANSACTION; INSERT INTO t1 VALUES (1); INSERT INTO t2 VALUES (1); -COMMIT; connection node_2; SET GLOBAL wsrep_sync_wait=15; SELECT COUNT(*) AS EXPECT_1 FROM t1; @@ -103,6 +100,7 @@ SELECT COUNT(*) AS EXPECT_1 FROM t2; EXPECT_1 1 connection node_1; +SET AUTOCOMMIT=OFF; START TRANSACTION; INSERT INTO t1 VALUES (2); INSERT INTO t2 VALUES (2); @@ -129,6 +127,7 @@ INSERT INTO t1 VALUES (1); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' connection node_1; COMMIT; +ERROR HY000: Transactional commit not supported by involved engine(s) DROP TABLE t1,t2; connection node_1; CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE=INNODB; diff --git a/mysql-test/suite/galera/r/mdev-26175.result b/mysql-test/suite/galera/r/mdev-26175.result new file mode 100644 index 00000000000..f84244fe916 --- /dev/null +++ b/mysql-test/suite/galera/r/mdev-26175.result @@ -0,0 +1,24 @@ +connection node_2; +connection node_1; +connection node_1; +SET sql_mode="no_zero_date"; +SET GLOBAL wsrep_max_ws_rows=1; +CREATE TABLE t2 (a INT); +CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) ENGINE=InnoDB; +CREATE TRIGGER tgr BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (0); +INSERT INTO t1 VALUES (0),(1); +ERROR HY000: wsrep_max_ws_rows exceeded +SELECT * FROM t1; +a +SELECT * FROM t2; +a +connection node_2; +SELECT * FROM t1; +a +SELECT * FROM t2; +a +connection node_1; +SET sql_mode=DEFAULT; +SET GLOBAL wsrep_max_ws_rows=DEFAULT; +DROP TRIGGER tgr; +DROP TABLE t1, t2; diff --git a/mysql-test/suite/galera/t/MDEV-30804.cnf b/mysql-test/suite/galera/t/MDEV-30804.cnf new file mode 100644 index 00000000000..9dbd81f758d --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-30804.cnf @@ -0,0 +1,7 @@ +!include ../galera_2nodes.cnf + +[mysqld.1] +log-bin + +[mysqld.2] +log-bin diff --git a/mysql-test/suite/galera/t/MDEV-30804.test b/mysql-test/suite/galera/t/MDEV-30804.test new file mode 100644 index 00000000000..561953a0578 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-30804.test @@ -0,0 +1,21 @@ +# +# Test that transaction requiring two-phase commit and involving +# storage engines not supporting it rolls back with a message. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_aria.inc + +CREATE TABLE t (a INT) ENGINE=Aria; +CREATE TABLE t1 (a INT) ENGINE=InnoDB; + +START TRANSACTION; +INSERT INTO t VALUES ('1'); +INSERT INTO t1 VALUES ('1'); + +--error ER_ERROR_DURING_COMMIT +COMMIT; + +DROP TABLE t; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/MDEV-30955.test b/mysql-test/suite/galera/t/MDEV-30955.test new file mode 100644 index 00000000000..18577120e83 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-30955.test @@ -0,0 +1,70 @@ +# +# MDEV-30955 +# Assertion `thd->mdl_context.is_lock_owner(MDL_key::TABLE, +# table->s->db.str, table->s->table_name.str, MDL_SHARED)' +# failed in close_thread_table() +# + +--source include/galera_cluster.inc + +# +# Test 1: Assertion thd->mdl_context.is_lock_owner() +# failed in close_thread_table() +# +CREATE TABLE t (a CHAR(1) KEY); +START TRANSACTION; +HANDLER t OPEN; + +# +# If bug is present the transaction will be aborted +# through Wsrep_client_service::bf_rollback() and +# release explicit locks too early. Later, during +# THD::cleanup(), table t will be closed and the +# THD is expected to be owner of the MDL lock that +# was just released. +# +--disconnect node_1 + +--connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1 +DROP TABLE t; + + +# +# Test 2: Similar issue reproduces also with BACKUP STAGE locks. +# See comments in MDEV-25037 +# + +BACKUP STAGE START; +START TRANSACTION; +--disconnect node_1 +--connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1 + + +# +# Test 3: Assertion `!thd->mdl_context.has_locks()' failed +# in do_command() +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY); + +--let $bf_count = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.global_status WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +START TRANSACTION; +INSERT INTO t1 VALUES(1); +HANDLER t2 OPEN; + +--connection node_2 +INSERT INTO t1 VALUES(1); + +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 +--connection node_1a +--let $wait_condition = SELECT VARIABLE_VALUE = $bf_count + 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts' +--source include/wait_condition.inc + +--connection node_1 +--error ER_LOCK_DEADLOCK +COMMIT; + +DROP TABLE t1,t2; diff --git a/mysql-test/suite/galera/t/galera_sequences.test b/mysql-test/suite/galera/t/galera_sequences.test index faa3b46d2a7..613823d83e9 100644 --- a/mysql-test/suite/galera/t/galera_sequences.test +++ b/mysql-test/suite/galera/t/galera_sequences.test @@ -1,4 +1,5 @@ --source include/galera_cluster.inc +--source include/have_innodb.inc # # MDEV-19353 : Alter Sequence do not replicate to another nodes with in Galera Cluster diff --git a/mysql-test/suite/galera/t/galera_var_replicate_aria_on.test b/mysql-test/suite/galera/t/galera_var_replicate_aria_on.test index c3bc53ee17f..ac9a79e6196 100644 --- a/mysql-test/suite/galera/t/galera_var_replicate_aria_on.test +++ b/mysql-test/suite/galera/t/galera_var_replicate_aria_on.test @@ -85,18 +85,15 @@ SELECT * FROM t1; DROP TABLE t1; # -# Transaction +# Preparation for next tests # --connection node_1 SET GLOBAL wsrep_sync_wait=15; CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=Aria; CREATE TABLE t2 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB; -SET AUTOCOMMIT=OFF; -START TRANSACTION; INSERT INTO t1 VALUES (1); INSERT INTO t2 VALUES (1); -COMMIT; --connection node_2 SET GLOBAL wsrep_sync_wait=15; @@ -108,6 +105,7 @@ SELECT COUNT(*) AS EXPECT_1 FROM t2; # --connection node_1 +SET AUTOCOMMIT=OFF; START TRANSACTION; INSERT INTO t1 VALUES (2); INSERT INTO t2 VALUES (2); @@ -138,6 +136,8 @@ INSERT INTO t2 VALUES (1); INSERT INTO t1 VALUES (1); --connection node_1 + +--error ER_ERROR_DURING_COMMIT COMMIT; DROP TABLE t1,t2; diff --git a/mysql-test/suite/galera/t/mdev-26175.test b/mysql-test/suite/galera/t/mdev-26175.test new file mode 100644 index 00000000000..1a3f1153e03 --- /dev/null +++ b/mysql-test/suite/galera/t/mdev-26175.test @@ -0,0 +1,27 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# MDEV-26175 : Assertion `! thd->in_sub_stmt' failed in bool trans_rollback_stmt(THD*) +# +--connection node_1 +SET sql_mode="no_zero_date"; +SET GLOBAL wsrep_max_ws_rows=1; +CREATE TABLE t2 (a INT); +CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) ENGINE=InnoDB; +CREATE TRIGGER tgr BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (0); + +--error ER_ERROR_DURING_COMMIT +INSERT INTO t1 VALUES (0),(1); +SELECT * FROM t1; +SELECT * FROM t2; + +--connection node_2 +SELECT * FROM t1; +SELECT * FROM t2; + +--connection node_1 +SET sql_mode=DEFAULT; +SET GLOBAL wsrep_max_ws_rows=DEFAULT; +DROP TRIGGER tgr; +DROP TABLE t1, t2; diff --git a/mysql-test/suite/galera_sr/r/MDEV-30862.result b/mysql-test/suite/galera_sr/r/MDEV-30862.result new file mode 100644 index 00000000000..43da77f24df --- /dev/null +++ b/mysql-test/suite/galera_sr/r/MDEV-30862.result @@ -0,0 +1,11 @@ +connection node_2; +connection node_1; +SET autocommit=0; +SET SESSION wsrep_trx_fragment_size=1; +CREATE TABLE t2 SELECT seq FROM seq_1_to_50; +ERROR 42000: CREATE TABLE AS SELECT is not supported with streaming replication +CREATE TABLE t1 (f1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); +INSERT INTO t1 VALUES(DEFAULT); +CREATE TABLE t2 SELECT * FROM t1; +ERROR 42000: CREATE TABLE AS SELECT is not supported with streaming replication +DROP TABLE t1; diff --git a/mysql-test/suite/galera_sr/t/MDEV-30862.test b/mysql-test/suite/galera_sr/t/MDEV-30862.test new file mode 100644 index 00000000000..6be77b4d71b --- /dev/null +++ b/mysql-test/suite/galera_sr/t/MDEV-30862.test @@ -0,0 +1,24 @@ +# +# MDEV-30862 Assertion `mode_ == m_high_priority' failed in +# void wsrep::client_state::after_applying() +# + +--source include/galera_cluster.inc +--source include/have_sequence.inc + +SET autocommit=0; +SET SESSION wsrep_trx_fragment_size=1; +--error ER_NOT_ALLOWED_COMMAND +CREATE TABLE t2 SELECT seq FROM seq_1_to_50; + + +# +# Same test without using seq +# +CREATE TABLE t1 (f1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); +INSERT INTO t1 VALUES(DEFAULT); +--error ER_NOT_ALLOWED_COMMAND +CREATE TABLE t2 SELECT * FROM t1; + + +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/default_row_format_alter.result b/mysql-test/suite/innodb/r/default_row_format_alter.result index 42cbab8a5f2..33936b59003 100644 --- a/mysql-test/suite/innodb/r/default_row_format_alter.result +++ b/mysql-test/suite/innodb/r/default_row_format_alter.result @@ -129,5 +129,25 @@ SELECT ROW_FORMAT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1'; ROW_FORMAT Dynamic DROP TABLE t1; +# +# MDEV-31025 Redundant table alter fails when fixed column +# stored externally +# +set @old_sql_mode = @@sql_mode; +SET @@sql_mode=''; +CREATE TABLE t1(pk INT,c CHAR(255),c2 CHAR(255),c3 CHAR(255), +c4 char(255), c5 char(255), c6 char(255), +c7 char(255), c8 char(255), primary key(pk) +)Engine=InnoDB character set utf32 ROW_FORMAT=REDUNDANT; +INSERT INTO t1(pk, c) VALUES (1, repeat('a', 255)); +ALTER TABLE t1 FORCE; +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT LENGTH(c) FROM t1; +LENGTH(c) +1020 +DROP TABLE t1; +set @@sql_mode = @old_sql_mode; # End of 10.4 tests SET GLOBAL innodb_default_row_format = @row_format; diff --git a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result index b51a7fb3f6d..8cc2a11545f 100644 --- a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result +++ b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result @@ -151,8 +151,8 @@ trx_commits_insert_update transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NUL trx_rollbacks transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of transactions rolled back trx_rollbacks_savepoint transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of transactions rolled back to savepoint trx_rseg_history_len transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Length of the TRX_RSEG_HISTORY list -trx_undo_slots_used transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of undo slots used -trx_undo_slots_cached transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of undo slots cached +trx_undo_slots_used transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Number of undo slots used +trx_undo_slots_cached transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Number of undo slots cached trx_rseg_current_size transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current rollback segment size in pages purge_del_mark_records purge 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of delete-marked rows purged purge_upd_exist_or_extern_records purge 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of purges on updates of existing records and updates on delete marked record with externally stored field diff --git a/mysql-test/suite/innodb/r/sql_mode_pad_char_to_full_length.result b/mysql-test/suite/innodb/r/sql_mode_pad_char_to_full_length.result new file mode 100644 index 00000000000..09c1cf57497 --- /dev/null +++ b/mysql-test/suite/innodb/r/sql_mode_pad_char_to_full_length.result @@ -0,0 +1,51 @@ +SET default_storage_engine=InnoDB; +# +# Start of 10.4 tests +# +# +# MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +# +# +# MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +# +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE TABLE t1 (a INT,b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +SET sql_mode='pad_char_to_full_length'; +INSERT INTO t1 VALUES (0,0); +DELETE FROM t1; +DROP TABLE t1; +SET sql_mode=''; +CREATE OR REPLACE TABLE t1 (a CHAR(20),b CHAR(20)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(20) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +CREATE UNIQUE INDEX bi USING HASH ON t1 (b); +INSERT INTO t1 VALUES (0,0); +SET sql_mode='pad_char_to_full_length'; +DELETE FROM t1; +DROP TABLE t1; +# +# End of 10.4 tests +# diff --git a/mysql-test/suite/innodb/t/default_row_format_alter.test b/mysql-test/suite/innodb/t/default_row_format_alter.test index f5dd246efb5..5f2170454f3 100644 --- a/mysql-test/suite/innodb/t/default_row_format_alter.test +++ b/mysql-test/suite/innodb/t/default_row_format_alter.test @@ -150,6 +150,23 @@ ALTER TABLE t1 DROP b; SELECT ROW_FORMAT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1'; DROP TABLE t1; +--echo # +--echo # MDEV-31025 Redundant table alter fails when fixed column +--echo # stored externally +--echo # +set @old_sql_mode = @@sql_mode; +SET @@sql_mode=''; +CREATE TABLE t1(pk INT,c CHAR(255),c2 CHAR(255),c3 CHAR(255), + c4 char(255), c5 char(255), c6 char(255), + c7 char(255), c8 char(255), primary key(pk) + )Engine=InnoDB character set utf32 ROW_FORMAT=REDUNDANT; +INSERT INTO t1(pk, c) VALUES (1, repeat('a', 255)); +ALTER TABLE t1 FORCE; +CHECK TABLE t1; +SELECT LENGTH(c) FROM t1; +DROP TABLE t1; +set @@sql_mode = @old_sql_mode; + --echo # End of 10.4 tests SET GLOBAL innodb_default_row_format = @row_format; diff --git a/mysql-test/suite/innodb/t/sql_mode_pad_char_to_full_length.test b/mysql-test/suite/innodb/t/sql_mode_pad_char_to_full_length.test new file mode 100644 index 00000000000..ba286c744d9 --- /dev/null +++ b/mysql-test/suite/innodb/t/sql_mode_pad_char_to_full_length.test @@ -0,0 +1,18 @@ +--source include/have_innodb.inc + +SET default_storage_engine=InnoDB; + +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-28190 sql_mode makes MDEV-371 virtual column expressions nondeterministic +--echo # + +--source include/sql_mode_pad_char_to_full_length.inc + + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/suite/innodb_fts/r/concurrent_insert.result b/mysql-test/suite/innodb_fts/r/concurrent_insert.result index 2335982816b..bc47511b046 100644 --- a/mysql-test/suite/innodb_fts/r/concurrent_insert.result +++ b/mysql-test/suite/innodb_fts/r/concurrent_insert.result @@ -19,7 +19,7 @@ INSERT INTO t2 VALUES('mariadb'); connection default; SET @saved_dbug = @@GLOBAL.debug_dbug; SET GLOBAL debug_dbug ='+d,fts_instrument_sync_request,ib_optimize_wq_hang'; -SET DEBUG_SYNC= 'fts_sync_end +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL drop_index_start WAIT_FOR sync_op'; INSERT INTO t1 VALUES('Keyword'); connect con1,localhost,root,,,; diff --git a/mysql-test/suite/innodb_fts/r/sync.result b/mysql-test/suite/innodb_fts/r/sync.result index 74a5d2f13fb..928efffdb21 100644 --- a/mysql-test/suite/innodb_fts/r/sync.result +++ b/mysql-test/suite/innodb_fts/r/sync.result @@ -11,19 +11,19 @@ INSERT INTO t1(title) VALUES('database'); connection con1; SET @old_dbug = @@SESSION.debug_dbug; SET debug_dbug = '+d,fts_instrument_sync_debug'; -SET DEBUG_SYNC= 'fts_sync_end SIGNAL written WAIT_FOR selected'; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR selected'; INSERT INTO t1(title) VALUES('mysql database'); connection default; SET DEBUG_SYNC= 'now WAIT_FOR written'; SET GLOBAL innodb_ft_aux_table="test/t1"; SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION -SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; -WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION database 2 3 2 2 0 database 2 3 2 3 6 mysql 1 3 2 1 0 mysql 1 3 2 3 0 +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION SET GLOBAL innodb_ft_aux_table=default; SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); FTS_DOC_ID title @@ -59,7 +59,7 @@ INSERT INTO t1(title) VALUES('mysql'); INSERT INTO t1(title) VALUES('database'); connection con1; SET debug_dbug = '+d,fts_instrument_sync_debug'; -SET DEBUG_SYNC= 'fts_sync_end SIGNAL written WAIT_FOR inserted'; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR inserted'; INSERT INTO t1(title) VALUES('mysql database'); connection default; SET DEBUG_SYNC= 'now WAIT_FOR written'; @@ -70,14 +70,14 @@ SET debug_dbug = @old_dbug; SET GLOBAL innodb_ft_aux_table="test/t1"; SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE; WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION -database 4 4 1 4 6 -mysql 4 4 1 4 0 SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION database 2 3 2 2 0 database 2 3 2 3 6 -mysql 1 3 2 1 0 -mysql 1 3 2 3 0 +database 4 4 1 4 6 +mysql 1 4 3 1 0 +mysql 1 4 3 3 0 +mysql 1 4 3 4 0 SET GLOBAL innodb_ft_aux_table=default; SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); FTS_DOC_ID title diff --git a/mysql-test/suite/innodb_fts/r/sync_block.result b/mysql-test/suite/innodb_fts/r/sync_block.result new file mode 100644 index 00000000000..65bee127e80 --- /dev/null +++ b/mysql-test/suite/innodb_fts/r/sync_block.result @@ -0,0 +1,83 @@ +SET @old_log_output = @@global.log_output; +SET @old_slow_query_log = @@global.slow_query_log; +SET @old_general_log = @@global.general_log; +SET @old_long_query_time = @@global.long_query_time; +SET @old_debug = @@global.debug_dbug; +SET GLOBAL log_output = 'TABLE'; +SET GLOBAL general_log = 1; +SET GLOBAL slow_query_log = 1; +SET GLOBAL long_query_time = 1; +connect con1,localhost,root,,; +connect con2,localhost,root,,; +connection default; +# Case 1: Sync blocks DML(insert) on the same table. +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +connection con1; +SET GLOBAL debug_dbug='+d,fts_instrument_sync_debug,fts_instrument_sync_sleep'; +SET DEBUG_SYNC= 'fts_sync_begin SIGNAL begin WAIT_FOR continue'; +INSERT INTO t1(title) VALUES('mysql database'); +connection con2; +SET DEBUG_SYNC= 'now WAIT_FOR begin'; +SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; +connection con1; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +connection con2; +/* conneciton con2 */ SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +FTS_DOC_ID title +connection default; +# make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +SLEEP(2) +0 +# slow log results should only contain INSERT INTO t1. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; +sql_text +INSERT INTO t1(title) VALUES('mysql database') +SET GLOBAL debug_dbug = @old_debug; +TRUNCATE TABLE mysql.slow_log; +DROP TABLE t1; +# Case 2: Sync blocks DML(insert) on other tables. +CREATE TABLE t1 ( +FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), +FULLTEXT(title) +) ENGINE = InnoDB; +CREATE TABLE t2(id INT); +connection con1; +SET GLOBAL debug_dbug='+d,fts_instrument_sync_request,fts_instrument_sync_sleep'; +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL begin WAIT_FOR continue'; +INSERT INTO t1(title) VALUES('mysql database'); +connection con2; +SET DEBUG_SYNC= 'now WAIT_FOR begin'; +INSERT INTO t2 VALUES(1); +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; +connection con1; +/* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +connection con2; +/* conneciton con2 */ INSERT INTO t2 VALUES(1); +connection default; +SET DEBUG_SYNC = 'RESET'; +# make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +SLEEP(2) +0 +# slow log results should be empty here. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; +sql_text +SET GLOBAL debug_dbug = @old_debug; +TRUNCATE TABLE mysql.slow_log; +DROP TABLE t1,t2; +disconnect con1; +disconnect con2; +# Restore slow log settings. +SET GLOBAL log_output = @old_log_output; +SET GLOBAL general_log = @old_general_log; +SET GLOBAL slow_query_log = @old_slow_query_log; +SET GLOBAL long_query_time = @old_long_query_time; diff --git a/mysql-test/suite/innodb_fts/t/concurrent_insert.test b/mysql-test/suite/innodb_fts/t/concurrent_insert.test index b6991f6e503..9b4d9517b1a 100644 --- a/mysql-test/suite/innodb_fts/t/concurrent_insert.test +++ b/mysql-test/suite/innodb_fts/t/concurrent_insert.test @@ -31,7 +31,7 @@ INSERT INTO t2 VALUES('mariadb'); connection default; SET @saved_dbug = @@GLOBAL.debug_dbug; SET GLOBAL debug_dbug ='+d,fts_instrument_sync_request,ib_optimize_wq_hang'; -SET DEBUG_SYNC= 'fts_sync_end +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL drop_index_start WAIT_FOR sync_op'; send INSERT INTO t1 VALUES('Keyword'); diff --git a/mysql-test/suite/innodb_fts/t/sync.test b/mysql-test/suite/innodb_fts/t/sync.test index 7c5c835f2ee..168309a5c92 100644 --- a/mysql-test/suite/innodb_fts/t/sync.test +++ b/mysql-test/suite/innodb_fts/t/sync.test @@ -27,7 +27,7 @@ connection con1; SET @old_dbug = @@SESSION.debug_dbug; SET debug_dbug = '+d,fts_instrument_sync_debug'; -SET DEBUG_SYNC= 'fts_sync_end SIGNAL written WAIT_FOR selected'; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR selected'; send INSERT INTO t1(title) VALUES('mysql database'); @@ -74,7 +74,7 @@ connection con1; SET debug_dbug = '+d,fts_instrument_sync_debug'; -SET DEBUG_SYNC= 'fts_sync_end SIGNAL written WAIT_FOR inserted'; +SET DEBUG_SYNC= 'fts_write_node SIGNAL written WAIT_FOR inserted'; send INSERT INTO t1(title) VALUES('mysql database'); diff --git a/mysql-test/suite/innodb_fts/t/sync_block.test b/mysql-test/suite/innodb_fts/t/sync_block.test new file mode 100644 index 00000000000..895d2ba8a59 --- /dev/null +++ b/mysql-test/suite/innodb_fts/t/sync_block.test @@ -0,0 +1,124 @@ +# +# BUG#22516559 MYSQL INSTANCE STALLS WHEN SYNCING FTS INDEX +# + +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/have_log_bin.inc +--source include/count_sessions.inc + +SET @old_log_output = @@global.log_output; +SET @old_slow_query_log = @@global.slow_query_log; +SET @old_general_log = @@global.general_log; +SET @old_long_query_time = @@global.long_query_time; +SET @old_debug = @@global.debug_dbug; + +SET GLOBAL log_output = 'TABLE'; +SET GLOBAL general_log = 1; +SET GLOBAL slow_query_log = 1; +SET GLOBAL long_query_time = 1; + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +connection default; + +--echo # Case 1: Sync blocks DML(insert) on the same table. +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +connection con1; + +SET GLOBAL debug_dbug='+d,fts_instrument_sync_debug,fts_instrument_sync_sleep'; + +SET DEBUG_SYNC= 'fts_sync_begin SIGNAL begin WAIT_FOR continue'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection con2; + +SET DEBUG_SYNC= 'now WAIT_FOR begin'; + +send SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); + +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +connection con2; +--echo /* conneciton con2 */ SELECT * FROM t1 WHERE MATCH(title) AGAINST('mysql database'); +--reap + +connection default; +-- echo # make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +-- echo # slow log results should only contain INSERT INTO t1. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; + +SET GLOBAL debug_dbug = @old_debug; +TRUNCATE TABLE mysql.slow_log; + +DROP TABLE t1; + +--echo # Case 2: Sync blocks DML(insert) on other tables. +CREATE TABLE t1 ( + FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), + FULLTEXT(title) +) ENGINE = InnoDB; + +CREATE TABLE t2(id INT); + +connection con1; + +SET GLOBAL debug_dbug='+d,fts_instrument_sync_request,fts_instrument_sync_sleep'; + +SET DEBUG_SYNC= 'fts_instrument_sync_request SIGNAL begin WAIT_FOR continue'; + +send INSERT INTO t1(title) VALUES('mysql database'); + +connection con2; + +SET DEBUG_SYNC= 'now WAIT_FOR begin'; + +send INSERT INTO t2 VALUES(1); + +connection default; +SET DEBUG_SYNC= 'now SIGNAL continue'; + +connection con1; +--echo /* connection con1 */ INSERT INTO t1(title) VALUES('mysql database'); +--reap + +connection con2; +--echo /* conneciton con2 */ INSERT INTO t2 VALUES(1); +--reap + +connection default; +SET DEBUG_SYNC = 'RESET'; +-- echo # make con1 & con2 show up in mysql.slow_log +SELECT SLEEP(2); +-- echo # slow log results should be empty here. +SELECT sql_text FROM mysql.slow_log WHERE query_time >= '00:00:02'; + +SET GLOBAL debug_dbug = @old_debug; +TRUNCATE TABLE mysql.slow_log; + +DROP TABLE t1,t2; + +disconnect con1; +disconnect con2; + +--source include/wait_until_count_sessions.inc + +-- echo # Restore slow log settings. +SET GLOBAL log_output = @old_log_output; +SET GLOBAL general_log = @old_general_log; +SET GLOBAL slow_query_log = @old_slow_query_log; +SET GLOBAL long_query_time = @old_long_query_time; diff --git a/mysql-test/suite/mariabackup/aria_log_dir_path.result b/mysql-test/suite/mariabackup/aria_log_dir_path.result new file mode 100644 index 00000000000..1a877321bbe --- /dev/null +++ b/mysql-test/suite/mariabackup/aria_log_dir_path.result @@ -0,0 +1,41 @@ +# +# MDEV-30968 mariadb-backup does not copy Aria logs if aria_log_dir_path is used +# +# Restart mariadbd with the test specific parameters +# restart: --aria-log-file-size=8388608 --aria-log-purge-type=external --loose-aria-log-dir-path=MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path +# Create and populate an Aria table (and Aria logs) +CREATE TABLE t1 (id INT, txt LONGTEXT) ENGINE=Aria; +BEGIN NOT ATOMIC +FOR id IN 0..9 DO +INSERT INTO test.t1 (id, txt) VALUES (id, REPEAT(id,1024*1024)); +END FOR; +END; +$$ +# Testing aria log files before --backup +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +SHOW ENGINE aria logs; +Type Name Status +Aria aria_log.00000001 free +Aria aria_log.00000002 in use +# mariadb-backup --backup +# mariadb-backup --prepare +# shutdown server +# remove datadir +# remove aria-log-dir-path +# mariadb-backup --copy-back +# with parameters: --defaults-file=MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=MYSQLTEST_VARDIR/mysqld.1/data/ --target-dir=MYSQLTEST_VARDIR/tmp/backup --parallel=2 --throttle=1 --aria-log-dir-path=MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path +# starting server +# restart: --aria-log-file-size=8388608 --aria-log-purge-type=external --loose-aria-log-dir-path=MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path +# Check that the table is there after --copy-back +SELECT COUNT(*) from t1; +COUNT(*) +10 +DROP TABLE t1; +# Testing aria log files after --copy-back +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +SHOW ENGINE aria logs; +Type Name Status +Aria aria_log.00000001 free +Aria aria_log.00000002 in use +# Restarting mariadbd with default parameters +# restart diff --git a/mysql-test/suite/mariabackup/aria_log_dir_path.test b/mysql-test/suite/mariabackup/aria_log_dir_path.test new file mode 100644 index 00000000000..0178cd4eae5 --- /dev/null +++ b/mysql-test/suite/mariabackup/aria_log_dir_path.test @@ -0,0 +1,105 @@ +--source include/have_maria.inc + +--echo # +--echo # MDEV-30968 mariadb-backup does not copy Aria logs if aria_log_dir_path is used +--echo # + +--let $datadir=`SELECT @@datadir` +--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup + +if ($ARIA_LOGDIR_MARIADB == '') +{ + --let $ARIA_LOGDIR_MARIADB=$MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path +} + +if ($ARIA_LOGDIR_FS == '') +{ + --let $ARIA_LOGDIR_FS=$MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path +} + +--let $server_parameters=--aria-log-file-size=8388608 --aria-log-purge-type=external --loose-aria-log-dir-path=$ARIA_LOGDIR_MARIADB + + +--echo # Restart mariadbd with the test specific parameters +--mkdir $ARIA_LOGDIR_FS +--let $restart_parameters=$server_parameters +--source include/restart_mysqld.inc + + +--echo # Create and populate an Aria table (and Aria logs) +CREATE TABLE t1 (id INT, txt LONGTEXT) ENGINE=Aria; +DELIMITER $$; +BEGIN NOT ATOMIC + FOR id IN 0..9 DO + INSERT INTO test.t1 (id, txt) VALUES (id, REPEAT(id,1024*1024)); + END FOR; +END; +$$ +DELIMITER ;$$ + + +--echo # Testing aria log files before --backup +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +--file_exists $ARIA_LOGDIR_FS/aria_log_control +--file_exists $ARIA_LOGDIR_FS/aria_log.00000001 +--file_exists $ARIA_LOGDIR_FS/aria_log.00000002 +--error 1 +--file_exists $ARIA_LOGDIR_FS/aria_log.00000003 +--replace_regex /Size +[0-9]+ ; .+aria_log/aria_log/ +SHOW ENGINE aria logs; + + +--echo # mariadb-backup --backup +--disable_result_log +--mkdir $targetdir +--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir +--enable_result_log + + +--echo # mariadb-backup --prepare +--disable_result_log +--exec $XTRABACKUP --prepare --target-dir=$targetdir +--enable_result_log + + +--echo # shutdown server +--disable_result_log +--source include/shutdown_mysqld.inc +--echo # remove datadir +--rmdir $datadir +--echo # remove aria-log-dir-path +--rmdir $ARIA_LOGDIR_FS + +--echo # mariadb-backup --copy-back +--let $mariadb_backup_parameters=--defaults-file=$MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=$datadir --target-dir=$targetdir --parallel=2 --throttle=1 --aria-log-dir-path=$ARIA_LOGDIR_MARIADB +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec echo "# with parameters: $mariadb_backup_parameters" +--exec $XTRABACKUP $mariadb_backup_parameters + +--echo # starting server +--let $restart_parameters=$server_parameters +--source include/start_mysqld.inc +--enable_result_log +--rmdir $targetdir + + +--echo # Check that the table is there after --copy-back +SELECT COUNT(*) from t1; +DROP TABLE t1; + + +--echo # Testing aria log files after --copy-back +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +--file_exists $ARIA_LOGDIR_FS/aria_log_control +--file_exists $ARIA_LOGDIR_FS/aria_log.00000001 +--file_exists $ARIA_LOGDIR_FS/aria_log.00000002 +--error 1 +--file_exists $ARIA_LOGDIR_FS/aria_log.00000003 +--replace_regex /Size +[0-9]+ ; .+aria_log/aria_log/ +SHOW ENGINE aria logs; + + +--echo # Restarting mariadbd with default parameters +--let $restart_parameters= +--source include/restart_mysqld.inc +--rmdir $ARIA_LOGDIR_FS diff --git a/mysql-test/suite/mariabackup/aria_log_dir_path_rel.result b/mysql-test/suite/mariabackup/aria_log_dir_path_rel.result new file mode 100644 index 00000000000..7fef26096e0 --- /dev/null +++ b/mysql-test/suite/mariabackup/aria_log_dir_path_rel.result @@ -0,0 +1,41 @@ +# +# MDEV-30968 mariadb-backup does not copy Aria logs if aria_log_dir_path is used +# +# Restart mariadbd with the test specific parameters +# restart: --aria-log-file-size=8388608 --aria-log-purge-type=external --loose-aria-log-dir-path=../../tmp/backup_aria_log_dir_path_rel +# Create and populate an Aria table (and Aria logs) +CREATE TABLE t1 (id INT, txt LONGTEXT) ENGINE=Aria; +BEGIN NOT ATOMIC +FOR id IN 0..9 DO +INSERT INTO test.t1 (id, txt) VALUES (id, REPEAT(id,1024*1024)); +END FOR; +END; +$$ +# Testing aria log files before --backup +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +SHOW ENGINE aria logs; +Type Name Status +Aria aria_log.00000001 free +Aria aria_log.00000002 in use +# mariadb-backup --backup +# mariadb-backup --prepare +# shutdown server +# remove datadir +# remove aria-log-dir-path +# mariadb-backup --copy-back +# with parameters: --defaults-file=MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=MYSQLTEST_VARDIR/mysqld.1/data/ --target-dir=MYSQLTEST_VARDIR/tmp/backup --parallel=2 --throttle=1 --aria-log-dir-path=../../tmp/backup_aria_log_dir_path_rel +# starting server +# restart: --aria-log-file-size=8388608 --aria-log-purge-type=external --loose-aria-log-dir-path=../../tmp/backup_aria_log_dir_path_rel +# Check that the table is there after --copy-back +SELECT COUNT(*) from t1; +COUNT(*) +10 +DROP TABLE t1; +# Testing aria log files after --copy-back +SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/; +SHOW ENGINE aria logs; +Type Name Status +Aria aria_log.00000001 free +Aria aria_log.00000002 in use +# Restarting mariadbd with default parameters +# restart diff --git a/mysql-test/suite/mariabackup/aria_log_dir_path_rel.test b/mysql-test/suite/mariabackup/aria_log_dir_path_rel.test new file mode 100644 index 00000000000..c8169959929 --- /dev/null +++ b/mysql-test/suite/mariabackup/aria_log_dir_path_rel.test @@ -0,0 +1,4 @@ +--let $ARIA_LOGDIR_MARIADB=../../tmp/backup_aria_log_dir_path_rel +--let $ARIA_LOGDIR_FS=$MYSQLTEST_VARDIR/tmp/backup_aria_log_dir_path_rel + +--source aria_log_dir_path.test diff --git a/mysql-test/suite/rpl/r/rpl_xa_prepare_gtid_fail.result b/mysql-test/suite/rpl/r/rpl_xa_prepare_gtid_fail.result new file mode 100644 index 00000000000..f3fecbda349 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_xa_prepare_gtid_fail.result @@ -0,0 +1,51 @@ +include/master-slave.inc +[connection master] +connection slave; +include/stop_slave.inc +change master to master_use_gtid=slave_pos; +set @@global.slave_parallel_threads= 4; +set @@global.slave_parallel_mode= optimistic; +set @@global.gtid_strict_mode=ON; +set sql_log_bin= 0; +alter table mysql.gtid_slave_pos engine=innodb; +call mtr.add_suppression("Deadlock found.*"); +set sql_log_bin= 1; +include/start_slave.inc +connection master; +create table t1 (a int primary key, b int) engine=innodb; +insert t1 values (1,1); +include/save_master_gtid.inc +connection slave; +include/sync_with_master_gtid.inc +include/stop_slave.inc +set @@global.innodb_lock_wait_timeout= 1; +connection master; +set @@session.gtid_seq_no=100; +xa start '1'; +update t1 set b=b+10 where a=1; +xa end '1'; +xa prepare '1'; +xa commit '1'; +include/save_master_gtid.inc +connection slave; +connection slave1; +BEGIN; +SELECT * FROM mysql.gtid_slave_pos WHERE seq_no=100 FOR UPDATE; +domain_id sub_id server_id seq_no +connection slave; +include/start_slave.inc +include/wait_for_slave_sql_error.inc [errno=1942,1213] +connection slave1; +ROLLBACK; +# Cleanup +connection master; +drop table t1; +connection slave; +include/stop_slave.inc +set @@global.gtid_slave_pos= "0-1-100"; +set @@global.slave_parallel_threads= 0; +set @@global.gtid_strict_mode= 0; +set @@global.innodb_lock_wait_timeout= 50; +include/start_slave.inc +include/rpl_end.inc +# End of rpl_xa_prepare_gtid_fail.test diff --git a/mysql-test/suite/rpl/t/rpl_xa_prepare_gtid_fail.test b/mysql-test/suite/rpl/t/rpl_xa_prepare_gtid_fail.test new file mode 100644 index 00000000000..8042b355754 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_xa_prepare_gtid_fail.test @@ -0,0 +1,106 @@ +# +# When handling the replication of an XA PREPARE, the commit phase is +# bifurcated. First, the prepare is handled by the relevant storage engines. +# Then second,the GTID slave state is updated as a separate autocommit +# transaction. If the second stage fails, i.e. we are unable to update the +# GTID slave state, then the slave should immediately quit in error, without +# retry. +# +# This tests validates the above behavior by simulating a deadlock on the +# GTID slave state table during the second part of XA PREPARE's commit, to +# ensure that the appropriate error is reported and the transaction was never +# retried. +# +# +# References +# MDEV-31038: Parallel Replication Breaks if XA PREPARE Fails Updating Slave +# GTID State +# +source include/master-slave.inc; +source include/have_binlog_format_row.inc; +source include/have_innodb.inc; + +--connection slave +--source include/stop_slave.inc + +--let $save_par_thds= `SELECT @@global.slave_parallel_threads` +--let $save_strict_mode= `SELECT @@global.gtid_strict_mode` +--let $save_innodb_lock_wait_timeout= `SELECT @@global.innodb_lock_wait_timeout` + +change master to master_use_gtid=slave_pos; +set @@global.slave_parallel_threads= 4; +set @@global.slave_parallel_mode= optimistic; +set @@global.gtid_strict_mode=ON; + +set sql_log_bin= 0; +alter table mysql.gtid_slave_pos engine=innodb; +call mtr.add_suppression("Deadlock found.*"); +set sql_log_bin= 1; +--source include/start_slave.inc + +--connection master +let $datadir= `select @@datadir`; +create table t1 (a int primary key, b int) engine=innodb; +insert t1 values (1,1); +--source include/save_master_gtid.inc + +--connection slave +--source include/sync_with_master_gtid.inc +--source include/stop_slave.inc +set @@global.innodb_lock_wait_timeout= 1; + +--let $retried_tx_initial= query_get_value(SHOW ALL SLAVES STATUS, Retried_transactions, 1) + +--connection master +--let $gtid_domain_id=`SELECT @@GLOBAL.gtid_domain_id` +--let $gtid_server_id=`SELECT @@GLOBAL.server_id` +--let $xap_seq_no=100 +--eval set @@session.gtid_seq_no=$xap_seq_no +xa start '1'; +update t1 set b=b+10 where a=1; +xa end '1'; +xa prepare '1'; +--let $new_gtid= `SELECT @@global.gtid_binlog_pos` +xa commit '1'; +--source include/save_master_gtid.inc + + +--connection slave + +#--eval set statement sql_log_bin=0 for insert into mysql.gtid_slave_pos values ($gtid_domain_id, 5, $gtid_server_id, $xap_seq_no) + +--connection slave1 +BEGIN; +--eval SELECT * FROM mysql.gtid_slave_pos WHERE seq_no=$xap_seq_no FOR UPDATE + +--connection slave +--source include/start_slave.inc + +--let $slave_sql_errno= 1942,1213 +--source include/wait_for_slave_sql_error.inc + +--let $retried_tx_test= query_get_value(SHOW ALL SLAVES STATUS, Retried_transactions, 1) +if ($retried_tx_initial != $retried_tx_test) +{ + --echo Transaction was retried when a failed XA PREPARE slave GTID update should lead to immediate slave stop without retry + --die Transaction was retried when a failed XA PREPARE slave GTID update should lead to immediate slave stop without retry +} + +--connection slave1 +ROLLBACK; + +--echo # Cleanup + +--connection master +drop table t1; + +--connection slave +--source include/stop_slave.inc +--eval set @@global.gtid_slave_pos= "$new_gtid" +--eval set @@global.slave_parallel_threads= $save_par_thds +--eval set @@global.gtid_strict_mode= $save_strict_mode +--eval set @@global.innodb_lock_wait_timeout= $save_innodb_lock_wait_timeout +--source include/start_slave.inc + +--source include/rpl_end.inc +--echo # End of rpl_xa_prepare_gtid_fail.test diff --git a/mysql-test/suite/sys_vars/r/character_set_client_basic.result b/mysql-test/suite/sys_vars/r/character_set_client_basic.result index d62d88027c7..14c8bcfd058 100644 --- a/mysql-test/suite/sys_vars/r/character_set_client_basic.result +++ b/mysql-test/suite/sys_vars/r/character_set_client_basic.result @@ -500,5 +500,16 @@ res # SET GLOBAL character_set_client=2; ERROR 42000: Unknown character set: '2' +# +# MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +# +SET @@pseudo_slave_mode=1; +SET character_set_client=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_client'; +Variable_name Value +character_set_client latin2 +SET @@pseudo_slave_mode=0; +Warnings: +Warning 1231 Slave applier execution mode not active, statement ineffective. SET @@global.character_set_client = @global_start_value; SET @@session.character_set_client = @session_start_value; diff --git a/mysql-test/suite/sys_vars/r/character_set_connection_basic.result b/mysql-test/suite/sys_vars/r/character_set_connection_basic.result index e356d62ed2b..bbb4f4e5f75 100644 --- a/mysql-test/suite/sys_vars/r/character_set_connection_basic.result +++ b/mysql-test/suite/sys_vars/r/character_set_connection_basic.result @@ -494,5 +494,21 @@ SELECT @@session.character_set_connection = WHERE VARIABLE_NAME='character_set_connection') AS res; res 1 +# +# MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +# +SET character_set_connection=2/*latin2_czech_cs*/; +ERROR 42000: Unknown character set: '2' +SET @@pseudo_slave_mode=1; +SET character_set_connection=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_connection'; +Variable_name Value +character_set_connection latin2 +SHOW VARIABLES LIKE 'collation_connection'; +Variable_name Value +collation_connection latin2_general_ci +SET @@pseudo_slave_mode=0; +Warnings: +Warning 1231 Slave applier execution mode not active, statement ineffective. SET @@global.character_set_connection = @global_start_value; SET @@global.character_set_client = @save_character_set_client; diff --git a/mysql-test/suite/sys_vars/r/character_set_results_basic.result b/mysql-test/suite/sys_vars/r/character_set_results_basic.result index d1c6a52ba17..1346c8b42ca 100644 Binary files a/mysql-test/suite/sys_vars/r/character_set_results_basic.result and b/mysql-test/suite/sys_vars/r/character_set_results_basic.result differ diff --git a/mysql-test/suite/sys_vars/r/character_set_server_basic.result b/mysql-test/suite/sys_vars/r/character_set_server_basic.result index e0a13c729fe..7445be6aef1 100644 --- a/mysql-test/suite/sys_vars/r/character_set_server_basic.result +++ b/mysql-test/suite/sys_vars/r/character_set_server_basic.result @@ -486,5 +486,21 @@ SELECT @@session.character_set_server = WHERE VARIABLE_NAME='character_set_server') AS res; res 1 +# +# MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +# +SET character_set_server=2/*latin2_czech_cs*/; +ERROR 42000: Unknown character set: '2' +SET @@pseudo_slave_mode=1; +SET character_set_server=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_server'; +Variable_name Value +character_set_server latin2 +SHOW VARIABLES LIKE 'collation_server'; +Variable_name Value +collation_server latin2_general_ci +SET @@pseudo_slave_mode=0; +Warnings: +Warning 1231 Slave applier execution mode not active, statement ineffective. SET @@global.character_set_server = @global_start_value; SET @@session.character_set_server = @session_start_value; diff --git a/mysql-test/suite/sys_vars/t/character_set_client_basic.test b/mysql-test/suite/sys_vars/t/character_set_client_basic.test index 09f758a0316..44c0d240a9d 100644 --- a/mysql-test/suite/sys_vars/t/character_set_client_basic.test +++ b/mysql-test/suite/sys_vars/t/character_set_client_basic.test @@ -350,6 +350,15 @@ SELECT @@session.character_set_client = --error ER_UNKNOWN_CHARACTER_SET SET GLOBAL character_set_client=2; +--echo # +--echo # MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +--echo # + +SET @@pseudo_slave_mode=1; +SET character_set_client=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_client'; +SET @@pseudo_slave_mode=0; + #################################### # Restore initial value # #################################### diff --git a/mysql-test/suite/sys_vars/t/character_set_connection_basic.test b/mysql-test/suite/sys_vars/t/character_set_connection_basic.test index 3d9094fca04..46bdfcb52e2 100644 --- a/mysql-test/suite/sys_vars/t/character_set_connection_basic.test +++ b/mysql-test/suite/sys_vars/t/character_set_connection_basic.test @@ -275,6 +275,19 @@ SELECT @@session.character_set_connection = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='character_set_connection') AS res; +--echo # +--echo # MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +--echo # + +--error ER_UNKNOWN_CHARACTER_SET +SET character_set_connection=2/*latin2_czech_cs*/; +SET @@pseudo_slave_mode=1; +SET character_set_connection=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_connection'; +SHOW VARIABLES LIKE 'collation_connection'; +SET @@pseudo_slave_mode=0; + + #################################### # Restore initial value # #################################### diff --git a/mysql-test/suite/sys_vars/t/character_set_results_basic.test b/mysql-test/suite/sys_vars/t/character_set_results_basic.test index 617332b9780..41090be6657 100644 --- a/mysql-test/suite/sys_vars/t/character_set_results_basic.test +++ b/mysql-test/suite/sys_vars/t/character_set_results_basic.test @@ -272,6 +272,18 @@ SELECT @@session.character_set_results = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='character_set_results') AS res; +--echo # +--echo # MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +--echo # + +--error ER_UNKNOWN_CHARACTER_SET +SET character_set_results=2/*latin2_czech_cs*/; +SET @@pseudo_slave_mode=1; +SET character_set_results=2; +SHOW VARIABLES LIKE 'character_set_results'; +SET @@pseudo_slave_mode=0; + + #################################### # Restore initial value # #################################### diff --git a/mysql-test/suite/sys_vars/t/character_set_server_basic.test b/mysql-test/suite/sys_vars/t/character_set_server_basic.test index b2f4788fdae..929dbfaf143 100644 --- a/mysql-test/suite/sys_vars/t/character_set_server_basic.test +++ b/mysql-test/suite/sys_vars/t/character_set_server_basic.test @@ -266,6 +266,18 @@ SELECT @@session.character_set_server = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='character_set_server') AS res; +--echo # +--echo # MDEV-31018 Replica of 10.3, 10.4, <10.5.19 and <10.6.12 to 10.11 will not work when using non-default charset +--echo # + +--error ER_UNKNOWN_CHARACTER_SET +SET character_set_server=2/*latin2_czech_cs*/; +SET @@pseudo_slave_mode=1; +SET character_set_server=2/*latin2_czech_cs*/; +SHOW VARIABLES LIKE 'character_set_server'; +SHOW VARIABLES LIKE 'collation_server'; +SET @@pseudo_slave_mode=0; + #################################### # Restore initial value # #################################### diff --git a/scripts/wsrep_sst_mariabackup.sh b/scripts/wsrep_sst_mariabackup.sh index 6ec975f5a59..d6334052f24 100644 --- a/scripts/wsrep_sst_mariabackup.sh +++ b/scripts/wsrep_sst_mariabackup.sh @@ -340,6 +340,9 @@ get_transfer() "Use workaround for socat $SOCAT_VERSION bug" fi fi + if check_for_version "$SOCAT_VERSION" '1.7.4'; then + tcmd="$tcmd,no-sni=1" + fi fi if [ "${sockopt#*,dhparam=}" = "$sockopt" ]; then diff --git a/sql/handler.cc b/sql/handler.cc index df18792d2e6..a50cdeaf9dd 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1863,7 +1863,19 @@ int ha_commit_trans(THD *thd, bool all) ordering is normally done. Commit ordering must be done here. */ if (run_wsrep_hooks) - error= wsrep_before_commit(thd, all); + { + // This commit involves more than one storage engine and requires + // two phases, but some engines don't support it. + // Issue a message to the client and roll back the transaction. + if (trans->no_2pc && rw_ha_count > 1) + { + my_message(ER_ERROR_DURING_COMMIT, "Transactional commit not supported " + "by involved engine(s)", MYF(0)); + error= 1; + } + else + error= wsrep_before_commit(thd, all); + } if (error) { ha_rollback_trans(thd, FALSE); @@ -2201,8 +2213,11 @@ int ha_rollback_trans(THD *thd, bool all) rollback without signalling following transactions. And in release builds, we explicitly do the signalling before rolling back. */ - DBUG_ASSERT(!(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit) || - thd->transaction->xid_state.is_explicit_XA()); + DBUG_ASSERT( + !(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit) || + (thd->transaction->xid_state.is_explicit_XA() || + (thd->rgi_slave->gtid_ev_flags2 & Gtid_log_event::FL_PREPARED_XA))); + if (thd->rgi_slave && thd->rgi_slave->did_mark_start_commit) thd->rgi_slave->unmark_start_commit(); } @@ -7370,7 +7385,13 @@ static int wsrep_after_row(THD *thd) thd->wsrep_affected_rows > wsrep_max_ws_rows && wsrep_thd_is_local(thd)) { - trans_rollback_stmt(thd) || trans_rollback(thd); + /* + If we are inside stored function or trigger we should not commit or + rollback current statement transaction. See comment in ha_commit_trans() + call for more information. + */ + if (!thd->in_sub_stmt) + trans_rollback_stmt(thd) || trans_rollback(thd); my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0)); DBUG_RETURN(ER_ERROR_DURING_COMMIT); } diff --git a/sql/log.cc b/sql/log.cc index 48e5145210c..052ca1d5275 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -418,7 +418,7 @@ private: Rows_log_event *m_pending; /* - Bit flags for what has been writting to cache. Used to + Bit flags for what has been writing to cache. Used to discard logs without any data changes. see enum_logged_status; */ diff --git a/sql/log_event.h b/sql/log_event.h index 6b8853493be..41989192b53 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -721,7 +721,7 @@ enum Log_event_type /* - Bit flags for what has been writting to cache. Used to + Bit flags for what has been writing to cache. Used to discard logs with table map events but not row events and nothing else important. This is stored by cache. */ @@ -2716,7 +2716,7 @@ private: virtual int do_commit()= 0; virtual int do_apply_event(rpl_group_info *rgi); int do_record_gtid(THD *thd, rpl_group_info *rgi, bool in_trans, - void **out_hton); + void **out_hton, bool force_err= false); enum_skip_reason do_shall_skip(rpl_group_info *rgi); virtual const char* get_query()= 0; #endif diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc index 051fe529c7b..bb9608b37e6 100644 --- a/sql/log_event_server.cc +++ b/sql/log_event_server.cc @@ -153,6 +153,30 @@ is_parallel_retry_error(rpl_group_info *rgi, int err) return has_temporary_error(rgi->thd); } +/** + Accumulate a Diagnostics_area's errors and warnings into an output buffer + + @param errbuf The output buffer to write error messages + @param errbuf_size The size of the output buffer + @param da The Diagnostics_area to check for errors +*/ +static void inline aggregate_da_errors(char *errbuf, size_t errbuf_size, + Diagnostics_area *da) +{ + const char *errbuf_end= errbuf + errbuf_size; + char *slider; + Diagnostics_area::Sql_condition_iterator it= da->sql_conditions(); + const Sql_condition *err; + size_t len; + for (err= it++, slider= errbuf; err && slider < errbuf_end - 1; + slider += len, err= it++) + { + len= my_snprintf(slider, errbuf_end - slider, + " %s, Error_code: %d;", err->get_message_text(), + err->get_sql_errno()); + } +} + /** Error reporting facility for Rows_log_event::do_apply_event @@ -173,13 +197,8 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error, const char *log_name, my_off_t pos) { const char *handler_error= (ha_error ? HA_ERR(ha_error) : NULL); - char buff[MAX_SLAVE_ERRMSG], *slider; - const char *buff_end= buff + sizeof(buff); - size_t len; - Diagnostics_area::Sql_condition_iterator it= - thd->get_stmt_da()->sql_conditions(); + char buff[MAX_SLAVE_ERRMSG]; Relay_log_info const *rli= rgi->rli; - const Sql_condition *err; buff[0]= 0; int errcode= thd->is_error() ? thd->get_stmt_da()->sql_errno() : 0; @@ -192,13 +211,7 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error, if (is_parallel_retry_error(rgi, errcode)) return; - for (err= it++, slider= buff; err && slider < buff_end - 1; - slider += len, err= it++) - { - len= my_snprintf(slider, buff_end - slider, - " %s, Error_code: %d;", err->get_message_text(), - err->get_sql_errno()); - } + aggregate_da_errors(buff, sizeof(buff), thd->get_stmt_da()); if (ha_error != 0 && !thd->killed) rli->report(level, errcode, rgi->gtid_info(), @@ -3571,7 +3584,8 @@ bool slave_execute_deferred_events(THD *thd) #if defined(HAVE_REPLICATION) int Xid_apply_log_event::do_record_gtid(THD *thd, rpl_group_info *rgi, - bool in_trans, void **out_hton) + bool in_trans, void **out_hton, + bool force_err) { int err= 0; Relay_log_info const *rli= rgi->rli; @@ -3586,14 +3600,26 @@ int Xid_apply_log_event::do_record_gtid(THD *thd, rpl_group_info *rgi, int ec= thd->get_stmt_da()->sql_errno(); /* Do not report an error if this is really a kill due to a deadlock. - In this case, the transaction will be re-tried instead. + In this case, the transaction will be re-tried instead. Unless force_err + is set, as in the case of XA PREPARE, as the GTID state is updated as a + separate transaction, and if that fails, we should not retry but exit in + error immediately. */ - if (!is_parallel_retry_error(rgi, ec)) + if (!is_parallel_retry_error(rgi, ec) || force_err) + { + char buff[MAX_SLAVE_ERRMSG]; + buff[0]= 0; + aggregate_da_errors(buff, sizeof(buff), thd->get_stmt_da()); + + if (force_err) + thd->clear_error(); + rli->report(ERROR_LEVEL, ER_CANNOT_UPDATE_GTID_STATE, rgi->gtid_info(), "Error during XID COMMIT: failed to update GTID state in " - "%s.%s: %d: %s", + "%s.%s: %d: %s the event's master log %s, end_log_pos %llu", "mysql", rpl_gtid_slave_state_table_name.str, ec, - thd->get_stmt_da()->message()); + buff, RPL_LOG_NAME, log_pos); + } thd->is_slave_error= 1; } @@ -3667,7 +3693,7 @@ int Xid_apply_log_event::do_apply_event(rpl_group_info *rgi) { DBUG_ASSERT(!thd->transaction->xid_state.is_explicit_XA()); - if ((err= do_record_gtid(thd, rgi, false, &hton))) + if ((err= do_record_gtid(thd, rgi, false, &hton, true))) return err; } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 12dd3639365..27cfdb93cc0 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4702,7 +4702,10 @@ static void init_ssl() { sql_print_error("Failed to setup SSL"); sql_print_error("SSL error: %s", sslGetErrString(error)); - unireg_abort(1); + if (!opt_bootstrap) + unireg_abort(1); + opt_use_ssl = 0; + have_ssl= SHOW_OPTION_DISABLED; } else ssl_acceptor_stats.init(); diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 02b5770aa8c..4cbf618e045 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -464,7 +464,7 @@ void print_range_for_non_indexed_field(String *out, Field *field, static void print_min_range_operator(String *out, const ha_rkey_function flag); static void print_max_range_operator(String *out, const ha_rkey_function flag); -static bool is_field_an_unique_index(RANGE_OPT_PARAM *param, Field *field); +static bool is_field_an_unique_index(Field *field); /* SEL_IMERGE is a list of possible ways to do index merge, i.e. it is @@ -3690,7 +3690,10 @@ end_of_range_loop: } else { + enum_check_fields save_count_cuted_fields= thd->count_cuted_fields; + thd->count_cuted_fields= CHECK_FIELD_IGNORE; rows= records_in_column_ranges(¶m, idx, key); + thd->count_cuted_fields= save_count_cuted_fields; if (rows != DBL_MAX) { key->field->cond_selectivity= rows/table_records; @@ -8039,8 +8042,13 @@ SEL_TREE *Item_func_ne::get_func_mm_tree(RANGE_OPT_PARAM *param, If this condition is a "col1<>...", where there is a UNIQUE KEY(col1), do not construct a SEL_TREE from it. A condition that excludes just one row in the table is not selective (unless there are only a few rows) + + Note: this logic must be in sync with code in + check_group_min_max_predicates(). That function walks an Item* condition + and checks if the range optimizer would produce an equivalent range for + it. */ - if (is_field_an_unique_index(param, field)) + if (param->using_real_indexes && is_field_an_unique_index(field)) DBUG_RETURN(NULL); DBUG_RETURN(get_ne_mm_tree(param, field, value, value)); } @@ -8152,7 +8160,7 @@ SEL_TREE *Item_func_in::get_func_mm_tree(RANGE_OPT_PARAM *param, - if there are a lot of constants, the overhead of building and processing enormous range list is not worth it. */ - if (is_field_an_unique_index(param, field)) + if (param->using_real_indexes && is_field_an_unique_index(field)) DBUG_RETURN(0); /* Get a SEL_TREE for "(-inf|NULL) < X < c_0" interval. */ @@ -8861,24 +8869,18 @@ SEL_TREE *Item_equal::get_mm_tree(RANGE_OPT_PARAM *param, Item **cond_ptr) In the future we could also add "almost unique" indexes where any value is present only in a few rows (but necessarily exactly one row) */ -static bool is_field_an_unique_index(RANGE_OPT_PARAM *param, Field *field) +static bool is_field_an_unique_index(Field *field) { DBUG_ENTER("is_field_an_unique_index"); - - // The check for using_real_indexes is there because of the heuristics - // this function is used for. - if (param->using_real_indexes) + key_map::Iterator it(field->key_start); + uint key_no; + while ((key_no= it++) != key_map::Iterator::BITMAP_END) { - key_map::Iterator it(field->key_start); - uint key_no; - while ((key_no= it++) != key_map::Iterator::BITMAP_END) + KEY *key_info= &field->table->key_info[key_no]; + if (key_info->user_defined_key_parts == 1 && + (key_info->flags & HA_NOSAME)) { - KEY *key_info= &field->table->key_info[key_no]; - if (key_info->user_defined_key_parts == 1 && - (key_info->flags & HA_NOSAME)) - { - DBUG_RETURN(true); - } + DBUG_RETURN(true); } } DBUG_RETURN(false); @@ -13894,7 +13896,7 @@ cost_group_min_max(TABLE* table, KEY *index_info, uint used_key_parts, - (C between const_i and const_j) - C IS NULL - C IS NOT NULL - - C != const + - C != const (unless C is the primary key) SA4. If Q has a GROUP BY clause, there are no other aggregate functions except MIN and MAX. For queries with DISTINCT, aggregate functions are allowed. @@ -14846,6 +14848,17 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, if (!simple_pred(pred, args, &inv)) DBUG_RETURN(FALSE); + /* + Follow the logic in Item_func_ne::get_func_mm_tree(): condition + in form "tbl.primary_key <> const" is not used to produce intervals. + + If the condition doesn't have an equivalent interval, this means we + fail LooseScan's condition SA3. Return FALSE to indicate this. + */ + if (pred_type == Item_func::NE_FUNC && + is_field_an_unique_index(min_max_arg_item->field)) + DBUG_RETURN(FALSE); + if (args[0] && args[1]) // this is a binary function or BETWEEN { DBUG_ASSERT(pred->fixed_type_handler()); diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 4d1d6c902f3..4ceebcc1978 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -803,6 +803,9 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived) cursor->outer_join|= JOIN_TYPE_OUTER; } } + // Prevent it for possible ORDER BY clause + if (unit->fake_select_lex) + unit->fake_select_lex->context.outer_context= 0; if (unlikely(thd->trace_started())) { diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 5e65a789f58..80621685ea2 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1336,7 +1336,7 @@ dispatch_command_return do_command(THD *thd, bool blocking) in wsrep_before_command(). */ WSREP_LOG_THD(thd, "enter found BF aborted"); - DBUG_ASSERT(!thd->mdl_context.has_locks()); + DBUG_ASSERT(!thd->mdl_context.has_transactional_locks()); DBUG_ASSERT(!thd->get_stmt_da()->is_set()); /* We let COM_QUIT and COM_STMT_CLOSE to execute even if wsrep aborted. */ if (command == COM_STMT_EXECUTE) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7295b68c2ba..cdf9af40f7a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -30399,7 +30399,7 @@ void st_select_lex::print_item_list(THD *thd, String *str, outer_select() can not be used here because it is for name resolution and will return NULL at any end of name resolution chain (view/derived) */ - bool top_level= (get_master()->get_master() == 0); + bool top_level= (get_master() == &thd->lex->unit); List_iterator_fast it(item_list); Item *item; while ((item= it++)) @@ -30506,7 +30506,7 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type) return; } - bool top_level= (get_master()->get_master() == 0); + bool top_level= (get_master() == &thd->lex->unit); enum explainable_cmd_type sel_type= SELECT_CMD; if (top_level) sel_type= get_explainable_cmd_type(thd); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 26a58e66ffe..8e951bc48de 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -12299,6 +12299,19 @@ bool Sql_cmd_create_table_like::execute(THD *thd) } #endif +#ifdef WITH_WSREP + if (select_lex->item_list.elements && // With SELECT + WSREP(thd) && thd->variables.wsrep_trx_fragment_size > 0) + { + my_message( + ER_NOT_ALLOWED_COMMAND, + "CREATE TABLE AS SELECT is not supported with streaming replication", + MYF(0)); + res= 1; + goto end_with_restore_list; + } +#endif /* WITH_WSREP */ + if (select_lex->item_list.elements || select_lex->tvc) // With select or TVC { select_result *result; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 2927b6ce8de..3aa99bffdba 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -345,9 +345,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); */ %ifdef MARIADB -%expect 82 +%expect 64 %else -%expect 83 +%expect 65 %endif /* @@ -1178,7 +1178,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %left PREC_BELOW_NOT -%nonassoc LOW_PRIORITY_NOT +/* The precendence of boolean NOT is in fact here. See the comment below. */ + %left '=' EQUAL_SYM GE '>' LE '<' NE %nonassoc IS %right BETWEEN_SYM @@ -1190,6 +1191,24 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %left '*' '/' '%' DIV_SYM MOD_SYM %left '^' %left MYSQL_CONCAT_SYM +/* + Boolean negation has a special branch in "expr" starting with NOT_SYM. + The precedence of logical negation is determined by the grammar itself + (without using Bison terminal symbol precedence) in this order + - Boolean factor (i.e. logical AND) + - Boolean NOT + - Boolean test (such as '=', IS NULL, IS TRUE) + + But we also need a precedence for NOT_SYM in other contexts, + to shift (without reduce) in these cases: + predicate NOT IN ... + predicate NOT BETWEEN ... + predicate NOT LIKE ... + predicate NOT REGEXP ... + If the precedence of NOT_SYM was low, it would reduce immediately + after scanning "predicate" and then produce a syntax error on "NOT". +*/ +%nonassoc NOT_SYM %nonassoc NEG '~' NOT2_SYM BINARY %nonassoc COLLATE_SYM %nonassoc SUBQUERY_AS_EXPR @@ -1478,6 +1497,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); literal insert_ident order_ident temporal_literal simple_ident expr sum_expr in_sum_expr variable variable_aux + boolean_test predicate bit_expr parenthesized_expr table_wild simple_expr column_default_non_parenthesized_expr udf_expr primary_expr string_factor_expr mysql_concatenation_expr @@ -9137,79 +9157,83 @@ expr: MYSQL_YYABORT; } } - | NOT_SYM expr %prec LOW_PRIORITY_NOT + | NOT_SYM expr { $$= negate_expression(thd, $2); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS TRUE_SYM %prec IS + | boolean_test %prec PREC_BELOW_NOT + ; + +boolean_test: + boolean_test IS TRUE_SYM %prec IS { $$= new (thd->mem_root) Item_func_istrue(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS not TRUE_SYM %prec IS + | boolean_test IS not TRUE_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnottrue(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS FALSE_SYM %prec IS + | boolean_test IS FALSE_SYM %prec IS { $$= new (thd->mem_root) Item_func_isfalse(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS not FALSE_SYM %prec IS + | boolean_test IS not FALSE_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnotfalse(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS UNKNOWN_SYM %prec IS + | boolean_test IS UNKNOWN_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnull(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS not UNKNOWN_SYM %prec IS + | boolean_test IS not UNKNOWN_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnotnull(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS NULL_SYM %prec PREC_BELOW_NOT + | boolean_test IS NULL_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnull(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr IS not NULL_SYM %prec IS + | boolean_test IS not NULL_SYM %prec IS { $$= new (thd->mem_root) Item_func_isnotnull(thd, $1); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr EQUAL_SYM predicate %prec EQUAL_SYM + | boolean_test EQUAL_SYM predicate %prec EQUAL_SYM { $$= new (thd->mem_root) Item_func_equal(thd, $1, $3); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr comp_op predicate %prec '=' + | boolean_test comp_op predicate %prec '=' { $$= (*$2)(0)->create(thd, $1, $3); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | expr comp_op all_or_any '(' subselect ')' %prec '=' + | boolean_test comp_op all_or_any '(' subselect ')' %prec '=' { $$= all_any_subquery_creator(thd, $1, $2, $3, $5); if (unlikely($$ == NULL)) MYSQL_YYABORT; } - | predicate + | predicate %prec BETWEEN_SYM ; predicate: diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 008339b535b..734af3e45ed 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -804,12 +804,26 @@ static bool check_charset(sys_var *self, THD *thd, set_var *var) { int csno= (int)var->value->val_int(); CHARSET_INFO *cs; - if (!(var->save_result.ptr= cs= get_charset(csno, MYF(0))) || - !(cs->state & MY_CS_PRIMARY)) + if ((var->save_result.ptr= cs= get_charset(csno, MYF(0)))) { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), llstr(csno, buff)); - return true; + /* + Backward compatibility: pre MDEV-30824 servers + can write non-default collation IDs to binary log: + SET character_set_client=83; -- utf8mb3_bin + Convert a non-default collation to the compiled default collation, + e.g. utf8mb3_bin to utf8mb3_general_ci, but only if + - THD is a slave thread or + - is processing a mysqlbinlog output. + */ + if ((cs->state & MY_CS_PRIMARY) || + ((thd->variables.pseudo_slave_mode || thd->slave_thread) && + (var->save_result.ptr= + Lex_exact_charset_opt_extended_collate(cs, true). + find_default_collation()))) + return false; } + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), llstr(csno, buff)); + return true; } return false; } diff --git a/sql/tztime.cc b/sql/tztime.cc index a2add055deb..e77a7529332 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -2435,9 +2435,9 @@ print_tz_as_sql(const char* tz_name, const TIME_ZONE_INFO *sp) #define SAVE_ENGINE(e) \ - "\"select ENGINE into @" e "_engine" \ + "'select ENGINE into @" e "_engine" \ " from information_schema.TABLES" \ - " where TABLE_SCHEMA=DATABASE() and TABLE_NAME='" e "'\"" + " where TABLE_SCHEMA=DATABASE() and TABLE_NAME=''" e "'''" /* Print info about leap seconds in time zone as SQL statements diff --git a/sql/wsrep_client_service.cc b/sql/wsrep_client_service.cc index 628a408b49b..d3b4a18195b 100644 --- a/sql/wsrep_client_service.cc +++ b/sql/wsrep_client_service.cc @@ -374,8 +374,6 @@ int Wsrep_client_service::bf_rollback() m_thd->global_read_lock.unlock_global_read_lock(m_thd); } m_thd->release_transactional_locks(); - mysql_ull_cleanup(m_thd); - m_thd->mdl_context.release_explicit_locks(); } DBUG_RETURN(ret); diff --git a/sql/wsrep_high_priority_service.cc b/sql/wsrep_high_priority_service.cc index d9988914c4d..53ef20f3e78 100644 --- a/sql/wsrep_high_priority_service.cc +++ b/sql/wsrep_high_priority_service.cc @@ -391,8 +391,6 @@ int Wsrep_high_priority_service::rollback(const wsrep::ws_handle& ws_handle, m_thd->killed); m_thd->release_transactional_locks(); - mysql_ull_cleanup(m_thd); - m_thd->mdl_context.release_explicit_locks(); free_root(m_thd->mem_root, MYF(MY_KEEP_PREALLOC)); diff --git a/storage/connect/catalog.h b/storage/connect/catalog.h index 2649a50cf76..a46615f5d6e 100644 --- a/storage/connect/catalog.h +++ b/storage/connect/catalog.h @@ -39,9 +39,9 @@ typedef struct _colinfo { PCSZ Name; int Type; int Offset; - int Length; + unsigned Length; int Key; - int Precision; + unsigned Precision; int Scale; int Opt; int Freq; diff --git a/storage/connect/reldef.cpp b/storage/connect/reldef.cpp index 114071b35fb..9af9faa333a 100644 --- a/storage/connect/reldef.cpp +++ b/storage/connect/reldef.cpp @@ -91,11 +91,11 @@ PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char* tab, char* db, bool info) /* directories are used (to make this even remotely secure). */ /*********************************************************************/ if (check_valid_path(module, strlen(module))) { - strcpy(g->Message, "Module cannot contain a path"); + safe_strcpy(g->Message, sizeof(g->Message), "Module cannot contain a path"); return NULL; } else if (strlen(subtype)+1+3 >= sizeof(getname)) { - strcpy(g->Message, "Subtype string too long"); + safe_strcpy(g->Message, sizeof(g->Message), "Subtype string too long"); return NULL; } else @@ -118,7 +118,8 @@ PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char* tab, char* db, bool info) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, 0, (LPTSTR)buf, sizeof(buf), NULL); - strcat(strcat(g->Message, ": "), buf); + safe_strcat(g->Message, sizeof(g->Message), ": "); + safe_strcat(g->Message, sizeof(g->Message), buf); return NULL; } // endif hDll @@ -281,7 +282,7 @@ char *RELDEF::GetStringCatInfo(PGLOBAL g, PCSZ what, PCSZ sdef) if (IsFileType(GetTypeID(ftype))) { name= Hc->GetPartName(); sval= (char*)PlugSubAlloc(g, NULL, strlen(name) + 12); - strcat(strcpy(sval, name), "."); + snprintf(sval, strlen(name) + 12, "%s.", name); n= strlen(sval); // Fold ftype to lower case @@ -623,12 +624,11 @@ PTABDEF OEMDEF::GetXdef(PGLOBAL g) /* directories are used (to make this even remotely secure). */ /*********************************************************************/ if (check_valid_path(Module, strlen(Module))) { - strcpy(g->Message, "Module cannot contain a path"); + safe_strcpy(g->Message, sizeof(g->Message), "Module cannot contain a path"); return NULL; } else // PlugSetPath(soname, Module, GetPluginDir()); // Crashes on Fedora - strncat(strcpy(soname, GetPluginDir()), Module, - sizeof(soname) - strlen(soname) - 1); + snprintf(soname, sizeof(soname), "%s%s", GetPluginDir(), Module); #if defined(_WIN32) // Is the DLL already loaded? @@ -642,7 +642,8 @@ PTABDEF OEMDEF::GetXdef(PGLOBAL g) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, 0, (LPTSTR)buf, sizeof(buf), NULL); - strcat(strcat(g->Message, ": "), buf); + safe_strcat(g->Message, sizeof(g->Message), ": "); + safe_strcat(g->Message, sizeof(g->Message), buf); return NULL; } // endif hDll @@ -662,7 +663,8 @@ PTABDEF OEMDEF::GetXdef(PGLOBAL g) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, 0, (LPTSTR)buf, sizeof(buf), NULL); - strcat(strcat(g->Message, ": "), buf); + safe_strcat(g->Message, sizeof(g->Message), ": "); + safe_strcat(g->Message, sizeof(g->Message), buf); FreeLibrary((HMODULE)Hdll); return NULL; } // endif getdef @@ -811,7 +813,7 @@ PTDB OEMDEF::GetTable(PGLOBAL g, MODE mode) else txfp = new(g) ZLBFAM(defp); #else // !GZ_SUPPORT - strcpy(g->Message, "Compress not supported"); + safe_strcpy(g->Message, sizeof(g->Message), "Compress not supported"); return NULL; #endif // !GZ_SUPPORT } else if (rfm == RECFM_VAR) { @@ -834,7 +836,7 @@ PTDB OEMDEF::GetTable(PGLOBAL g, MODE mode) else txfp = new(g) VCTFAM((PVCTDEF)defp); #else // !VCT_SUPPORT - strcpy(g->Message, "VCT no more supported"); + safe_strcpy(g->Message, sizeof(g->Message), "VCT no more supported"); return NULL; #endif // !VCT_SUPPORT } // endif's @@ -925,7 +927,7 @@ int COLDEF::Define(PGLOBAL g, void *, PCOLINFO cfp, int poff) return -1; } // endswitch - strcpy(F.Type, GetFormatType(Buf_Type)); + safe_strcpy(F.Type, sizeof(F.Type), GetFormatType(Buf_Type)); F.Length = cfp->Length; F.Prec = cfp->Scale; Offset = (cfp->Offset < 0) ? poff : cfp->Offset; diff --git a/storage/connect/tabbson.cpp b/storage/connect/tabbson.cpp index 4cbb0e44e19..dfaf2284a72 100644 --- a/storage/connect/tabbson.cpp +++ b/storage/connect/tabbson.cpp @@ -39,6 +39,7 @@ #include "checklvl.h" #include "resource.h" #include "mycat.h" // for FNC_COL +#include "m_string.h" /***********************************************************************/ /* This should be an option. */ @@ -80,7 +81,7 @@ PQRYRES BSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) } // endif info if (GetIntegerTableOption(g, topt, "Multiple", 0)) { - strcpy(g->Message, "Cannot find column definition for multiple table"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot find column definition for multiple table"); return NULL; } // endif Multiple @@ -206,7 +207,7 @@ int BSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) tdp->Uri = (dsn && *dsn ? dsn : NULL); if (!tdp->Fn && !tdp->Uri) { - strcpy(g->Message, MSG(MISSING_FNAME)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return 0; } else topt->subtype = NULL; @@ -318,7 +319,7 @@ int BSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) switch (tjnp->ReadDB(g)) { case RC_EF: - strcpy(g->Message, "Void json table"); + safe_strcpy(g->Message, sizeof(g->Message), "Void json table"); case RC_FX: goto err; default: @@ -328,7 +329,7 @@ int BSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) } // endif pretty if (!(row = (jsp) ? bp->GetObject(jsp) : NULL)) { - strcpy(g->Message, "Can only retrieve columns from object rows"); + safe_strcpy(g->Message, sizeof(g->Message), "Can only retrieve columns from object rows"); goto err; } // endif row @@ -405,7 +406,7 @@ bool BSONDISC::Find(PGLOBAL g, PBVAL jvp, PCSZ key, int j) if (jvp && !bp->IsJson(jvp)) { if (JsonAllPath() && !fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); jcol.Type = (JTYP)jvp->Type; @@ -439,7 +440,7 @@ bool BSONDISC::Find(PGLOBAL g, PBVAL jvp, PCSZ key, int j) jcol.Cbn = true; } else if (j < lvl && !Stringified(strfy, colname)) { if (!fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); p = fmt + strlen(fmt); jsp = jvp; @@ -510,11 +511,11 @@ bool BSONDISC::Find(PGLOBAL g, PBVAL jvp, PCSZ key, int j) } else if (lvl >= 0) { if (Stringified(strfy, colname)) { if (!fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); - strcat(fmt, ".*"); + safe_strcat(fmt, sizeof(fmt), ".*"); } else if (JsonAllPath() && !fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); jcol.Type = TYPE_STRG; jcol.Len = sz; @@ -961,7 +962,7 @@ PVAL BCUTIL::ExpandArray(PGLOBAL g, PBVAL arp, int n) } // endif ars if (!(bvp = GetArrayValue(arp, (nodes[n].Rx = nodes[n].Nx)))) { - strcpy(g->Message, "Logical error expanding array"); + safe_strcpy(g->Message, sizeof(g->Message), "Logical error expanding array"); throw 666; } // endif jvp @@ -1146,7 +1147,7 @@ PBVAL BCUTIL::GetRow(PGLOBAL g) } else if (row->Type == TYPE_JAR) { AddArrayValue(row, (nwr = NewVal(type))); } else { - strcpy(g->Message, "Wrong type when writing new row"); + safe_strcpy(g->Message, sizeof(g->Message), "Wrong type when writing new row"); nwr = NULL; } // endif's @@ -1255,7 +1256,7 @@ PTDB BSONDEF::GetTable(PGLOBAL g, MODE m) // Allocate the parse work memory G = PlugInit(NULL, (size_t)Lrecl * (Pretty < 0 ? 3 : 5)); } else { - strcpy(g->Message, "LRECL is not defined"); + safe_strcpy(g->Message, sizeof(g->Message), "LRECL is not defined"); return NULL; } // endif Lrecl @@ -1295,7 +1296,7 @@ PTDB BSONDEF::GetTable(PGLOBAL g, MODE m) } else if (m == MODE_INSERT) { txfp = new(g) ZIPFAM(this); } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's m #else // !ZIP_SUPPORT @@ -1325,10 +1326,10 @@ PTDB BSONDEF::GetTable(PGLOBAL g, MODE m) if (m == MODE_READ || m == MODE_ANY || m == MODE_ALTER) { txfp = new(g) UNZFAM(this); } else if (m == MODE_INSERT) { - strcpy(g->Message, "INSERT supported only for zipped JSON when pretty=0"); + safe_strcpy(g->Message, sizeof(g->Message), "INSERT supported only for zipped JSON when pretty=0"); return NULL; } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's m #else // !ZIP_SUPPORT @@ -1661,7 +1662,7 @@ bool TDBBSN::PrepareWriting(PGLOBAL g) strcat(s, ","); if ((signed)strlen(s) > Lrecl) { - strncpy(To_Line, s, Lrecl); + safe_strcpy(To_Line, Lrecl, s); snprintf(g->Message, sizeof(g->Message), "Line truncated (lrecl=%d)", Lrecl); return PushWarning(g, this); } else @@ -1764,7 +1765,7 @@ bool BSONCOL::CheckExpand(PGLOBAL g, int i, PSZ nm, bool b) Xpd = true; // Expandable object Nodes[i].Op = OP_EXP; } else if (b) { - strcpy(g->Message, "Cannot expand more than one branch"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot expand more than one branch"); return true; } // endif Xcol @@ -1975,7 +1976,7 @@ bool BSONCOL::ParseJpath(PGLOBAL g) if (SetArrayOptions(g, p, i, Nodes[i - 1].Key)) return true; else if (Xpd && Tbp->Mode == MODE_DELETE) { - strcpy(g->Message, "Cannot delete expanded columns"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot delete expanded columns"); return true; } // endif Xpd @@ -2098,7 +2099,7 @@ void BSONCOL::ReadColumn(PGLOBAL g) void BSONCOL::WriteColumn(PGLOBAL g) { if (Xpd && Tbp->Pretty < 2) { - strcpy(g->Message, "Cannot write expanded column when Pretty is not 2"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot write expanded column when Pretty is not 2"); throw 666; } // endif Xpd @@ -2128,7 +2129,7 @@ void BSONCOL::WriteColumn(PGLOBAL g) char *s = Value->GetCharValue(); if (!(jsp = Cp->ParseJson(g, s, strlen(s)))) { - strcpy(g->Message, s); + safe_strcpy(g->Message, sizeof(g->Message), s); throw 666; } // endif jsp @@ -2314,7 +2315,7 @@ int TDBBSON::MakeDocument(PGLOBAL g) if (!a && *p && *p != '[' && !IsNum(p)) { // obj is a key if (jsp->Type != TYPE_JOB) { - strcpy(g->Message, "Table path does not match the json file"); + safe_strcpy(g->Message, sizeof(g->Message), "Table path does not match the json file"); return RC_FX; } // endif Type @@ -2340,7 +2341,7 @@ int TDBBSON::MakeDocument(PGLOBAL g) } // endif p if (jsp->Type != TYPE_JAR) { - strcpy(g->Message, "Table path does not match the json file"); + safe_strcpy(g->Message, sizeof(g->Message), "Table path does not match the json file"); return RC_FX; } // endif Type @@ -2434,7 +2435,7 @@ void TDBBSON::ResetSize(void) int TDBBSON::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool) { if (pxdf) { - strcpy(g->Message, "JSON not indexable when pretty = 2"); + safe_strcpy(g->Message, sizeof(g->Message), "JSON not indexable when pretty = 2"); return RC_FX; } else return RC_OK; diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp index 62eecb5e69e..0fdc182f6df 100644 --- a/storage/connect/tabdos.cpp +++ b/storage/connect/tabdos.cpp @@ -62,6 +62,7 @@ #include "tabmul.h" #include "array.h" #include "blkfil.h" +#include "m_string.h" /***********************************************************************/ /* DB static variables. */ @@ -258,7 +259,7 @@ bool DOSDEF::DeleteIndexFile(PGLOBAL g, PIXDEF pxdf) sep = GetBoolCatInfo("SepIndex", false); if (!sep && pxdf) { - strcpy(g->Message, MSG(NO_RECOV_SPACE)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(NO_RECOV_SPACE)); return true; } // endif sep @@ -293,7 +294,8 @@ bool DOSDEF::DeleteIndexFile(PGLOBAL g, PIXDEF pxdf) for (; pxdf; pxdf = pxdf->GetNext()) { _splitpath(Ofn, drive, direc, fname, NULL); - strcat(strcat(fname, "_"), pxdf->GetName()); + safe_strcat(fname, sizeof(fname), "_"); + safe_strcat(fname, sizeof(fname), pxdf->GetName()); _makepath(filename, drive, direc, fname, ftype); PlugSetPath(filename, filename, GetPath()); #if defined(_WIN32) @@ -312,7 +314,7 @@ bool DOSDEF::DeleteIndexFile(PGLOBAL g, PIXDEF pxdf) } else { // !sep // Drop all indexes, delete the common file PlugSetPath(filename, Ofn, GetPath()); - strcat(PlugRemoveType(filename, filename), ftype); + safe_strcat(PlugRemoveType(filename, filename), sizeof(filename), ftype); #if defined(_WIN32) if (!DeleteFile(filename)) rc = (GetLastError() != ERROR_FILE_NOT_FOUND); @@ -365,7 +367,7 @@ PTDB DOSDEF::GetTable(PGLOBAL g, MODE mode) if (mode == MODE_READ || mode == MODE_ANY || mode == MODE_ALTER) { txfp = new(g) UZDFAM(this); } else { - strcpy(g->Message, "Zipped DBF tables are read only"); + safe_strcpy(g->Message, sizeof(g->Message), "Zipped DBF tables are read only"); return NULL; } // endif's mode @@ -386,7 +388,7 @@ PTDB DOSDEF::GetTable(PGLOBAL g, MODE mode) } else if (mode == MODE_INSERT) { txfp = new(g) ZIPFAM(this); } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's mode @@ -397,7 +399,7 @@ PTDB DOSDEF::GetTable(PGLOBAL g, MODE mode) } else if (mode == MODE_INSERT) { txfp = new(g) ZPXFAM(this); } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's mode @@ -655,7 +657,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) if ((nrec = defp->GetElemt()) < 2) { if (!To_Def->Partitioned()) { // This may be wrong to do in some cases - strcpy(g->Message, MSG(TABLE_NOT_OPT)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(TABLE_NOT_OPT)); return RC_INFO; // Not to be optimized } else return RC_OK; @@ -675,7 +677,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) if ((block = (int)((MaxSize + (int)nrec - 1) / (int)nrec)) < 2) { // This may be wrong to do in some cases defp->RemoveOptValues(g); - strcpy(g->Message, MSG(TABLE_NOT_OPT)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(TABLE_NOT_OPT)); return RC_INFO; // Not to be optimized } // endif block @@ -758,7 +760,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) // No optimised columns. Still useful for blocked variable tables. if (!colp && defp->Recfm != RECFM_VAR) { - strcpy(g->Message, "No optimised columns"); + safe_strcpy(g->Message, sizeof(g->Message), "No optimised columns"); return RC_INFO; } // endif colp @@ -788,7 +790,8 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) /*********************************************************************/ char *p = (char *)PlugSubAlloc(g, NULL, 24 + strlen(Name)); - dup->Step = strcat(strcpy(p, MSG(OPTIMIZING)), Name); + snprintf(p, 24 + strlen(Name), "%s%s", MSG(OPTIMIZING), Name); + dup->Step = p; dup->ProgMax = GetProgMax(g); dup->ProgCur = 0; #endif // SOCKET_MODE || THREAD @@ -805,7 +808,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) } else { if (++curnum >= nrec) { if (++curblk >= block) { - strcpy(g->Message, MSG(BAD_BLK_ESTIM)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(BAD_BLK_ESTIM)); goto err; } else curnum = 0; @@ -833,7 +836,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g) #if defined(PROG_INFO) if (!dup->Step) { - strcpy(g->Message, MSG(OPT_CANCELLED)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(OPT_CANCELLED)); goto err; } else dup->ProgCur = GetProgCur(); @@ -913,7 +916,8 @@ bool TDBDOS::SaveBlockValues(PGLOBAL g) if (!(opfile = fopen(filename, "wb"))) { snprintf(g->Message, sizeof(g->Message), MSG(OPEN_MODE_ERROR), "wb", (int)errno, filename); - strcat(strcat(g->Message, ": "), strerror(errno)); + safe_strcat(g->Message, sizeof(g->Message), ": "); + safe_strcat(g->Message, sizeof(g->Message), strerror(errno)); if (trace(1)) htrc("%s\n", g->Message); @@ -1230,7 +1234,8 @@ bool TDBDOS::GetDistinctColumnValues(PGLOBAL g, int nrec) /* Initialize progress information */ /*********************************************************************/ p = (char *)PlugSubAlloc(g, NULL, 48 + strlen(Name)); - dup->Step = strcat(strcpy(p, MSG(GET_DIST_VALS)), Name); + snprintf(p, 48 + strlen(Name), "%s%s", MSG(GET_DIST_VALS), Name); + dup->Step = p; dup->ProgMax = GetProgMax(g); dup->ProgCur = 0; @@ -1242,12 +1247,12 @@ bool TDBDOS::GetDistinctColumnValues(PGLOBAL g, int nrec) #if defined(SOCKET_MODE) if (SendProgress(dup)) { - strcpy(g->Message, MSG(OPT_CANCELLED)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(OPT_CANCELLED)); return true; } else #elif defined(THREAD) if (!dup->Step) { - strcpy(g->Message, MSG(OPT_CANCELLED)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(OPT_CANCELLED)); return true; } else #endif // THREAD @@ -1528,7 +1533,7 @@ PBF TDBDOS::CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv) } else if (n == 8 || n == 14) { if (n == 8 && ctype != TYPE_LIST) { // Should never happen - strcpy(g->Message, "Block opt: bad constant"); + safe_strcpy(g->Message, sizeof(g->Message), "Block opt: bad constant"); throw 99; } // endif Conv @@ -1686,7 +1691,7 @@ int TDBDOS::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add) // Are we are called from CreateTable or CreateIndex? if (pxdf) { if (!add && dfp->GetIndx()) { - strcpy(g->Message, MSG(INDX_EXIST_YET)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(INDX_EXIST_YET)); return RC_FX; } // endif To_Indx @@ -1798,7 +1803,7 @@ int TDBDOS::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add) htrc("Exception %d: %s\n", n, g->Message); rc = RC_FX; } catch (const char *msg) { - strcpy(g->Message, msg); + safe_strcpy(g->Message, sizeof(g->Message), msg); rc = RC_FX; } // end catch @@ -1832,7 +1837,7 @@ bool TDBDOS::InitialyzeIndex(PGLOBAL g, volatile PIXDEF xdp, bool sorted) PKPDEF kdp; if (!xdp && !(xdp = To_Xdp)) { - strcpy(g->Message, "NULL dynamic index"); + safe_strcpy(g->Message, sizeof(g->Message), "NULL dynamic index"); return true; } else dynamic = To_Filter && xdp->IsUnique() && xdp->IsDynamic(); @@ -1921,7 +1926,7 @@ bool TDBDOS::InitialyzeIndex(PGLOBAL g, volatile PIXDEF xdp, bool sorted) htrc("Exception %d: %s\n", n, g->Message); brc = true; } catch (const char *msg) { - strcpy(g->Message, msg); + safe_strcpy(g->Message, sizeof(g->Message), msg); brc = true; } // end catch @@ -2682,38 +2687,38 @@ void DOSCOL::WriteColumn(PGLOBAL g) if (Ldz || Nod || Dcm >= 0) { switch (Buf_Type) { case TYPE_SHORT: - strcpy(fmt, (Ldz) ? "%0*hd" : "%*.hd"); + safe_strcpy(fmt, sizeof(fmt), (Ldz) ? "%0*hd" : "%*.hd"); i = 0; if (Nod) for (; i < Dcm; i++) - strcat(fmt, "0"); + safe_strcat(fmt, sizeof(fmt), "0"); len = sprintf(Buf, fmt, field - i, Value->GetShortValue()); break; case TYPE_INT: - strcpy(fmt, (Ldz) ? "%0*d" : "%*.d"); + safe_strcpy(fmt, sizeof(fmt), (Ldz) ? "%0*d" : "%*.d"); i = 0; if (Nod) for (; i < Dcm; i++) - strcat(fmt, "0"); + safe_strcat(fmt,sizeof(fmt), "0"); len = sprintf(Buf, fmt, field - i, Value->GetIntValue()); break; case TYPE_TINY: - strcpy(fmt, (Ldz) ? "%0*d" : "%*.d"); + safe_strcpy(fmt, sizeof(fmt), (Ldz) ? "%0*d" : "%*.d"); i = 0; if (Nod) for (; i < Dcm; i++) - strcat(fmt, "0"); + safe_strcat(fmt, sizeof(fmt), "0"); len = sprintf(Buf, fmt, field - i, Value->GetTinyValue()); break; case TYPE_DOUBLE: case TYPE_DECIM: - strcpy(fmt, (Ldz) ? "%0*.*lf" : "%*.*lf"); + safe_strcpy(fmt, sizeof(fmt), (Ldz) ? "%0*.*lf" : "%*.*lf"); len = field + ((Nod && Dcm) ? 1 : 0); snprintf(Buf, len + 1, fmt, len, Dcm, Value->GetFloatValue()); len = strlen(Buf); diff --git a/storage/connect/tabext.cpp b/storage/connect/tabext.cpp index 6ece7115ea5..f558cb04f4d 100644 --- a/storage/connect/tabext.cpp +++ b/storage/connect/tabext.cpp @@ -65,7 +65,7 @@ int CONDFIL::Init(PGLOBAL g, PHC hc) while (alt) { if (!(p = strchr(alt, '='))) { - strcpy(g->Message, "Invalid alias list"); + safe_strcpy(g->Message, sizeof(g->Message), "Invalid alias list"); rc = RC_FX; break; } // endif !p @@ -126,7 +126,7 @@ EXTDEF::EXTDEF(void) bool EXTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff) { if (g->Createas) { - strcpy(g->Message, + safe_strcpy(g->Message, sizeof(g->Message), "Multiple-table UPDATE/DELETE commands are not supported"); return true; } // endif multi @@ -349,7 +349,7 @@ bool TDBEXT::MakeSrcdef(PGLOBAL g) int n_placeholders = count_placeholders(Srcdef); if (n_placeholders < 0) { - strcpy(g->Message, "MakeSQL: Wrong place holders specification"); + safe_strcpy(g->Message, sizeof(g->Message), "MakeSQL: Wrong place holders specification"); return true; } @@ -372,7 +372,7 @@ bool TDBEXT::MakeSrcdef(PGLOBAL g) Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1) + strlen(fil2)); Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil2, fil1)); } else { - strcpy(g->Message, "MakeSQL: Wrong place holders specification"); + safe_strcpy(g->Message, sizeof(g->Message), "MakeSQL: Wrong place holders specification"); return true; } // endif's ph @@ -466,7 +466,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) if (Quote) { // Tabname can have both database and table identifiers, we need to parse - if ((res= strstr(buf, "."))) + if ((res= strstr(buf, "."))) { // Parse schema my_len= res - buf + 1; @@ -513,7 +513,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) len += ((Mode == MODE_READX) ? 256 : 1); if (Query->IsTruncated()) { - strcpy(g->Message, "MakeSQL: Out of memory"); + safe_strcpy(g->Message, sizeof(g->Message), "MakeSQL: Out of memory"); return true; } else Query->Resize(len); @@ -574,6 +574,7 @@ bool TDBEXT::MakeCommand(PGLOBAL g) bool qtd = Quoted > 0; char q = qtd ? *Quote : ' '; int i = 0, k = 0; + size_t stmt_sz = 0; // Make a lower case copy of the originale query and change // back ticks to the data source identifier quoting character @@ -585,26 +586,30 @@ bool TDBEXT::MakeCommand(PGLOBAL g) p[7] = 0; // Remove where clause Qrystr[(p - qrystr) + 7] = 0; body = To_CondFil->Body; - stmt = (char*)PlugSubAlloc(g, NULL, strlen(qrystr) - + strlen(body) + 64); + stmt_sz = strlen(qrystr) + strlen(body) + 64; } else - stmt = (char*)PlugSubAlloc(g, NULL, strlen(Qrystr) + 64); + stmt_sz = strlen(Qrystr) + 64; + stmt = (char*)PlugSubAlloc(g, NULL, stmt_sz); // Check whether the table name is equal to a keyword // If so, it must be quoted in the original query - strlwr(strcat(strcat(strcpy(name, " "), Name), " ")); + snprintf(name, sizeof(name), " %s ", Name); + strlwr(name); if (strstr(" update delete low_priority ignore quick from ", name)) { if (Quote) { - strlwr(strcat(strcat(strcpy(name, Quote), Name), Quote)); + snprintf(name, sizeof(name), "%s%s%s", Quote, Name, Quote); + strlwr(name); k += 2; } else { - strcpy(g->Message, "Quoted must be specified"); + safe_strcpy(g->Message, sizeof(g->Message), "Quoted must be specified"); return true; } // endif Quote - } else - strlwr(strcpy(name, Name)); // Not a keyword + } else { + safe_strcpy(name, sizeof(name), Name); // Not a keyword + strlwr(name); + } if ((p = strstr(qrystr, name))) { for (i = 0; i < p - qrystr; i++) @@ -618,21 +623,29 @@ bool TDBEXT::MakeCommand(PGLOBAL g) schmp = Schema; if (qtd && *(p - 1) == ' ') { - if (schmp) - strcat(strcat(stmt, schmp), "."); + if (schmp) { + safe_strcat(stmt, stmt_sz, schmp); + safe_strcat(stmt, stmt_sz, "."); + } - strcat(strcat(strcat(stmt, Quote), TableName), Quote); + safe_strcat(stmt, stmt_sz, Quote); + safe_strcat(stmt, stmt_sz, TableName); + safe_strcat(stmt, stmt_sz, Quote); } else { if (schmp) { if (qtd && *(p - 1) != ' ') { stmt[i - 1] = 0; - strcat(strcat(strcat(stmt, schmp), "."), Quote); - } else - strcat(strcat(stmt, schmp), "."); + safe_strcat(stmt, stmt_sz, schmp); + safe_strcat(stmt, stmt_sz, "."); + safe_strcat(stmt, stmt_sz, Quote); + } else { + safe_strcat(stmt, stmt_sz, schmp); + safe_strcat(stmt, stmt_sz, "."); + } } // endif schmp - strcat(stmt, TableName); + safe_strcat(stmt, stmt_sz, TableName); } // endif's i = (int)strlen(stmt); @@ -644,7 +657,7 @@ bool TDBEXT::MakeCommand(PGLOBAL g) RemoveConst(g, stmt); if (body) - strcat(stmt, body); + safe_strcat(stmt, stmt_sz, body); } else { snprintf(g->Message, sizeof(g->Message), "Cannot use this %s command", diff --git a/storage/connect/tabfmt.cpp b/storage/connect/tabfmt.cpp index 7edffc638fa..037a465af13 100644 --- a/storage/connect/tabfmt.cpp +++ b/storage/connect/tabfmt.cpp @@ -62,6 +62,7 @@ #define NO_FUNC #include "plgcnx.h" // For DB types #include "resource.h" +#include "m_string.h" /***********************************************************************/ /* This should be an option. */ @@ -137,7 +138,7 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info) ? strchr(tdp->Entry, '*') || strchr(tdp->Entry, '?') : GetBooleanTableOption(g, topt, "Mulentries", false); #else // !ZIP_SUPPORT - strcpy(g->Message, "ZIP not supported by this version"); + safe_strcpy(g->Message, sizeof(g->Message), "ZIP not supported by this version"); return NULL; #endif // !ZIP_SUPPORT } // endif // Zipped @@ -145,7 +146,7 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info) fn = tdp->Fn = GetStringTableOption(g, topt, "Filename", NULL); if (!tdp->Fn) { - strcpy(g->Message, MSG(MISSING_FNAME)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return NULL; } // endif Fn @@ -472,7 +473,7 @@ bool CSVDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff) if (Catfunc == FNC_NO) for (PCOLDEF cdp = To_Cols; cdp; cdp = cdp->GetNext()) if (cdp->GetOffset() < 1 && !cdp->IsSpecial()) { - strcpy(g->Message, MSG(BAD_OFFSET_VAL)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(BAD_OFFSET_VAL)); return true; } // endif Offset @@ -528,11 +529,11 @@ PTDB CSVDEF::GetTable(PGLOBAL g, MODE mode) } else if (mode == MODE_INSERT) { txfp = new(g) ZIPFAM(this); } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's mode #else // !ZIP_SUPPORT - strcpy(g->Message, "ZIP not supported"); + safe_strcpy(g->Message, sizeof(g->Message), "ZIP not supported"); return NULL; #endif // !ZIP_SUPPORT } else if (map) { @@ -546,7 +547,7 @@ PTDB CSVDEF::GetTable(PGLOBAL g, MODE mode) txfp = new(g) ZLBFAM(this); #else // !GZ_SUPPORT - strcpy(g->Message, "Compress not supported"); + safe_strcpy(g->Message, sizeof(g->Message), "Compress not supported"); return NULL; #endif // !GZ_SUPPORT } else @@ -878,7 +879,7 @@ bool TDBCSV::SkipHeader(PGLOBAL g) if (q) To_Line[strlen(To_Line)] = Qot; - strcat(To_Line, cdp->GetName()); + safe_strcat(To_Line, Lrecl, cdp->GetName()); if (q) To_Line[strlen(To_Line)] = Qot; @@ -1048,14 +1049,16 @@ bool TDBCSV::PrepareWriting(PGLOBAL g) for (i = 0; i < Fields; i++) { if (i) - strcat(To_Line, sep); + safe_strcat(To_Line, Lrecl, sep); if (Field[i]) { if (!strlen(Field[i])) { // Generally null fields are not quoted - if (Quoted > 2) + if (Quoted > 2) { // Except if explicitly required - strcat(strcat(To_Line, qot), qot); + safe_strcat(To_Line, Lrecl, qot); + safe_strcat(To_Line, Lrecl, qot); + } } else if (Qot && (strchr(Field[i], Sep) || *Field[i] == Qot || Quoted > 1 || (Quoted == 1 && !Fldtyp[i]))) { @@ -1074,12 +1077,15 @@ bool TDBCSV::PrepareWriting(PGLOBAL g) To_Line[k++] = Qot; To_Line[k] = '\0'; - } else - strcat(strcat(strcat(To_Line, qot), Field[i]), qot); + } else { + safe_strcat(To_Line, Lrecl, qot); + safe_strcat(To_Line, Lrecl, Field[i]); + safe_strcat(To_Line, Lrecl, qot); + } } else - strcat(To_Line, Field[i]); + safe_strcat(To_Line, Lrecl, Field[i]); } } // endfor i @@ -1156,7 +1162,7 @@ int TDBCSV::CheckWrite(PGLOBAL g) } // endif } if ((nlen += n) > maxlen) { - strcpy(g->Message, MSG(LINE_TOO_LONG)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(LINE_TOO_LONG)); return -1; } // endif nlen @@ -1266,7 +1272,7 @@ bool TDBFMT::OpenDB(PGLOBAL g) } // endif n FldFormat[i] = (PSZ)PlugSubAlloc(g, NULL, n + 5); - strcpy(FldFormat[i], pfm); + safe_strcpy(FldFormat[i], n + 5, pfm); if (!strcmp(pfm + n, "%m")) { // This is a field that can be missing. Flag it so it can @@ -1276,7 +1282,7 @@ bool TDBFMT::OpenDB(PGLOBAL g) } else if (i+1 < Fields && strcmp(pfm + n, "%n")) { // There are trailing characters after the field contents // add a marker for the next field start position. - strcat(FldFormat[i], "%n"); + safe_strcat(FldFormat[i], n + 5, "%n"); FmtTest[i] = 1; } // endif's diff --git a/storage/connect/tabjdbc.cpp b/storage/connect/tabjdbc.cpp index 46fb7695a51..0242832b02f 100644 --- a/storage/connect/tabjdbc.cpp +++ b/storage/connect/tabjdbc.cpp @@ -277,7 +277,7 @@ PTDB JDBCDEF::GetTable(PGLOBAL g, MODE m) if (Multiple == 1) tdbp = new(g)TDBMUL(tdbp); else if (Multiple == 2) - strcpy(g->Message, "NO_JDBC_MUL"); + safe_strcpy(g->Message, sizeof(g->Message), "NO_JDBC_MUL"); } // endswitch Catfunc @@ -386,7 +386,7 @@ bool TDBJDBC::MakeInsert(PGLOBAL g) for (colp = Columns; colp; colp = colp->GetNext()) if (colp->IsSpecial()) { - strcpy(g->Message, "No JDBC special columns"); + safe_strcpy(g->Message, sizeof(g->Message), "No JDBC special columns"); return true; } else { // Column name can be encoded in UTF-8 @@ -460,7 +460,7 @@ bool TDBJDBC::MakeInsert(PGLOBAL g) } // endfor colp if ((Query->Append(") VALUES ("))) { - strcpy(g->Message, "MakeInsert: Out of memory"); + safe_strcpy(g->Message, sizeof(g->Message), "MakeInsert: Out of memory"); return true; } else // in case prepared statement fails pos = Query->GetLength(); @@ -470,7 +470,7 @@ bool TDBJDBC::MakeInsert(PGLOBAL g) Query->Append("?,"); if (Query->IsTruncated()) { - strcpy(g->Message, "MakeInsert: Out of memory"); + safe_strcpy(g->Message, sizeof(g->Message), "MakeInsert: Out of memory"); return true; } else Query->RepLast(')'); @@ -532,12 +532,15 @@ int TDBJDBC::Cardinality(PGLOBAL g) // Table name can be encoded in UTF-8 Decode(TableName, tbn, sizeof(tbn)); - strcpy(qry, "SELECT COUNT(*) FROM "); + safe_strcpy(qry, sizeof(qry), "SELECT COUNT(*) FROM "); - if (Quote) - strcat(strcat(strcat(qry, Quote), tbn), Quote); + if (Quote) { + safe_strcat(qry, sizeof(qry), Quote); + safe_strcat(qry, sizeof(qry), tbn); + safe_strcat(qry, sizeof(qry), Quote); + } else - strcat(qry, tbn); + safe_strcat(qry, sizeof(qry), tbn); // Allocate a Count(*) column (must not use the default constructor) Cnp = new(g)JDBCCOL; @@ -656,7 +659,7 @@ bool TDBJDBC::OpenDB(PGLOBAL g) if ((Qrp = Jcp->AllocateResult(g, this))) Memory = 2; // Must be filled else { - strcpy(g->Message, "Result set memory allocation failed"); + safe_strcpy(g->Message, sizeof(g->Message), "Result set memory allocation failed"); return true; } // endif n @@ -683,7 +686,7 @@ bool TDBJDBC::OpenDB(PGLOBAL g) #if 0 if (!(rc = MakeInsert(g))) { if (Nparm != Jcp->PrepareSQL(Query->GetStr())) { - strcpy(g->Message, MSG(PARM_CNT_MISS)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(PARM_CNT_MISS)); rc = true; } else rc = BindParameters(g); @@ -735,12 +738,12 @@ bool TDBJDBC::SetRecpos(PGLOBAL g, int recpos) CurNum = recpos; Fpos = recpos; } else { - strcpy(g->Message, "Scrolling out of row set NIY"); + safe_strcpy(g->Message, sizeof(g->Message), "Scrolling out of row set NIY"); return true; } // endif recpos } else { - strcpy(g->Message, "This action requires a scrollable cursor"); + safe_strcpy(g->Message, sizeof(g->Message), "This action requires a scrollable cursor"); return true; } // endif's @@ -786,7 +789,7 @@ bool TDBJDBC::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) if (To_CondFil) if (Query->Append(" AND ") || Query->Append(To_CondFil->Body)) { - strcpy(g->Message, "Readkey: Out of memory"); + safe_strcpy(g->Message, sizeof(g->Message), "Readkey: Out of memory"); return true; } // endif Append @@ -919,7 +922,7 @@ int TDBJDBC::WriteDB(PGLOBAL g) } // endfor colp if (unlikely(Query->IsTruncated())) { - strcpy(g->Message, "WriteDB: Out of memory"); + safe_strcpy(g->Message, sizeof(g->Message), "WriteDB: Out of memory"); return RC_FX; } // endif Query @@ -1112,13 +1115,13 @@ PCMD TDBXJDC::MakeCMD(PGLOBAL g) (To_CondFil->Op == OP_EQ || To_CondFil->Op == OP_IN)) { xcmd = To_CondFil->Cmds; } else - strcpy(g->Message, "Invalid command specification filter"); + safe_strcpy(g->Message, sizeof(g->Message), "Invalid command specification filter"); } else - strcpy(g->Message, "No command column in select list"); + safe_strcpy(g->Message, sizeof(g->Message), "No command column in select list"); } else if (!Srcdef) - strcpy(g->Message, "No Srcdef default command"); + safe_strcpy(g->Message, sizeof(g->Message), "No Srcdef default command"); else xcmd = new(g) CMD(g, Srcdef); @@ -1149,7 +1152,7 @@ bool TDBXJDC::OpenDB(PGLOBAL g) this, Tdb_No, Use, Mode); if (Use == USE_OPEN) { - strcpy(g->Message, "Multiple execution is not allowed"); + safe_strcpy(g->Message, sizeof(g->Message), "Multiple execution is not allowed"); return true; } // endif use @@ -1171,7 +1174,7 @@ bool TDBXJDC::OpenDB(PGLOBAL g) Use = USE_OPEN; // Do it now in case we are recursively called if (Mode != MODE_READ && Mode != MODE_READX) { - strcpy(g->Message, "No INSERT/DELETE/UPDATE of XJDBC tables"); + safe_strcpy(g->Message, sizeof(g->Message), "No INSERT/DELETE/UPDATE of XJDBC tables"); return true; } // endif Mode @@ -1224,7 +1227,7 @@ int TDBXJDC::ReadDB(PGLOBAL g) /***********************************************************************/ int TDBXJDC::WriteDB(PGLOBAL g) { - strcpy(g->Message, "Execsrc tables are read only"); + safe_strcpy(g->Message, sizeof(g->Message), "Execsrc tables are read only"); return RC_FX; } // end of DeleteDB @@ -1233,7 +1236,7 @@ int TDBXJDC::WriteDB(PGLOBAL g) /***********************************************************************/ int TDBXJDC::DeleteDB(PGLOBAL g, int irc) { - strcpy(g->Message, "NO_XJDBC_DELETE"); + safe_strcpy(g->Message, sizeof(g->Message), "NO_XJDBC_DELETE"); return RC_FX; } // end of DeleteDB diff --git a/storage/connect/tabjson.cpp b/storage/connect/tabjson.cpp index 968253ec8d1..27bdfee5f35 100644 --- a/storage/connect/tabjson.cpp +++ b/storage/connect/tabjson.cpp @@ -85,7 +85,7 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) } // endif info if (GetIntegerTableOption(g, topt, "Multiple", 0)) { - strcpy(g->Message, "Cannot find column definition for multiple table"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot find column definition for multiple table"); return NULL; } // endif Multiple @@ -212,7 +212,7 @@ int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) tdp->Uri = (dsn && *dsn ? dsn : NULL); if (!tdp->Fn && !tdp->Uri) { - strcpy(g->Message, MSG(MISSING_FNAME)); + safe_strcpy(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return 0; } else topt->subtype = NULL; @@ -320,7 +320,7 @@ int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) switch (tjnp->ReadDB(g)) { case RC_EF: - strcpy(g->Message, "Void json table"); + safe_strcpy(g->Message, sizeof(g->Message), "Void json table"); case RC_FX: goto err; default: @@ -333,7 +333,7 @@ int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt) } // endif pretty if (!(row = (jsp) ? jsp->GetObject() : NULL)) { - strcpy(g->Message, "Can only retrieve columns from object rows"); + safe_strcpy(g->Message, sizeof(g->Message), "Can only retrieve columns from object rows"); goto err; } // endif row @@ -417,7 +417,7 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j) if (jvp && jvp->DataType != TYPE_JSON) { if (JsonAllPath() && !fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); jcol.Type = jvp->DataType; @@ -450,7 +450,7 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j) jcol.Cbn = true; } else if (j < lvl && !Stringified(strfy, colname)) { if (!fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); p = fmt + strlen(fmt); jsp = jvp->GetJson(); @@ -520,11 +520,11 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j) } else if (lvl >= 0) { if (Stringified(strfy, colname)) { if (!fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); - strcat(fmt, ".*"); + safe_strcat(fmt, sizeof(fmt), ".*"); } else if (JsonAllPath() && !fmt[bf]) - strcat(fmt, colname); + safe_strcat(fmt, sizeof(fmt), colname); jcol.Type = TYPE_STRG; jcol.Len = sz; @@ -735,7 +735,7 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) } else if (m == MODE_INSERT) { txfp = new(g) ZIPFAM(this); } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's m #else // !ZIP_SUPPORT @@ -775,7 +775,7 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) #endif // 0 ((TDBJSN*)tdbp)->G = PlugInit(NULL, (size_t)Lrecl * (Pretty >= 0 ? 12 : 4)); } else { - strcpy(g->Message, "LRECL is not defined"); + safe_strcpy(g->Message, sizeof(g->Message), "LRECL is not defined"); return NULL; } // endif Lrecl @@ -785,10 +785,10 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) if (m == MODE_READ || m == MODE_ANY || m == MODE_ALTER) { txfp = new(g) UNZFAM(this); } else if (m == MODE_INSERT) { - strcpy(g->Message, "INSERT supported only for zipped JSON when pretty=0"); + safe_strcpy(g->Message, sizeof(g->Message), "INSERT supported only for zipped JSON when pretty=0"); return NULL; } else { - strcpy(g->Message, "UPDATE/DELETE not supported for ZIP"); + safe_strcpy(g->Message, sizeof(g->Message), "UPDATE/DELETE not supported for ZIP"); return NULL; } // endif's m #else // !ZIP_SUPPORT @@ -1144,7 +1144,7 @@ int TDBJSN::ReadDB(PGLOBAL g) { M = 1; rc = RC_OK; } else if (Pretty != 1 || strcmp(To_Line, "]")) { - strcpy(g->Message, G->Message); + safe_strcpy(g->Message, sizeof(g->Message), G->Message); rc = RC_FX; } else rc = RC_EF; @@ -1257,7 +1257,7 @@ bool TDBJSN::PrepareWriting(PGLOBAL g) strcat(s, ","); if ((signed)strlen(s) > Lrecl) { - strncpy(To_Line, s, Lrecl); + safe_strcpy(To_Line, Lrecl, s); snprintf(g->Message, sizeof(g->Message), "Line truncated (lrecl=%d)", Lrecl); return PushWarning(g, this); } else @@ -1359,7 +1359,7 @@ bool JSONCOL::CheckExpand(PGLOBAL g, int i, PSZ nm, bool b) Xpd = true; // Expandable object Nodes[i].Op = OP_EXP; } else if (b) { - strcpy(g->Message, "Cannot expand more than one branch"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot expand more than one branch"); return true; } // endif Xcol @@ -1570,7 +1570,7 @@ bool JSONCOL::ParseJpath(PGLOBAL g) if (SetArrayOptions(g, p, i, Nodes[i - 1].Key)) return true; else if (Xpd && Tjp->Mode == MODE_DELETE) { - strcpy(g->Message, "Cannot delete expanded columns"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot delete expanded columns"); return true; } // endif Xpd @@ -1674,7 +1674,7 @@ PSZ JSONCOL::GetJpath(PGLOBAL g, bool proj) PVAL JSONCOL::MakeJson(PGLOBAL g, PJSON jsp, int n) { if (Value->IsTypeNum()) { - strcpy(g->Message, "Cannot make Json for a numeric column"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot make Json for a numeric column"); if (!Warned) { PushWarning(g, Tjp); @@ -1689,10 +1689,10 @@ PVAL JSONCOL::MakeJson(PGLOBAL g, PJSON jsp, int n) ulong len = Tjp->Lrecl ? Tjp->Lrecl : 500; PBSON bsp = JbinAlloc(g, NULL, len, jsp); - strcat(bsp->Msg, " column"); + safe_strcat(bsp->Msg, sizeof(bsp->Msg), " column"); ((BINVAL*)Value)->SetBinValue(bsp, sizeof(BSON)); } else { - strcpy(g->Message, "Column size too small"); + safe_strcpy(g->Message, sizeof(g->Message), "Column size too small"); Value->SetValue_char(NULL, 0); } // endif Clen #endif // 0 @@ -1934,7 +1934,7 @@ PVAL JSONCOL::ExpandArray(PGLOBAL g, PJAR arp, int n) } // endif ars if (!(jvp = arp->GetArrayValue((Nodes[n].Rx = Nodes[n].Nx)))) { - strcpy(g->Message, "Logical error expanding array"); + safe_strcpy(g->Message, sizeof(g->Message), "Logical error expanding array"); throw 666; } // endif jvp @@ -2122,7 +2122,7 @@ PJSON JSONCOL::GetRow(PGLOBAL g) ((PJAR)row)->AddArrayValue(G, new(G) JVALUE(nwr)); ((PJAR)row)->InitArray(G); } else { - strcpy(g->Message, "Wrong type when writing new row"); + safe_strcpy(g->Message, sizeof(g->Message), "Wrong type when writing new row"); nwr = NULL; } // endif's @@ -2143,7 +2143,7 @@ PJSON JSONCOL::GetRow(PGLOBAL g) void JSONCOL::WriteColumn(PGLOBAL g) { if (Xpd && Tjp->Pretty < 2) { - strcpy(g->Message, "Cannot write expanded column when Pretty is not 2"); + safe_strcpy(g->Message, sizeof(g->Message), "Cannot write expanded column when Pretty is not 2"); throw 666; } // endif Xpd @@ -2179,7 +2179,7 @@ void JSONCOL::WriteColumn(PGLOBAL g) if (s && *s) { if (!(jsp = ParseJson(G, s, strlen(s)))) { - strcpy(g->Message, s); + safe_strcpy(g->Message, sizeof(g->Message), s); throw 666; } // endif jsp @@ -2362,7 +2362,7 @@ int TDBJSON::MakeDocument(PGLOBAL g) if (!a && *p && *p != '[' && !IsNum(p)) { // obj is a key if (jsp->GetType() != TYPE_JOB) { - strcpy(g->Message, "Table path does not match the json file"); + safe_strcpy(g->Message, sizeof(g->Message), "Table path does not match the json file"); return RC_FX; } // endif Type @@ -2388,7 +2388,7 @@ int TDBJSON::MakeDocument(PGLOBAL g) } // endif p if (jsp->GetType() != TYPE_JAR) { - strcpy(g->Message, "Table path does not match the json file"); + safe_strcpy(g->Message, sizeof(g->Message), "Table path does not match the json file"); return RC_FX; } // endif Type @@ -2483,7 +2483,7 @@ void TDBJSON::ResetSize(void) int TDBJSON::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool) { if (pxdf) { - strcpy(g->Message, "JSON not indexable when pretty = 2"); + safe_strcpy(g->Message, sizeof(g->Message), "JSON not indexable when pretty = 2"); return RC_FX; } else return RC_OK; diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp index 498ec71a87f..7265b2ed0ca 100644 --- a/storage/connect/value.cpp +++ b/storage/connect/value.cpp @@ -163,9 +163,9 @@ PCSZ GetTypeName(int type) /***********************************************************************/ /* GetTypeSize: returns the PlugDB internal type size. */ /***********************************************************************/ -int GetTypeSize(int type, int len) - { - switch (type) { +unsigned GetTypeSize(int type, unsigned len) +{ + switch (type) { case TYPE_DECIM: case TYPE_BIN: case TYPE_STRING: len = len * sizeof(char); break; @@ -176,7 +176,7 @@ int GetTypeSize(int type, int len) case TYPE_DOUBLE: len = sizeof(double); break; case TYPE_TINY: len = sizeof(char); break; case TYPE_PCHAR: len = sizeof(char*); break; - default: len = -1; + default: len = 0; } // endswitch type return len; diff --git a/storage/connect/value.h b/storage/connect/value.h index a0d947347c3..7eb0dec29f2 100644 --- a/storage/connect/value.h +++ b/storage/connect/value.h @@ -41,7 +41,7 @@ typedef struct _datpar *PDTP; // For DTVAL /***********************************************************************/ // Exported functions DllExport PCSZ GetTypeName(int); -DllExport int GetTypeSize(int, int); +DllExport unsigned GetTypeSize(int, unsigned); #ifdef ODBC_SUPPORT /* This function is exported for use in OEM table type DLLs */ DllExport int TranslateSQLType(int stp, int prec, diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 8727350ce87..a95866d4a05 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -4470,7 +4470,7 @@ n_field_mismatch: len -= BTR_EXTERN_FIELD_REF_SIZE; ulint extern_len = mach_read_from_4( data + len + BTR_EXTERN_LEN + 4); - if (fixed_size == extern_len) { + if (fixed_size == extern_len + len) { goto next_field; } } diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 9492a97192c..6a5221cb2c6 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1311,11 +1311,11 @@ buf_tmp_buffer_t *buf_pool_t::io_buf_t::reserve() for (buf_tmp_buffer_t *s= slots, *e= slots + n_slots; s != e; s++) if (s->acquire()) return s; - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(true); for (buf_tmp_buffer_t *s= slots, *e= slots + n_slots; s != e; s++) if (s->acquire()) return s; - os_aio_wait_until_no_pending_reads(); + os_aio_wait_until_no_pending_reads(true); } } diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index c5de7a41808..1260145ed1c 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -596,7 +596,6 @@ bool buf_dblwr_t::flush_buffered_writes(const ulint size) const bool multi_batch= block1 + static_cast(size) != block2 && old_first_free > size; flushing_buffered_writes= 1 + multi_batch; - pages_submitted+= old_first_free; /* Now safe to release the mutex. */ mysql_mutex_unlock(&mutex); #ifdef UNIV_DEBUG diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc index 63a28aa1a37..bb705ec5651 100644 --- a/storage/innobase/buf/buf0dump.cc +++ b/storage/innobase/buf/buf0dump.cc @@ -651,7 +651,7 @@ buf_load() ut_free(dump); if (i == dump_n) { - os_aio_wait_until_no_pending_reads(); + os_aio_wait_until_no_pending_reads(true); } ut_sprintf_timestamp(now); diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 5aecf0b2fe5..57245cbb95e 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -113,7 +113,12 @@ void buf_pool_t::page_cleaner_wakeup(bool for_LRU) { ut_d(buf_flush_validate_skip()); if (!page_cleaner_idle()) + { + if (for_LRU) + /* Ensure that the page cleaner is not in a timed wait. */ + pthread_cond_signal(&do_flush_list); return; + } double dirty_pct= double(UT_LIST_GET_LEN(buf_pool.flush_list)) * 100.0 / double(UT_LIST_GET_LEN(buf_pool.LRU) + UT_LIST_GET_LEN(buf_pool.free)); double pct_lwm= srv_max_dirty_pages_pct_lwm; @@ -209,7 +214,7 @@ void buf_flush_remove_pages(uint32_t id) if (!deferred) break; - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(true); } } @@ -1215,6 +1220,11 @@ static void buf_flush_LRU_list_batch(ulint max, bool evict, ++n->evicted; /* fall through */ case 1: + if (UNIV_LIKELY(scanned & 31)) + continue; + mysql_mutex_unlock(&buf_pool.mutex); + reacquire_mutex: + mysql_mutex_lock(&buf_pool.mutex); continue; } @@ -1250,32 +1260,37 @@ static void buf_flush_LRU_list_batch(ulint max, bool evict, auto p= buf_flush_space(space_id); space= p.first; last_space_id= space_id; + if (!space) + { + mysql_mutex_lock(&buf_pool.mutex); + goto no_space; + } mysql_mutex_lock(&buf_pool.mutex); - if (p.second) - buf_pool.stat.n_pages_written+= p.second; + buf_pool.stat.n_pages_written+= p.second; } else + { ut_ad(!space); + goto no_space; + } } else if (space->is_stopping()) { space->release(); space= nullptr; - } - - if (!space) - { + no_space: mysql_mutex_lock(&buf_pool.flush_list_mutex); buf_flush_discard_page(bpage); + continue; } - else if (neighbors && space->is_rotational()) + + if (neighbors && space->is_rotational()) { mysql_mutex_unlock(&buf_pool.mutex); n->flushed+= buf_flush_try_neighbors(space, page_id, bpage, neighbors == 1, do_evict, n->flushed, max); -reacquire_mutex: - mysql_mutex_lock(&buf_pool.mutex); + goto reacquire_mutex; } else if (n->flushed >= max && !recv_recovery_is_on()) { @@ -1642,7 +1657,7 @@ done: space->release(); if (space->purpose == FIL_TYPE_IMPORT) - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(true); else buf_dblwr.flush_buffered_writes(); @@ -1954,7 +1969,7 @@ static void buf_flush_wait(lsn_t lsn) break; } mysql_mutex_unlock(&buf_pool.flush_list_mutex); - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(false); mysql_mutex_lock(&buf_pool.flush_list_mutex); } } @@ -1989,16 +2004,20 @@ ATTRIBUTE_COLD void buf_flush_wait_flushed(lsn_t sync_lsn) MONITOR_FLUSH_SYNC_COUNT, MONITOR_FLUSH_SYNC_PAGES, n_pages); } - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(false); mysql_mutex_lock(&buf_pool.flush_list_mutex); } while (buf_pool.get_oldest_modification(sync_lsn) < sync_lsn); } else #endif + { + thd_wait_begin(nullptr, THD_WAIT_DISKIO); + tpool::tpool_wait_begin(); buf_flush_wait(sync_lsn); - - thd_wait_end(nullptr); + tpool::tpool_wait_end(); + thd_wait_end(nullptr); + } } mysql_mutex_unlock(&buf_pool.flush_list_mutex); @@ -2151,10 +2170,12 @@ Based on various factors it decides if there is a need to do flushing. @return number of pages recommended to be flushed @param last_pages_in number of pages flushed in previous batch @param oldest_lsn buf_pool.get_oldest_modification(0) +@param pct_lwm innodb_max_dirty_pages_pct_lwm, or 0 to ignore it @param dirty_blocks UT_LIST_GET_LEN(buf_pool.flush_list) @param dirty_pct 100*flush_list.count / (LRU.count + free.count) */ static ulint page_cleaner_flush_pages_recommendation(ulint last_pages_in, lsn_t oldest_lsn, + double pct_lwm, ulint dirty_blocks, double dirty_pct) { @@ -2224,11 +2245,17 @@ func_exit: sum_pages = 0; } - const ulint pct_for_dirty = srv_max_dirty_pages_pct_lwm == 0 - ? (dirty_pct >= max_pct ? 100 : 0) - : static_cast - (max_pct > 0.0 ? dirty_pct / max_pct : dirty_pct); - ulint pct_total = std::max(pct_for_dirty, pct_for_lsn); + MONITOR_SET(MONITOR_FLUSH_PCT_FOR_LSN, pct_for_lsn); + + double total_ratio; + if (pct_lwm == 0.0 || max_pct == 0.0) { + total_ratio = 1; + } else { + total_ratio = std::max(double(pct_for_lsn) / 100, + (dirty_pct / max_pct)); + } + + MONITOR_SET(MONITOR_FLUSH_PCT_FOR_DIRTY, ulint(total_ratio * 100)); /* Estimate pages to be flushed for the lsn progress */ lsn_t target_lsn = oldest_lsn @@ -2254,7 +2281,7 @@ func_exit: pages_for_lsn = 1; } - n_pages = (ulint(double(srv_io_capacity) * double(pct_total) / 100.0) + n_pages = (ulint(double(srv_io_capacity) * total_ratio) + avg_page_rate + pages_for_lsn) / 3; if (n_pages > srv_max_io_capacity) { @@ -2267,8 +2294,6 @@ func_exit: MONITOR_SET(MONITOR_FLUSH_AVG_PAGE_RATE, avg_page_rate); MONITOR_SET(MONITOR_FLUSH_LSN_AVG_RATE, lsn_avg_rate); - MONITOR_SET(MONITOR_FLUSH_PCT_FOR_DIRTY, pct_for_dirty); - MONITOR_SET(MONITOR_FLUSH_PCT_FOR_LSN, pct_for_lsn); goto func_exit; } @@ -2381,7 +2406,7 @@ static void buf_flush_page_cleaner() soft_lsn_limit= lsn_limit; } - bool idle_flush= false; + double pct_lwm= 0.0; ulint n_flushed= 0, n; if (UNIV_UNLIKELY(soft_lsn_limit != 0)) @@ -2400,7 +2425,7 @@ static void buf_flush_page_cleaner() mysql_mutex_unlock(&buf_pool.mutex); last_pages+= n; - if (!idle_flush) + if (pct_lwm == 0.0) goto end_of_batch; /* when idle flushing kicks in page_cleaner is marked active. @@ -2418,7 +2443,8 @@ static void buf_flush_page_cleaner() guaranteed to be nonempty, and it is a subset of buf_pool.LRU. */ const double dirty_pct= double(dirty_blocks) * 100.0 / double(UT_LIST_GET_LEN(buf_pool.LRU) + UT_LIST_GET_LEN(buf_pool.free)); - if (srv_max_dirty_pages_pct_lwm != 0.0) + pct_lwm= srv_max_dirty_pages_pct_lwm; + if (pct_lwm != 0.0) { const ulint activity_count= srv_get_activity_count(); if (activity_count != last_activity_count) @@ -2435,13 +2461,16 @@ static void buf_flush_page_cleaner() - there are no pending reads but there are dirty pages to flush */ buf_pool.update_last_activity_count(activity_count); mysql_mutex_unlock(&buf_pool.flush_list_mutex); - idle_flush= true; goto idle_flush; } else + { maybe_unemployed: - if (dirty_pct < srv_max_dirty_pages_pct_lwm) + const bool below{dirty_pct < pct_lwm}; + pct_lwm= 0.0; + if (below) goto possibly_unemployed; + } } else if (dirty_pct < srv_max_buf_pool_modified_pct) possibly_unemployed: @@ -2472,6 +2501,7 @@ static void buf_flush_page_cleaner() } else if ((n= page_cleaner_flush_pages_recommendation(last_pages, oldest_lsn, + pct_lwm, dirty_blocks, dirty_pct)) != 0) { @@ -2502,7 +2532,7 @@ static void buf_flush_page_cleaner() mysql_mutex_lock(&buf_pool.flush_list_mutex); buf_flush_wait_LRU_batch_end(); mysql_mutex_unlock(&buf_pool.flush_list_mutex); - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(false); } mysql_mutex_lock(&buf_pool.flush_list_mutex); @@ -2552,7 +2582,7 @@ ATTRIBUTE_COLD void buf_flush_buffer_pool() { mysql_mutex_unlock(&buf_pool.flush_list_mutex); buf_flush_list(srv_max_io_capacity); - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(false); mysql_mutex_lock(&buf_pool.flush_list_mutex); service_manager_extend_timeout(INNODB_EXTEND_TIMEOUT_INTERVAL, "Waiting to flush " ULINTPF " pages", @@ -2560,7 +2590,6 @@ ATTRIBUTE_COLD void buf_flush_buffer_pool() } mysql_mutex_unlock(&buf_pool.flush_list_mutex); - ut_ad(!os_aio_pending_writes()); ut_ad(!os_aio_pending_reads()); } diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index 22fa1ac003b..4c42d3eab54 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -455,15 +455,15 @@ got_block: mysql_mutex_unlock(&buf_pool.mutex); mysql_mutex_lock(&buf_pool.flush_list_mutex); const auto n_flush = buf_pool.n_flush(); + if (!buf_pool.try_LRU_scan) { + buf_pool.page_cleaner_wakeup(true); + } mysql_mutex_unlock(&buf_pool.flush_list_mutex); mysql_mutex_lock(&buf_pool.mutex); if (!n_flush) { goto not_found; } if (!buf_pool.try_LRU_scan) { - mysql_mutex_lock(&buf_pool.flush_list_mutex); - buf_pool.page_cleaner_wakeup(true); - mysql_mutex_unlock(&buf_pool.flush_list_mutex); my_cond_wait(&buf_pool.done_free, &buf_pool.mutex.m_mutex); } diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index da263f8b8f6..1f7f9bfba0a 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -691,7 +691,7 @@ void buf_read_recv_pages(uint32_t space_id, st_::span page_nos) } if (os_aio_pending_reads() >= limit) { - os_aio_wait_until_no_pending_reads(); + os_aio_wait_until_no_pending_reads(false); } buf_pool_t::hash_chain& chain = diff --git a/storage/innobase/dict/drop.cc b/storage/innobase/dict/drop.cc index 9013841ba5e..abf08f225c5 100644 --- a/storage/innobase/dict/drop.cc +++ b/storage/innobase/dict/drop.cc @@ -68,6 +68,7 @@ before transaction commit and must be rolled back explicitly are as follows: #include "dict0defrag_bg.h" #include "btr0defragment.h" +#include "ibuf0ibuf.h" #include "lock0lock.h" #include "que0que.h" diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 79fa2c5e004..53ea91529ec 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -294,6 +294,8 @@ fil_node_t* fil_space_t::add(const char* name, pfs_os_file_t handle, uint32_t size, bool is_raw, bool atomic_write, uint32_t max_pages) { + mysql_mutex_assert_owner(&fil_system.mutex); + fil_node_t* node; ut_ad(name != NULL); @@ -318,7 +320,6 @@ fil_node_t* fil_space_t::add(const char* name, pfs_os_file_t handle, node->atomic_write = atomic_write; - mysql_mutex_lock(&fil_system.mutex); this->size += size; UT_LIST_ADD_LAST(chain, node); if (node->is_open()) { @@ -329,7 +330,6 @@ fil_node_t* fil_space_t::add(const char* name, pfs_os_file_t handle, release(); } } - mysql_mutex_unlock(&fil_system.mutex); return node; } @@ -805,8 +805,17 @@ pfs_os_file_t fil_system_t::detach(fil_space_t *space, bool detach_handle) space_list_t::iterator s= space_list_t::iterator(space); if (space_list_last_opened == space) { - space_list_t::iterator prev= s; - space_list_last_opened= &*--prev; + if (s == space_list.begin()) + { + ut_ad(srv_operation > SRV_OPERATION_EXPORT_RESTORED || + srv_shutdown_state > SRV_SHUTDOWN_NONE); + space_list_last_opened= nullptr; + } + else + { + space_list_t::iterator prev= s; + space_list_last_opened= &*--prev; + } } space_list.erase(s); } @@ -940,6 +949,7 @@ fil_space_t *fil_space_t::create(uint32_t id, uint32_t flags, { fil_space_t* space; + mysql_mutex_assert_owner(&fil_system.mutex); ut_ad(fil_system.is_initialised()); ut_ad(fil_space_t::is_valid_flags(flags & ~FSP_FLAGS_MEM_MASK, id)); ut_ad(srv_page_size == UNIV_PAGE_SIZE_ORIG || flags != 0); @@ -972,8 +982,6 @@ fil_space_t *fil_space_t::create(uint32_t id, uint32_t flags, space->latch.SRW_LOCK_INIT(fil_space_latch_key); - mysql_mutex_lock(&fil_system.mutex); - if (const fil_space_t *old_space = fil_space_get_by_id(id)) { ib::error() << "Trying to add tablespace with id " << id << " to the cache, but tablespace '" @@ -981,7 +989,6 @@ fil_space_t *fil_space_t::create(uint32_t id, uint32_t flags, ? old_space->chain.start->name : "") << "' already exists in the cache!"; - mysql_mutex_unlock(&fil_system.mutex); space->~fil_space_t(); ut_free(space); return(NULL); @@ -1028,12 +1035,12 @@ fil_space_t *fil_space_t::create(uint32_t id, uint32_t flags, if (rotate) { fil_system.default_encrypt_tables.push_back(*space); space->is_in_default_encrypt = true; - } - mysql_mutex_unlock(&fil_system.mutex); - - if (rotate && srv_n_fil_crypt_threads_started) { - fil_crypt_threads_signal(); + if (srv_n_fil_crypt_threads_started) { + mysql_mutex_unlock(&fil_system.mutex); + fil_crypt_threads_signal(); + mysql_mutex_lock(&fil_system.mutex); + } } return(space); @@ -1316,9 +1323,9 @@ void fil_system_t::close() void fil_system_t::add_opened_last_to_space_list(fil_space_t *space) { if (UNIV_LIKELY(space_list_last_opened != nullptr)) - space_list.insert(space_list_t::iterator(space_list_last_opened), *space); + space_list.insert(++space_list_t::iterator(space_list_last_opened), *space); else - space_list.push_back(*space); + space_list.push_front(*space); space_list_last_opened= space; } @@ -1741,9 +1748,7 @@ pfs_os_file_t fil_delete_tablespace(uint32_t id) mtr_t mtr; mtr.start(); mtr.log_file_op(FILE_DELETE, id, space->chain.start->name); - handle= space->chain.start->handle; - mtr.commit_file(*space, nullptr); - + mtr.commit_file(*space, nullptr, &handle); fil_space_free_low(space); } @@ -2056,16 +2061,20 @@ err_exit: DBUG_EXECUTE_IF("checkpoint_after_file_create", log_make_checkpoint();); + mysql_mutex_lock(&fil_system.mutex); if (fil_space_t* space = fil_space_t::create(space_id, flags, FIL_TYPE_TABLESPACE, crypt_data, mode, true)) { fil_node_t* node = space->add(path, file, size, false, true); + mysql_mutex_unlock(&fil_system.mutex); IF_WIN(node->find_metadata(), node->find_metadata(file, true)); mtr.start(); mtr.set_named_space(space); ut_a(fsp_header_init(space, size, &mtr) == DB_SUCCESS); mtr.commit(); return space; + } else { + mysql_mutex_unlock(&fil_system.mutex); } if (space_name.data()) { @@ -2325,8 +2334,10 @@ skip_validate: first_page) : NULL; + mysql_mutex_lock(&fil_system.mutex); space = fil_space_t::create(id, flags, purpose, crypt_data); if (!space) { + mysql_mutex_unlock(&fil_system.mutex); goto error; } @@ -2336,6 +2347,7 @@ skip_validate: space->add( df_remote.is_open() ? df_remote.filepath() : df_default.filepath(), OS_FILE_CLOSED, 0, false, true); + mysql_mutex_unlock(&fil_system.mutex); if (must_validate && !srv_read_only_mode) { df_remote.close(); @@ -2621,10 +2633,13 @@ tablespace_check: return FIL_LOAD_INVALID; } + mysql_mutex_lock(&fil_system.mutex); + space = fil_space_t::create( space_id, flags, FIL_TYPE_TABLESPACE, crypt_data); if (space == NULL) { + mysql_mutex_unlock(&fil_system.mutex); return(FIL_LOAD_INVALID); } @@ -2636,6 +2651,7 @@ tablespace_check: let fil_node_open() do that task. */ space->add(file.filepath(), OS_FILE_CLOSED, 0, false, false); + mysql_mutex_unlock(&fil_system.mutex); return(FIL_LOAD_OK); } diff --git a/storage/innobase/fsp/fsp0space.cc b/storage/innobase/fsp/fsp0space.cc index 6bdf9fcc4d8..c2152b08590 100644 --- a/storage/innobase/fsp/fsp0space.cc +++ b/storage/innobase/fsp/fsp0space.cc @@ -88,25 +88,25 @@ Tablespace::open_or_create(bool is_temp) ut_ad(!m_files.empty()); for (iterator it = begin(); it != end(); ++it) { - if (it->m_exists) { err = it->open_or_create( m_ignore_read_only ? false : srv_read_only_mode); + if (err != DB_SUCCESS) { + return err; + } } else { err = it->open_or_create( m_ignore_read_only ? false : srv_read_only_mode); + if (err != DB_SUCCESS) { + return err; + } + /* Set the correct open flags now that we have successfully created the file. */ - if (err == DB_SUCCESS) { - file_found(*it); - } - } - - if (err != DB_SUCCESS) { - break; + file_found(*it); } /* We can close the handle now and open the tablespace @@ -130,20 +130,22 @@ Tablespace::open_or_create(bool is_temp) fsp_flags = FSP_FLAGS_PAGE_SSIZE(); } + mysql_mutex_lock(&fil_system.mutex); space = fil_space_t::create( m_space_id, fsp_flags, is_temp ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE, NULL); if (!space) { + mysql_mutex_unlock(&fil_system.mutex); return DB_ERROR; } + } else { + mysql_mutex_lock(&fil_system.mutex); } - - ut_a(fil_validate()); - space->add(it->m_filepath, OS_FILE_CLOSED, it->m_size, false, true); + mysql_mutex_unlock(&fil_system.mutex); } return(err); diff --git a/storage/innobase/fsp/fsp0sysspace.cc b/storage/innobase/fsp/fsp0sysspace.cc index 09eea04b655..9aef6f389ef 100644 --- a/storage/innobase/fsp/fsp0sysspace.cc +++ b/storage/innobase/fsp/fsp0sysspace.cc @@ -920,6 +920,7 @@ SysTablespace::open_or_create( /* Close the curent handles, add space and file info to the fil_system cache and the Data Dictionary, and re-open them in file_system cache so that they stay open until shutdown. */ + mysql_mutex_lock(&fil_system.mutex); ulint node_counter = 0; for (files_t::iterator it = begin; it != end; ++it) { it->close(); @@ -933,7 +934,8 @@ SysTablespace::open_or_create( FIL_TYPE_TEMPORARY, NULL); ut_ad(space == fil_system.temp_space); if (!space) { - return DB_ERROR; + err = DB_ERROR; + break; } ut_ad(!space->is_compressed()); ut_ad(space->full_crc32()); @@ -944,12 +946,11 @@ SysTablespace::open_or_create( FIL_TYPE_TABLESPACE, NULL); ut_ad(space == fil_system.sys_space); if (!space) { - return DB_ERROR; + err = DB_ERROR; + break; } } - ut_a(fil_validate()); - uint32_t max_size = (++node_counter == m_files.size() ? (m_last_file_size_max == 0 ? UINT32_MAX @@ -960,6 +961,7 @@ SysTablespace::open_or_create( it->m_type != SRV_NOT_RAW, true, max_size); } + mysql_mutex_unlock(&fil_system.mutex); return(err); } diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 8623e653991..d2b90542ec6 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -38,22 +38,6 @@ Full Text Search interface #include "dict0stats.h" #include "btr0pcur.h" -/** The SYNC state of the cache. There is one instance of this struct -associated with each ADD thread. */ -struct fts_sync_t { - /** Transaction used for SYNCing the cache to disk */ - trx_t *trx; - /** Table with FTS index(es) */ - dict_table_t *table; - /** Max size in bytes of the cache */ - ulint max_cache_size; - /** The doc id at which the cache was noted as being - full, we use this to set the upper_limit field */ - doc_id_t max_doc_id; - /** SYNC start time; only used if fts_enable_diag_print */ - time_t start_time; -}; - static const ulint FTS_MAX_ID_LEN = 32; /** Column name from the FTS config table */ @@ -201,8 +185,15 @@ struct fts_tokenize_param_t { /** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] sync sync state +@param[in] unlock_cache whether unlock cache lock when write node +@param[in] wait whether wait when a sync is in progress @return DB_SUCCESS if all OK */ -static dberr_t fts_sync(fts_sync_t *sync); +static +dberr_t +fts_sync( + fts_sync_t* sync, + bool unlock_cache, + bool wait); /****************************************************************//** Release all resources help by the words rb tree e.g., the node ilist. */ @@ -275,6 +266,7 @@ fts_cache_destroy(fts_cache_t* cache) mysql_mutex_destroy(&cache->init_lock); mysql_mutex_destroy(&cache->deleted_lock); mysql_mutex_destroy(&cache->doc_id_lock); + pthread_cond_destroy(&cache->sync->cond); if (cache->stopword_info.cached_stopword) { rbt_free(cache->stopword_info.cached_stopword); @@ -574,6 +566,7 @@ fts_index_cache_init( for (i = 0; i < FTS_NUM_AUX_INDEX; ++i) { ut_a(index_cache->ins_graph[i] == NULL); + ut_a(index_cache->sel_graph[i] == NULL); } } @@ -643,6 +636,7 @@ fts_cache_create( mem_heap_zalloc(heap, sizeof(fts_sync_t))); cache->sync->table = table; + pthread_cond_init(&cache->sync->cond, nullptr); /* Create the index cache vector that will hold the inverted indexes. */ cache->indexes = ib_vector_create( @@ -968,6 +962,10 @@ fts_cache_index_cache_create( mem_heap_zalloc(static_cast( cache->self_heap->arg), n_bytes)); + index_cache->sel_graph = static_cast( + mem_heap_zalloc(static_cast( + cache->self_heap->arg), n_bytes)); + fts_index_cache_init(cache->sync_heap, index_cache); if (cache->get_docs) { @@ -1041,6 +1039,13 @@ fts_cache_clear( index_cache->ins_graph[j] = NULL; } + + if (index_cache->sel_graph[j] != NULL) { + + que_graph_free(index_cache->sel_graph[j]); + + index_cache->sel_graph[j] = NULL; + } } index_cache->doc_stats = NULL; @@ -1333,7 +1338,8 @@ fts_cache_add_doc( ib_vector_last(word->nodes)); } - if (!fts_node || fts_node->ilist_size > FTS_ILIST_MAX_SIZE + if (fts_node == NULL || fts_node->synced + || fts_node->ilist_size > FTS_ILIST_MAX_SIZE || doc_id < fts_node->last_doc_id) { fts_node = static_cast( @@ -3320,7 +3326,7 @@ fts_add_doc_from_tuple( if (cache->total_size > fts_max_cache_size / 5 || fts_need_sync) { - fts_sync(cache->sync); + fts_sync(cache->sync, true, false); } mtr_start(&mtr); @@ -3356,7 +3362,7 @@ fts_add_doc_by_id( dict_index_t* fts_id_index; ibool is_id_cluster; fts_cache_t* cache = ftt->table->fts->cache; - bool need_sync= false; + ut_ad(cache->get_docs); /* If Doc ID has been supplied by the user, then the table @@ -3496,32 +3502,44 @@ fts_add_doc_by_id( get_doc->index_cache, doc_id, doc.tokens); - /** FTS cache sync should happen - frequently. Because user thread - shouldn't hold the cache lock for - longer time. So cache should sync - whenever cache size exceeds 512 KB */ - need_sync = - cache->total_size > 512*1024; + bool need_sync = !cache->sync->in_progress + && (fts_need_sync + || (cache->total_size + - cache->total_size_at_sync) + > fts_max_cache_size / 10); + if (need_sync) { + cache->total_size_at_sync = + cache->total_size; + } mysql_mutex_unlock(&table->fts->cache->lock); DBUG_EXECUTE_IF( "fts_instrument_sync", - fts_sync_table(table); + fts_optimize_request_sync_table(table); + mysql_mutex_lock(&cache->lock); + if (cache->sync->in_progress) + my_cond_wait( + &cache->sync->cond, + &cache->lock.m_mutex); + mysql_mutex_unlock(&cache->lock); ); DBUG_EXECUTE_IF( "fts_instrument_sync_debug", - fts_sync(cache->sync); + fts_sync(cache->sync, true, true); ); DEBUG_SYNC_C("fts_instrument_sync_request"); DBUG_EXECUTE_IF( "fts_instrument_sync_request", - need_sync= true; + fts_optimize_request_sync_table(table); ); + if (need_sync) { + fts_optimize_request_sync_table(table); + } + mtr_start(&mtr); if (i < num_idx - 1) { @@ -3547,10 +3565,6 @@ func_exit: ut_free(pcur.old_rec_buf); mem_heap_free(heap); - - if (need_sync) { - fts_sync_table(table); - } } @@ -3910,13 +3924,15 @@ static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t fts_sync_write_words( trx_t* trx, - fts_index_cache_t* index_cache) + fts_index_cache_t* index_cache, + bool unlock_cache) { fts_table_t fts_table; ulint n_nodes = 0; ulint n_words = 0; const ib_rbt_node_t* rbt_node; dberr_t error = DB_SUCCESS; + ibool print_error = FALSE; dict_table_t* table = index_cache->index->table; FTS_INIT_INDEX_TABLE( @@ -3947,36 +3963,53 @@ fts_sync_write_words( fts_table.suffix = fts_get_suffix(selected); + /* We iterate over all the nodes even if there was an error */ for (i = 0; i < ib_vector_size(word->nodes); ++i) { fts_node_t* fts_node = static_cast( ib_vector_get(word->nodes, i)); - error = fts_write_node( - trx, &index_cache->ins_graph[selected], - &fts_table, &word->text, fts_node); + if (fts_node->synced) { + continue; + } else { + fts_node->synced = true; + } - DEBUG_SYNC_C("fts_write_node"); - DBUG_EXECUTE_IF("fts_write_node_crash", + /*FIXME: we need to handle the error properly. */ + if (error == DB_SUCCESS) { + if (unlock_cache) { + mysql_mutex_unlock( + &table->fts->cache->lock); + } + + error = fts_write_node( + trx, + &index_cache->ins_graph[selected], + &fts_table, &word->text, fts_node); + + DEBUG_SYNC_C("fts_write_node"); + DBUG_EXECUTE_IF("fts_write_node_crash", DBUG_SUICIDE();); - DBUG_EXECUTE_IF("fts_instrument_sync_sleep", + DBUG_EXECUTE_IF( + "fts_instrument_sync_sleep", std::this_thread::sleep_for( std::chrono::seconds(1));); - if (error != DB_SUCCESS) { - goto err_exit; + if (unlock_cache) { + mysql_mutex_lock( + &table->fts->cache->lock); + } } } n_nodes += ib_vector_size(word->nodes); - if (UNIV_UNLIKELY(error != DB_SUCCESS)) { -err_exit: + if (UNIV_UNLIKELY(error != DB_SUCCESS) && !print_error) { ib::error() << "(" << error << ") writing" " word node to FTS auxiliary index table " << table->name; - break; + print_error = TRUE; } } @@ -4035,44 +4068,58 @@ fts_sync_index( ut_ad(rbt_validate(index_cache->words)); - return(fts_sync_write_words(trx, index_cache)); + return(fts_sync_write_words(trx, index_cache, sync->unlock_cache)); } -/** Rollback a sync operation -@param[in,out] sync sync state */ +/** Check if index cache has been synced completely +@param[in,out] index_cache index cache +@return true if index is synced, otherwise false. */ static -void -fts_sync_rollback( - fts_sync_t* sync) +bool +fts_sync_index_check( + fts_index_cache_t* index_cache) { - trx_t* trx = sync->trx; - fts_cache_t* cache = sync->table->fts->cache; + const ib_rbt_node_t* rbt_node; - for (ulint i = 0; i < ib_vector_size(cache->indexes); ++i) { - ulint j; - fts_index_cache_t* index_cache; + for (rbt_node = rbt_first(index_cache->words); + rbt_node != NULL; + rbt_node = rbt_next(index_cache->words, rbt_node)) { - index_cache = static_cast( - ib_vector_get(cache->indexes, i)); + fts_tokenizer_word_t* word; + word = rbt_value(fts_tokenizer_word_t, rbt_node); - for (j = 0; fts_index_selector[j].value; ++j) { + fts_node_t* fts_node; + fts_node = static_cast(ib_vector_last(word->nodes)); - if (index_cache->ins_graph[j] != NULL) { - - que_graph_free(index_cache->ins_graph[j]); - - index_cache->ins_graph[j] = NULL; - } + if (!fts_node->synced) { + return(false); } } - mysql_mutex_unlock(&cache->lock); + return(true); +} - fts_sql_rollback(trx); +/** Reset synced flag in index cache when rollback +@param[in,out] index_cache index cache */ +static +void +fts_sync_index_reset( + fts_index_cache_t* index_cache) +{ + const ib_rbt_node_t* rbt_node; - /* Avoid assertion in trx_t::free(). */ - trx->dict_operation_lock_mode = false; - trx->free(); + for (rbt_node = rbt_first(index_cache->words); + rbt_node != NULL; + rbt_node = rbt_next(index_cache->words, rbt_node)) { + + fts_tokenizer_word_t* word; + word = rbt_value(fts_tokenizer_word_t, rbt_node); + + fts_node_t* fts_node; + fts_node = static_cast(ib_vector_last(word->nodes)); + + fts_node->synced = false; + } } /** Commit the SYNC, change state of processed doc ids etc. @@ -4105,20 +4152,19 @@ fts_sync_commit( sync, cache->deleted_doc_ids); } + /* We need to do this within the deleted lock since fts_delete() can + attempt to add a deleted doc id to the cache deleted id array. */ + fts_cache_clear(cache); + DEBUG_SYNC_C("fts_deleted_doc_ids_clear"); + fts_cache_init(cache); + mysql_mutex_unlock(&cache->lock); + if (UNIV_LIKELY(error == DB_SUCCESS)) { - /* We need to do this within the deleted lock - since fts_delete() can attempt to add a deleted - doc id to the cache deleted id array. */ - fts_cache_clear(cache); - DEBUG_SYNC_C("fts_deleted_doc_ids_clear"); - fts_cache_init(cache); - mysql_mutex_unlock(&cache->lock); fts_sql_commit(trx); } else { + fts_sql_rollback(trx); ib::error() << "(" << error << ") during SYNC of " "table " << sync->table->name; - fts_sync_rollback(sync); - return error; } if (UNIV_UNLIKELY(fts_enable_diag_print) && elapsed_time) { @@ -4138,13 +4184,66 @@ fts_sync_commit( return(error); } +/** Rollback a sync operation +@param[in,out] sync sync state */ +static +void +fts_sync_rollback( + fts_sync_t* sync) +{ + trx_t* trx = sync->trx; + fts_cache_t* cache = sync->table->fts->cache; + + for (ulint i = 0; i < ib_vector_size(cache->indexes); ++i) { + ulint j; + fts_index_cache_t* index_cache; + + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + + /* Reset synced flag so nodes will not be skipped + in the next sync, see fts_sync_write_words(). */ + fts_sync_index_reset(index_cache); + + for (j = 0; fts_index_selector[j].value; ++j) { + + if (index_cache->ins_graph[j] != NULL) { + + que_graph_free(index_cache->ins_graph[j]); + + index_cache->ins_graph[j] = NULL; + } + + if (index_cache->sel_graph[j] != NULL) { + + que_graph_free(index_cache->sel_graph[j]); + + index_cache->sel_graph[j] = NULL; + } + } + } + + mysql_mutex_unlock(&cache->lock); + + fts_sql_rollback(trx); + + /* Avoid assertion in trx_t::free(). */ + trx->dict_operation_lock_mode = false; + trx->free(); +} + /** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] sync sync state @param[in] unlock_cache whether unlock cache lock when write node @param[in] wait whether wait when a sync is in progress @return DB_SUCCESS if all OK */ -static dberr_t fts_sync(fts_sync_t *sync) +static +dberr_t +fts_sync( + fts_sync_t* sync, + bool unlock_cache, + bool wait) { if (srv_read_only_mode) { return DB_READ_ONLY; @@ -4155,13 +4254,33 @@ static dberr_t fts_sync(fts_sync_t *sync) fts_cache_t* cache = sync->table->fts->cache; mysql_mutex_lock(&cache->lock); + + /* Check if cache is being synced. + Note: we release cache lock in fts_sync_write_words() to + avoid long wait for the lock by other threads. */ + if (sync->in_progress) { + if (!wait) { + mysql_mutex_unlock(&cache->lock); + return(DB_SUCCESS); + } + do { + my_cond_wait(&sync->cond, &cache->lock.m_mutex); + } while (sync->in_progress); + } + + sync->unlock_cache = unlock_cache; + sync->in_progress = true; + DEBUG_SYNC_C("fts_sync_begin"); fts_sync_begin(sync); +begin_sync: const size_t fts_cache_size= fts_max_cache_size; if (cache->total_size > fts_cache_size) { /* Avoid the case: sync never finish when insert/update keeps comming. */ + ut_ad(sync->unlock_cache); + sync->unlock_cache = false; ib::warn() << "Total InnoDB FTS size " << cache->total_size << " for the table " << cache->sync->table->name @@ -4185,23 +4304,52 @@ static dberr_t fts_sync(fts_sync_t *sync) error = fts_sync_index(sync, index_cache); if (error != DB_SUCCESS) { - goto err_exit; + goto end_sync; + } + + if (!sync->unlock_cache + && cache->total_size < fts_max_cache_size) { + /* Reset the unlock cache if the value + is less than innodb_ft_cache_size */ + sync->unlock_cache = true; } } DBUG_EXECUTE_IF("fts_instrument_sync_interrupted", + sync->interrupted = true; error = DB_INTERRUPTED; - goto err_exit; + goto end_sync; ); - if (error == DB_SUCCESS) { + /* Make sure all the caches are synced. */ + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + + if (index_cache->index->to_be_dropped + || fts_sync_index_check(index_cache)) { + continue; + } + + goto begin_sync; + } + +end_sync: + if (error == DB_SUCCESS && !sync->interrupted) { error = fts_sync_commit(sync); } else { -err_exit: fts_sync_rollback(sync); - return error; } + mysql_mutex_lock(&cache->lock); + ut_ad(sync->in_progress); + sync->interrupted = false; + sync->in_progress = false; + pthread_cond_broadcast(&sync->cond); + mysql_mutex_unlock(&cache->lock); + /* We need to check whether an optimize is required, for that we make copies of the two variables that control the trigger. These variables can change behind our back and we don't want to hold the @@ -4213,7 +4361,6 @@ err_exit: mysql_mutex_unlock(&cache->deleted_lock); - DEBUG_SYNC_C("fts_sync_end"); return(error); } @@ -4222,12 +4369,12 @@ FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] table fts table @param[in] wait whether wait for existing sync to finish @return DB_SUCCESS on success, error code on failure. */ -dberr_t fts_sync_table(dict_table_t* table) +dberr_t fts_sync_table(dict_table_t* table, bool wait) { ut_ad(table->fts); return table->space && !table->corrupted && table->fts->cache - ? fts_sync(table->fts->cache->sync) + ? fts_sync(table->fts->cache->sync, !wait, wait) : DB_SUCCESS; } diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index 7c40a25e6e7..fe31767d901 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -83,8 +83,9 @@ enum fts_msg_type_t { FTS_MSG_ADD_TABLE, /*!< Add table to the optimize thread's work queue */ - FTS_MSG_DEL_TABLE /*!< Remove a table from the optimize + FTS_MSG_DEL_TABLE, /*!< Remove a table from the optimize threads work queue */ + FTS_MSG_SYNC_TABLE /*!< Sync fts cache of a table */ }; /** Compressed list of words that have been read from FTS INDEX @@ -2624,6 +2625,36 @@ fts_optimize_remove_table( mysql_mutex_unlock(&fts_optimize_wq->mutex); } +/** Send sync fts cache for the table. +@param[in] table table to sync */ +void +fts_optimize_request_sync_table( + dict_table_t* table) +{ + /* if the optimize system not yet initialized, return */ + if (!fts_optimize_wq) { + return; + } + + mysql_mutex_lock(&fts_optimize_wq->mutex); + + /* FTS optimizer thread is already exited */ + if (fts_opt_start_shutdown) { + ib::info() << "Try to sync table " << table->name + << " after FTS optimize thread exiting."; + } else if (table->fts->sync_message) { + /* If the table already has SYNC message in + fts_optimize_wq queue then ignore it */ + } else { + add_msg(fts_optimize_create_msg(FTS_MSG_SYNC_TABLE, table)); + table->fts->sync_message = true; + DBUG_EXECUTE_IF("fts_optimize_wq_count_check", + DBUG_ASSERT(fts_optimize_wq->length <= 1000);); + } + + mysql_mutex_unlock(&fts_optimize_wq->mutex); +} + /** Add a table to fts_slots if it doesn't already exist. */ static bool fts_optimize_new_table(dict_table_t* table) { @@ -2765,8 +2796,7 @@ static void fts_optimize_sync_table(dict_table_t *table, if (sync_table->fts && sync_table->fts->cache && sync_table->is_accessible()) { - fts_sync_table(sync_table); - + fts_sync_table(sync_table, false); if (process_message) { mysql_mutex_lock(&fts_optimize_wq->mutex); @@ -2866,6 +2896,24 @@ retry_later: --n_tables; } break; + + case FTS_MSG_SYNC_TABLE: + if (UNIV_UNLIKELY(wsrep_sst_disable_writes)) { + add_msg(msg); + goto retry_later; + } + + DBUG_EXECUTE_IF( + "fts_instrument_msg_sync_sleep", + std::this_thread::sleep_for( + std::chrono::milliseconds( + 300));); + + fts_optimize_sync_table( + static_cast(msg->ptr), + true); + break; + default: ut_error; } @@ -2998,7 +3046,7 @@ void fts_sync_during_ddl(dict_table_t* table) if (!sync_message) return; - fts_sync_table(table); + fts_sync_table(table, false); mysql_mutex_lock(&fts_optimize_wq->mutex); table->fts->sync_message = false; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 1246ae7a8eb..461b222d3cf 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1536,6 +1536,7 @@ static void innodb_drop_database(handlerton*, char *path) mtr.commit(); for (pfs_os_file_t detached : to_close) os_file_close(detached); + /* Any changes must be persisted before we return. */ log_write_up_to(mtr.commit_lsn(), true); } diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 5ce41a9857c..406baf3e662 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -11604,8 +11604,12 @@ foreign_fail: ut_d(dict_table_check_for_dup_indexes( ctx->new_table, CHECK_ABORTED_OK)); - ut_ad(!ctx->new_table->fts - || fts_check_cached_index(ctx->new_table)); +#ifdef UNIV_DEBUG + if (!(ctx->new_table->fts != NULL + && ctx->new_table->fts->cache->sync->in_progress)) { + ut_a(fts_check_cached_index(ctx->new_table)); + } +#endif } unlock_and_close_files(deleted, trx); diff --git a/storage/innobase/include/buf0dblwr.h b/storage/innobase/include/buf0dblwr.h index 92b840d2f4c..9932b0e521f 100644 --- a/storage/innobase/include/buf0dblwr.h +++ b/storage/innobase/include/buf0dblwr.h @@ -66,8 +66,6 @@ class buf_dblwr_t bool batch_running; /** number of expected flush_buffered_writes_completed() calls */ unsigned flushing_buffered_writes; - /** pages submitted to flush_buffered_writes() */ - ulint pages_submitted; /** number of flush_buffered_writes_completed() calls */ ulint writes_completed; /** number of pages written by flush_buffered_writes_completed() */ @@ -94,9 +92,6 @@ public: /** Acquire the mutex */ void lock() { mysql_mutex_lock(&mutex); } - /** @return the number of submitted page writes */ - ulint submitted() const - { mysql_mutex_assert_owner(&mutex); return pages_submitted; } /** @return the number of completed batches */ ulint batches() const { mysql_mutex_assert_owner(&mutex); return writes_completed; } diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index f7ba22856f8..e4e0b2c9c74 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -1469,6 +1469,7 @@ public: if (space_list_last_opened == space) { + ut_ad(s != space_list.begin()); space_list_t::iterator prev= s; space_list_last_opened= &*--prev; } diff --git a/storage/innobase/include/fts0fts.h b/storage/innobase/include/fts0fts.h index 720fe7f25b9..c0151b44063 100644 --- a/storage/innobase/include/fts0fts.h +++ b/storage/innobase/include/fts0fts.h @@ -648,6 +648,12 @@ fts_optimize_remove_table( void fts_optimize_shutdown(); +/** Send sync fts cache for the table. +@param[in] table table to sync */ +void +fts_optimize_request_sync_table( + dict_table_t* table); + /**********************************************************************//** Take a FTS savepoint. */ void @@ -702,8 +708,9 @@ fts_savepoint_rollback_last_stmt( /** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] table fts table +@param[in] wait whether to wait for existing sync to finish @return DB_SUCCESS on success, error code on failure. */ -dberr_t fts_sync_table(dict_table_t* table); +dberr_t fts_sync_table(dict_table_t* table, bool wait = true); /****************************************************************//** Create an FTS index cache. */ diff --git a/storage/innobase/include/fts0types.h b/storage/innobase/include/fts0types.h index 04e99d595c5..fb278d543c4 100644 --- a/storage/innobase/include/fts0types.h +++ b/storage/innobase/include/fts0types.h @@ -75,6 +75,7 @@ struct fts_index_cache_t { que_t** ins_graph; /*!< Insert query graphs */ + que_t** sel_graph; /*!< Select query graphs */ CHARSET_INFO* charset; /*!< charset */ }; @@ -86,7 +87,35 @@ struct fts_stopword_t { CHARSET_INFO* charset; /*!< charset for stopword */ }; -struct fts_sync_t; +/** The SYNC state of the cache. There is one instance of this struct +associated with each ADD thread. */ +struct fts_sync_t { + trx_t* trx; /*!< The transaction used for SYNCing + the cache to disk */ + dict_table_t* table; /*!< Table with FTS index(es) */ + ulint max_cache_size; /*!< Max size in bytes of the cache */ + ibool cache_full; /*!< flag, when true it indicates that + we need to sync the cache to disk */ + ulint lower_index; /*!< the start index of the doc id + vector from where to start adding + documents to the FTS cache */ + ulint upper_index; /*!< max index of the doc id vector to + add to the FTS cache */ + ibool interrupted; /*!< TRUE if SYNC was interrupted */ + doc_id_t min_doc_id; /*!< The smallest doc id added to the + cache. It should equal to + doc_ids[lower_index] */ + doc_id_t max_doc_id; /*!< The doc id at which the cache was + noted as being full, we use this to + set the upper_limit field */ + time_t start_time; /*!< SYNC start time; only used if + fts_enable_diag_print */ + bool in_progress; /*!< flag whether sync is in progress.*/ + bool unlock_cache; /*!< flag whether unlock cache when + write fts node */ + /** condition variable for in_progress; used with table->fts->cache->lock */ + pthread_cond_t cond; +}; /** The cache for the FTS system. It is a memory-based inverted index that new entries are added to, until it grows over the configured maximum @@ -175,6 +204,7 @@ struct fts_node_t { ulint ilist_size_alloc; /*!< Allocated size of ilist in bytes */ + bool synced; /*!< flag whether the node is synced */ }; /** A tokenizer word. Contains information about one word. */ diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h index 50d2788c2be..cd596b4db46 100644 --- a/storage/innobase/include/log0log.h +++ b/storage/innobase/include/log0log.h @@ -518,11 +518,10 @@ public: /** Redo log system */ extern log_t log_sys; -inline void log_free_check() -{ - if (log_sys.check_flush_or_checkpoint()) - log_check_margins(); -} +/** Wait for a log checkpoint if needed. +NOTE that this function may only be called while not holding +any synchronization objects except dict_sys.latch. */ +void log_free_check(); /** Release the latches that protect log resizing. */ void log_resize_release(); diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h index 5576560dca8..81f1f2b0dc9 100644 --- a/storage/innobase/include/mtr0mtr.h +++ b/storage/innobase/include/mtr0mtr.h @@ -93,10 +93,16 @@ struct mtr_t { ATTRIBUTE_COLD void commit_shrink(fil_space_t &space); /** Commit a mini-transaction that is deleting or renaming a file. - @param space tablespace that is being renamed or deleted - @param name new file name (nullptr=the file will be deleted) + @param space tablespace that is being renamed or deleted + @param name new file name (nullptr=the file will be deleted) + @param detached_handle if detached_handle != nullptr and if space is detached + during the function execution the file handle if its + node will be set to OS_FILE_CLOSED, and the previous + value of the file handle will be assigned to the + address, pointed by detached_handle. @return whether the operation succeeded */ - ATTRIBUTE_COLD bool commit_file(fil_space_t &space, const char *name); + ATTRIBUTE_COLD bool commit_file(fil_space_t &space, const char *name, + pfs_os_file_t *detached_handle= nullptr); /** Commit a mini-transaction that did not modify any pages, but generated some redo log on a higher level, such as @@ -326,7 +332,7 @@ public: { mtr_memo_slot_t &slot= m_memo[savepoint]; ut_ad(slot.type <= MTR_MEMO_BUF_FIX); - ut_ad(type <= MTR_MEMO_BUF_FIX); + ut_ad(type < MTR_MEMO_S_LOCK); slot.type= type; } diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index 764071cfab9..13f9d3de3f8 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -1056,11 +1056,13 @@ size_t os_aio_pending_reads_approx(); /** @return number of pending writes */ size_t os_aio_pending_writes(); -/** Wait until there are no pending asynchronous writes. */ -void os_aio_wait_until_no_pending_writes(); +/** Wait until there are no pending asynchronous writes. +@param declare whether the wait will be declared in tpool */ +void os_aio_wait_until_no_pending_writes(bool declare); -/** Wait until all pending asynchronous reads have completed. */ -void os_aio_wait_until_no_pending_reads(); +/** Wait until all pending asynchronous reads have completed. +@param declare whether the wait will be declared in tpool */ +void os_aio_wait_until_no_pending_reads(bool declare); /** Prints info of the aio arrays. @param[in/out] file file where to print */ diff --git a/storage/innobase/include/trx0rseg.h b/storage/innobase/include/trx0rseg.h index 6e0eb547eb8..43e0c290d63 100644 --- a/storage/innobase/include/trx0rseg.h +++ b/storage/innobase/include/trx0rseg.h @@ -129,7 +129,8 @@ public: #endif } /** @return whether the segment is marked for undo truncation */ - bool skip_allocation() const { return ref_load() & SKIP; } + bool skip_allocation() const + { return ref.load(std::memory_order_acquire) & SKIP; } /** Increment the reference count */ void acquire() { ut_d(auto r=) ref.fetch_add(REF); ut_ad(!(r & SKIP)); } diff --git a/storage/innobase/include/trx0undo.h b/storage/innobase/include/trx0undo.h index 4728e7ef2bf..8adff09a3df 100644 --- a/storage/innobase/include/trx0undo.h +++ b/storage/innobase/include/trx0undo.h @@ -203,16 +203,18 @@ trx_undo_assign(trx_t* trx, dberr_t* err, mtr_t* mtr) MY_ATTRIBUTE((nonnull)); /** Assign an undo log for a transaction. A new undo log is created or a cached undo log reused. +@tparam is_temp whether this is temporary undo log @param[in,out] trx transaction @param[in] rseg rollback segment @param[out] undo the undo log -@param[out] err error code @param[in,out] mtr mini-transaction +@param[out] err error code @return the undo log block -@retval NULL on error */ +@retval nullptr on error */ +template buf_block_t* -trx_undo_assign_low(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** undo, - dberr_t* err, mtr_t* mtr) +trx_undo_assign_low(trx_t *trx, trx_rseg_t *rseg, trx_undo_t **undo, + mtr_t *mtr, dberr_t *err) MY_ATTRIBUTE((nonnull, warn_unused_result)); /******************************************************************//** Sets the state of the undo log segment at a transaction finish. diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 02c6649bc33..38175934d6f 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -1061,6 +1061,16 @@ ATTRIBUTE_COLD void log_check_margins() while (log_sys.check_flush_or_checkpoint()); } +/** Wait for a log checkpoint if needed. +NOTE that this function may only be called while not holding +any synchronization objects except dict_sys.latch. */ +void log_free_check() +{ + ut_ad(!lock_sys.is_writer()); + if (log_sys.check_flush_or_checkpoint()) + log_check_margins(); +} + extern void buf_resize_shutdown(); /** Make a checkpoint at the latest lsn on shutdown. */ diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index f11315af258..2d1c2a9419f 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -763,9 +763,10 @@ retry: if (!os_file_status(name->c_str(), &exists, &ftype) || !exists) goto processed; } - create(it, *name, static_cast - (1U << FSP_FLAGS_FCRC32_POS_MARKER | - FSP_FLAGS_FCRC32_PAGE_SSIZE()), nullptr, 0); + if (create(it, *name, static_cast + (1U << FSP_FLAGS_FCRC32_POS_MARKER | + FSP_FLAGS_FCRC32_PAGE_SSIZE()), nullptr, 0)) + mysql_mutex_unlock(&fil_system.mutex); } } else @@ -794,7 +795,7 @@ processed: @param flags FSP_SPACE_FLAGS @param crypt_data encryption metadata @param size tablespace size in pages - @return tablespace + @return tablespace; the caller must release fil_system.mutex @retval nullptr if crypt_data is invalid */ static fil_space_t *create(const recv_spaces_t::const_iterator &it, const std::string &name, uint32_t flags, @@ -806,6 +807,7 @@ processed: ut_free(crypt_data); return nullptr; } + mysql_mutex_lock(&fil_system.mutex); fil_space_t *space= fil_space_t::create(it->first, flags, FIL_TYPE_TABLESPACE, crypt_data); ut_ad(space); @@ -866,12 +868,13 @@ processed: space->free_limit= fsp_header_get_field(page, FSP_FREE_LIMIT); space->free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page); fil_node_t *node= UT_LIST_GET_FIRST(space->chain); + mysql_mutex_unlock(&fil_system.mutex); if (!space->acquire()) - { + { free_space: fil_space_free(it->first, false); goto next_item; - } + } if (os_file_write(IORequestWrite, node->name, node->handle, page, 0, fil_space_t::physical_size(flags)) != DB_SUCCESS) @@ -941,6 +944,7 @@ bool recv_sys_t::recover_deferred(recv_sys_t::map::iterator &p, space->free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page); fil_node_t *node= UT_LIST_GET_FIRST(space->chain); node->deferred= true; + mysql_mutex_unlock(&fil_system.mutex); if (!space->acquire()) goto release_and_fail; fil_names_dirty(space); @@ -964,8 +968,10 @@ bool recv_sys_t::recover_deferred(recv_sys_t::map::iterator &p, uint32_t(file_size / fil_space_t::physical_size(flags)); if (n_pages > size) { + mysql_mutex_lock(&fil_system.mutex); space->size= node->size= n_pages; space->set_committed_size(); + mysql_mutex_unlock(&fil_system.mutex); goto size_set; } } @@ -3489,7 +3495,7 @@ next_free_block: else { mysql_mutex_unlock(&mutex); - os_aio_wait_until_no_pending_reads(); + os_aio_wait_until_no_pending_reads(false); mysql_mutex_lock(&mutex); ut_ad(pages.empty()); } diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc index 6d31a55e8ed..fe90487ebec 100644 --- a/storage/innobase/mtr/mtr0mtr.cc +++ b/storage/innobase/mtr/mtr0mtr.cc @@ -594,8 +594,14 @@ void mtr_t::commit_shrink(fil_space_t &space) /** Commit a mini-transaction that is deleting or renaming a file. @param space tablespace that is being renamed or deleted @param name new file name (nullptr=the file will be deleted) +@param detached_handle if detached_handle != nullptr and if space is detached + during the function execution the file handle if its + node will be set to OS_FILE_CLOSED, and the previous + value of the file handle will be assigned to the + address, pointed by detached_handle. @return whether the operation succeeded */ -bool mtr_t::commit_file(fil_space_t &space, const char *name) +bool mtr_t::commit_file(fil_space_t &space, const char *name, + pfs_os_file_t *detached_handle) { ut_ad(is_active()); ut_ad(!high_level_read_only); @@ -683,7 +689,9 @@ bool mtr_t::commit_file(fil_space_t &space, const char *name) ut_ad(!space.referenced()); ut_ad(space.is_stopping()); - fil_system.detach(&space, true); + pfs_os_file_t handle = fil_system.detach(&space, true); + if (detached_handle) + *detached_handle = handle; mysql_mutex_unlock(&fil_system.mutex); success= true; diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index c19df2f52a5..08f525be314 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3423,9 +3423,8 @@ static void io_callback(tpool::aiocb *cb) else { ut_ad(write_slots->contains(cb)); - const IORequest req{request}; + fil_aio_callback(request); write_slots->release(cb); - fil_aio_callback(req); } } @@ -3669,9 +3668,9 @@ void os_aio_free() } /** Wait until there are no pending asynchronous writes. */ -static void os_aio_wait_until_no_pending_writes_low() +static void os_aio_wait_until_no_pending_writes_low(bool declare) { - bool notify_wait = write_slots->pending_io_count() > 0; + const bool notify_wait= declare && write_slots->pending_io_count(); if (notify_wait) tpool::tpool_wait_begin(); @@ -3682,10 +3681,11 @@ static void os_aio_wait_until_no_pending_writes_low() tpool::tpool_wait_end(); } -/** Wait until there are no pending asynchronous writes. */ -void os_aio_wait_until_no_pending_writes() +/** Wait until there are no pending asynchronous writes. +@param declare whether the wait will be declared in tpool */ +void os_aio_wait_until_no_pending_writes(bool declare) { - os_aio_wait_until_no_pending_writes_low(); + os_aio_wait_until_no_pending_writes_low(declare); buf_dblwr.wait_flush_buffered_writes(); } @@ -3713,10 +3713,11 @@ size_t os_aio_pending_writes() return pending; } -/** Wait until all pending asynchronous reads have completed. */ -void os_aio_wait_until_no_pending_reads() +/** Wait until all pending asynchronous reads have completed. +@param declare whether the wait will be declared in tpool */ +void os_aio_wait_until_no_pending_reads(bool declare) { - const auto notify_wait= read_slots->pending_io_count(); + const bool notify_wait= declare && read_slots->pending_io_count(); if (notify_wait) tpool::tpool_wait_begin(); diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc index 1f7aece46d1..3f8e48763ea 100644 --- a/storage/innobase/rem/rem0rec.cc +++ b/storage/innobase/rem/rem0rec.cc @@ -242,9 +242,9 @@ enum rec_leaf_format { REC_LEAF_INSTANT }; -#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 11 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 12 # pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" /* GCC 5 to 10 need this */ +# pragma GCC diagnostic ignored "-Wconversion" /* GCC 5 to 11 need this */ #endif /** Determine the offset to each field in a leaf-page record in ROW_FORMAT=COMPACT,DYNAMIC,COMPRESSED. diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index a82bbc7cde6..b35783f1a92 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -758,11 +758,6 @@ error: row_field, field, col->len, old_table->space->zip_size(), conv_heap); - } else { - /* Field length mismatch should not - happen when rebuilding redundant row - format table. */ - ut_ad(index->table->not_redundant()); } } } diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 0a2647e8d6d..f716625ea59 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -162,8 +162,9 @@ close_and_exit: ut_ad("corrupted SYS_INDEXES record" == 0); } - if (const uint32_t space_id = dict_drop_index_tree( - &node->pcur, nullptr, &mtr)) { + const uint32_t space_id = dict_drop_index_tree( + &node->pcur, nullptr, &mtr); + if (space_id) { if (table) { if (table->get_ref_count() == 0) { dict_sys.remove(table); diff --git a/storage/innobase/row/row0quiesce.cc b/storage/innobase/row/row0quiesce.cc index 059aee6f140..5b0676a3e0d 100644 --- a/storage/innobase/row/row0quiesce.cc +++ b/storage/innobase/row/row0quiesce.cc @@ -540,7 +540,7 @@ row_quiesce_table_start( if (!trx_is_interrupted(trx)) { /* Ensure that all asynchronous IO is completed. */ - os_aio_wait_until_no_pending_writes(); + os_aio_wait_until_no_pending_writes(true); table->space->flush(); if (row_quiesce_write_cfg(table, trx->mysql_thd) diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc index 6b4393d4113..f0f1ba74f26 100644 --- a/storage/innobase/row/row0uins.cc +++ b/storage/innobase/row/row0uins.cc @@ -146,8 +146,9 @@ restart: pfs_os_file_t d = OS_FILE_CLOSED; - if (const uint32_t space_id = dict_drop_index_tree( - &node->pcur, node->trx, &mtr)) { + const uint32_t space_id = dict_drop_index_tree( + &node->pcur, node->trx, &mtr); + if (space_id) { if (table) { lock_release_on_rollback(node->trx, table); diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc index 987d3d185d9..a9643f4794d 100644 --- a/storage/innobase/srv/srv0mon.cc +++ b/storage/innobase/srv/srv0mon.cc @@ -647,16 +647,18 @@ static monitor_info_t innodb_counter_info[] = {"trx_rseg_history_len", "transaction", "Length of the TRX_RSEG_HISTORY list", static_cast( - MONITOR_EXISTING | MONITOR_DISPLAY_CURRENT | MONITOR_DEFAULT_ON), + MONITOR_EXISTING | MONITOR_DISPLAY_CURRENT), MONITOR_DEFAULT_START, MONITOR_RSEG_HISTORY_LEN}, {"trx_undo_slots_used", "transaction", "Number of undo slots used", - MONITOR_NONE, + static_cast( + MONITOR_EXISTING | MONITOR_DISPLAY_CURRENT), MONITOR_DEFAULT_START, MONITOR_NUM_UNDO_SLOT_USED}, {"trx_undo_slots_cached", "transaction", "Number of undo slots cached", - MONITOR_NONE, + static_cast( + MONITOR_EXISTING | MONITOR_DISPLAY_CURRENT | MONITOR_DEFAULT_ON), MONITOR_DEFAULT_START, MONITOR_NUM_UNDO_SLOT_CACHED}, {"trx_rseg_current_size", "transaction", @@ -1211,6 +1213,24 @@ TPOOL_SUPPRESS_TSAN static ulint srv_mon_get_rseg_size() return size; } +/** @return number of used undo log slots */ +TPOOL_SUPPRESS_TSAN static ulint srv_mon_get_rseg_used() +{ + ulint size= 0; + for (const auto &rseg : trx_sys.rseg_array) + size+= UT_LIST_GET_LEN(rseg.undo_list); + return size; +} + +/** @return number of cached undo log slots */ +TPOOL_SUPPRESS_TSAN static ulint srv_mon_get_rseg_cached() +{ + ulint size= 0; + for (const auto &rseg : trx_sys.rseg_array) + size+= UT_LIST_GET_LEN(rseg.undo_cached); + return size; +} + /****************************************************************//** This function consolidates some existing server counters used by "system status variables". These existing system variables do not have @@ -1448,7 +1468,12 @@ srv_mon_process_existing_counter( case MONITOR_RSEG_CUR_SIZE: value = srv_mon_get_rseg_size(); break; - + case MONITOR_NUM_UNDO_SLOT_USED: + value = srv_mon_get_rseg_used(); + break; + case MONITOR_NUM_UNDO_SLOT_CACHED: + value = srv_mon_get_rseg_cached(); + break; case MONITOR_OVLD_N_FILE_OPENED: value = fil_system.n_open; break; @@ -1527,7 +1552,6 @@ srv_mon_process_existing_counter( case MONITOR_TIMEOUT: value = lock_sys.timeouts; break; - default: ut_error; } diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index d8babd40468..74470f45bc5 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -898,12 +898,13 @@ srv_export_innodb_status(void) export_vars.innodb_data_writes = os_n_file_writes; buf_dblwr.lock(); - ulint dblwr = buf_dblwr.submitted(); - export_vars.innodb_dblwr_pages_written = buf_dblwr.written(); + ulint dblwr = buf_dblwr.written(); + export_vars.innodb_dblwr_pages_written = dblwr; export_vars.innodb_dblwr_writes = buf_dblwr.batches(); buf_dblwr.unlock(); - export_vars.innodb_data_written = srv_stats.data_written + dblwr; + export_vars.innodb_data_written = srv_stats.data_written + + (dblwr << srv_page_size_shift); export_vars.innodb_buffer_pool_bytes_data = buf_pool.stat.LRU_bytes diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index ad36ee58577..33545f42d05 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -692,14 +692,12 @@ err_exit: fil_set_max_space_id_if_bigger(space_id); + mysql_mutex_lock(&fil_system.mutex); fil_space_t *space= fil_space_t::create(space_id, fsp_flags, FIL_TYPE_TABLESPACE, nullptr, FIL_ENCRYPTION_DEFAULT, true); - ut_a(fil_validate()); - ut_a(space); - + ut_ad(space); fil_node_t *file= space->add(name, fh, 0, false, true); - mysql_mutex_lock(&fil_system.mutex); if (create) { @@ -1098,10 +1096,10 @@ same_size: ut_ad(flushed_lsn == log_sys.get_lsn()); ut_ad(!os_aio_pending_reads()); - ut_ad(!os_aio_pending_writes()); ut_d(mysql_mutex_lock(&buf_pool.flush_list_mutex)); ut_ad(!buf_pool.get_oldest_modification(0)); ut_d(mysql_mutex_unlock(&buf_pool.flush_list_mutex)); + ut_d(os_aio_wait_until_no_pending_writes(false)); DBUG_RETURN(flushed_lsn); } diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index 841b014019b..d6a75a67303 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -274,13 +274,11 @@ trx_purge_add_undo_to_history(const trx_t* trx, trx_undo_t*& undo, mtr_t* mtr) if (undo->state != TRX_UNDO_CACHED) { /* The undo log segment will not be reused */ ut_a(undo->id < TRX_RSEG_N_SLOTS); - compile_time_assert(FIL_NULL == 0xffffffff); + static_assert(FIL_NULL == 0xffffffff, ""); mtr->memset(rseg_header, TRX_RSEG + TRX_RSEG_UNDO_SLOTS + undo->id * TRX_RSEG_SLOT_SIZE, 4, 0xff); - MONITOR_DEC(MONITOR_NUM_UNDO_SLOT_USED); - uint32_t hist_size = mach_read_from_4( TRX_RSEG_HISTORY_SIZE + TRX_RSEG + rseg_header->page.frame); @@ -362,7 +360,6 @@ trx_purge_add_undo_to_history(const trx_t* trx, trx_undo_t*& undo, mtr_t* mtr) if (undo->state == TRX_UNDO_CACHED) { UT_LIST_ADD_FIRST(rseg->undo_cached, undo); - MONITOR_INC(MONITOR_NUM_UNDO_SLOT_CACHED); } else { ut_ad(undo->state == TRX_UNDO_TO_PURGE); ut_free(undo); @@ -384,161 +381,168 @@ static dberr_t trx_purge_remove_log_hdr(buf_block_t *rseg, buf_block_t* log, uint16_t(offset + TRX_UNDO_HISTORY_NODE), mtr); } -MY_ATTRIBUTE((nonnull, warn_unused_result)) -/** Free an undo log segment, and remove the header from the history list. -@param[in,out] mtr mini-transaction -@param[in,out] rseg rollback segment -@param[in] hdr_addr file address of log_hdr -@return error code */ -static dberr_t -trx_purge_free_segment(mtr_t &mtr, trx_rseg_t* rseg, fil_addr_t hdr_addr) +/** Free an undo log segment. +@param block rollback segment header page +@param mtr mini-transaction */ +static void trx_purge_free_segment(buf_block_t *block, mtr_t &mtr) { - mtr.commit(); - log_free_check(); - mtr.start(); - - const page_id_t hdr_page_id{rseg->space->id, hdr_addr.page}; - dberr_t err; - buf_block_t *rseg_hdr= rseg->get(&mtr, &err); - if (!rseg_hdr) - return err; - buf_block_t *block= buf_page_get_gen(hdr_page_id, 0, RW_X_LATCH, - nullptr, BUF_GET_POSSIBLY_FREED, - &mtr, &err); - if (!block) - return err; - - const uint32_t seg_size= - flst_get_len(TRX_UNDO_SEG_HDR + TRX_UNDO_PAGE_LIST + block->page.frame); - - err= trx_purge_remove_log_hdr(rseg_hdr, block, hdr_addr.boffset, &mtr); - if (UNIV_UNLIKELY(err != DB_SUCCESS)) - return err; - - ut_ad(rseg->curr_size >= seg_size); - rseg->curr_size-= seg_size; - rseg->history_size--; - - byte *hist= TRX_RSEG + TRX_RSEG_HISTORY_SIZE + rseg_hdr->page.frame; - ut_ad(mach_read_from_4(hist) >= seg_size); - mtr.write<4>(*rseg_hdr, hist, mach_read_from_4(hist) - seg_size); - while (!fseg_free_step_not_header(TRX_UNDO_SEG_HDR + TRX_UNDO_FSEG_HEADER + block->page.frame, &mtr)) { block->fix(); + const page_id_t id{block->page.id()}; mtr.commit(); /* NOTE: If the server is killed after the log that was produced up to this point was written, and before the log from the mtr.commit() in our caller is written, then the pages belonging to the undo log will become unaccessible garbage. - This does not matters when using multiple innodb_undo_tablespaces; + This does not matter when using multiple innodb_undo_tablespaces; innodb_undo_log_truncate=ON will be able to reclaim the space. */ log_free_check(); mtr.start(); block->page.lock.x_lock(); - mtr.memo_push(block, MTR_MEMO_PAGE_X_MODIFY); + if (UNIV_UNLIKELY(block->page.id() != id)) + { + block->unfix(); + block->page.lock.x_unlock(); + block= buf_page_get_gen(id, 0, RW_X_LATCH, nullptr, BUF_GET, &mtr); + if (!block) + return; + } + else + mtr.memo_push(block, MTR_MEMO_PAGE_X_MODIFY); } while (!fseg_free_step(TRX_UNDO_SEG_HDR + TRX_UNDO_FSEG_HEADER + block->page.frame, &mtr)); - return DB_SUCCESS; } /** Remove unnecessary history data from a rollback segment. @param[in,out] rseg rollback segment @param[in] limit truncate anything before this @return error code */ -static -dberr_t -trx_purge_truncate_rseg_history( - trx_rseg_t& rseg, - const purge_sys_t::iterator& limit) +static dberr_t +trx_purge_truncate_rseg_history(trx_rseg_t& rseg, + const purge_sys_t::iterator& limit) { - fil_addr_t hdr_addr; - mtr_t mtr; + fil_addr_t hdr_addr; + mtr_t mtr; - mtr.start(); + log_free_check(); + mtr.start(); - dberr_t err; - buf_block_t* rseg_hdr = rseg.get(&mtr, &err); - if (!rseg_hdr) { - goto func_exit; - } + dberr_t err; +reget: + buf_block_t *rseg_hdr= rseg.get(&mtr, &err); + if (!rseg_hdr) + { +func_exit: + mtr.commit(); + return err; + } - hdr_addr = flst_get_last(TRX_RSEG + TRX_RSEG_HISTORY - + rseg_hdr->page.frame); - hdr_addr.boffset = static_cast(hdr_addr.boffset - - TRX_UNDO_HISTORY_NODE); + hdr_addr= flst_get_last(TRX_RSEG + TRX_RSEG_HISTORY + rseg_hdr->page.frame); + hdr_addr.boffset= static_cast(hdr_addr.boffset - + TRX_UNDO_HISTORY_NODE); loop: - if (hdr_addr.page == FIL_NULL) { -func_exit: - mtr.commit(); - return err; - } + if (hdr_addr.page == FIL_NULL) + goto func_exit; - buf_block_t* block = buf_page_get_gen(page_id_t(rseg.space->id, - hdr_addr.page), - 0, RW_X_LATCH, nullptr, - BUF_GET_POSSIBLY_FREED, - &mtr, &err); - if (!block) { - goto func_exit; - } + buf_block_t *b= + buf_page_get_gen(page_id_t(rseg.space->id, hdr_addr.page), + 0, RW_X_LATCH, nullptr, BUF_GET_POSSIBLY_FREED, + &mtr, &err); + if (!b) + goto func_exit; - const trx_id_t undo_trx_no = mach_read_from_8( - block->page.frame + hdr_addr.boffset + TRX_UNDO_TRX_NO); + const trx_id_t undo_trx_no= + mach_read_from_8(b->page.frame + hdr_addr.boffset + TRX_UNDO_TRX_NO); - if (undo_trx_no >= limit.trx_no) { - if (undo_trx_no == limit.trx_no) { - err = trx_undo_truncate_start( - &rseg, hdr_addr.page, - hdr_addr.boffset, limit.undo_no); - } + if (undo_trx_no >= limit.trx_no) + { + if (undo_trx_no == limit.trx_no) + err = trx_undo_truncate_start(&rseg, hdr_addr.page, + hdr_addr.boffset, limit.undo_no); + goto func_exit; + } - goto func_exit; - } + fil_addr_t prev_hdr_addr= + flst_get_prev_addr(b->page.frame + hdr_addr.boffset + + TRX_UNDO_HISTORY_NODE); + prev_hdr_addr.boffset= static_cast(prev_hdr_addr.boffset - + TRX_UNDO_HISTORY_NODE); + err= trx_purge_remove_log_hdr(rseg_hdr, b, hdr_addr.boffset, &mtr); + if (UNIV_UNLIKELY(err != DB_SUCCESS)) + goto func_exit; - fil_addr_t prev_hdr_addr = flst_get_prev_addr( - block->page.frame + hdr_addr.boffset + TRX_UNDO_HISTORY_NODE); - prev_hdr_addr.boffset = static_cast(prev_hdr_addr.boffset - - TRX_UNDO_HISTORY_NODE); + rseg_hdr->fix(); - if (!rseg.is_referenced() - && rseg.needs_purge <= (purge_sys.head.trx_no - ? purge_sys.head.trx_no - : purge_sys.tail.trx_no) - && mach_read_from_2(TRX_UNDO_SEG_HDR + TRX_UNDO_STATE - + block->page.frame) - == TRX_UNDO_TO_PURGE - && !mach_read_from_2(block->page.frame + hdr_addr.boffset - + TRX_UNDO_NEXT_LOG)) { - /* We can free the whole log segment. - This will call trx_purge_remove_log_hdr(). */ - err = trx_purge_free_segment(mtr, &rseg, hdr_addr); - } else { - /* Remove the log hdr from the rseg history. */ - rseg.history_size--; - err = trx_purge_remove_log_hdr(rseg_hdr, block, - hdr_addr.boffset, &mtr); - } + if (mach_read_from_2(b->page.frame + hdr_addr.boffset + TRX_UNDO_NEXT_LOG) || + rseg.is_referenced() || + rseg.needs_purge > (purge_sys.head.trx_no + ? purge_sys.head.trx_no + : purge_sys.tail.trx_no)) + /* We cannot free the entire undo page. */; + else + { + const uint32_t seg_size= + flst_get_len(TRX_UNDO_SEG_HDR + TRX_UNDO_PAGE_LIST + b->page.frame); + switch (mach_read_from_2(TRX_UNDO_SEG_HDR + TRX_UNDO_STATE + + b->page.frame)) { + case TRX_UNDO_TO_PURGE: + { + byte *hist= TRX_RSEG + TRX_RSEG_HISTORY_SIZE + rseg_hdr->page.frame; + ut_ad(mach_read_from_4(hist) >= seg_size); + mtr.write<4>(*rseg_hdr, hist, mach_read_from_4(hist) - seg_size); + } + free_segment: + ut_ad(rseg.curr_size >= seg_size); + rseg.curr_size-= seg_size; + trx_purge_free_segment(b, mtr); + break; + case TRX_UNDO_CACHED: + /* rseg.undo_cached must point to this page */ + trx_undo_t *undo= UT_LIST_GET_FIRST(rseg.undo_cached); + for (; undo; undo= UT_LIST_GET_NEXT(undo_list, undo)) + if (undo->hdr_page_no == hdr_addr.page) + goto found_cached; + ut_ad("inconsistent undo logs" == 0); + break; + found_cached: + UT_LIST_REMOVE(rseg.undo_cached, undo); + static_assert(FIL_NULL == 0xffffffff, ""); + if (UNIV_UNLIKELY(mach_read_from_4(TRX_RSEG + TRX_RSEG_FORMAT + + rseg_hdr->page.frame))) + trx_rseg_format_upgrade(rseg_hdr, &mtr); + mtr.memset(rseg_hdr, TRX_RSEG + TRX_RSEG_UNDO_SLOTS + + undo->id * TRX_RSEG_SLOT_SIZE, 4, 0xff); + ut_free(undo); + mtr.write<8,mtr_t::MAYBE_NOP>(*rseg_hdr, TRX_RSEG + TRX_RSEG_MAX_TRX_ID + + rseg_hdr->page.frame, + trx_sys.get_max_trx_id() - 1); + goto free_segment; + } + } - mtr.commit(); - if (err != DB_SUCCESS) { - return err; - } - mtr.start(); + hdr_addr= prev_hdr_addr; - hdr_addr = prev_hdr_addr; + mtr.commit(); + ut_ad(rseg.history_size > 0); + rseg.history_size--; + log_free_check(); + mtr.start(); + rseg_hdr->page.lock.x_lock(); + if (UNIV_UNLIKELY(rseg_hdr->page.id() != rseg.page_id())) + { + rseg_hdr->unfix(); + rseg_hdr->page.lock.x_unlock(); + goto reget; + } + mtr.memo_push(rseg_hdr, MTR_MEMO_PAGE_X_MODIFY); - rseg_hdr = rseg.get(&mtr, &err); - if (!rseg_hdr) { - goto func_exit; - } - - goto loop; + goto loop; } /** Cleanse purge queue to remove the rseg that reside in undo-tablespace diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index e70516a2d2d..c1a7b08b717 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -1875,26 +1875,28 @@ trx_undo_report_row_operation( } mtr_t mtr; + dberr_t err; mtr.start(); trx_undo_t** pundo; trx_rseg_t* rseg; const bool is_temp = index->table->is_temporary(); + buf_block_t* undo_block; if (is_temp) { mtr.set_log_mode(MTR_LOG_NO_REDO); - rseg = trx->get_temp_rseg(); pundo = &trx->rsegs.m_noredo.undo; + undo_block = trx_undo_assign_low(trx, rseg, pundo, + &mtr, &err); } else { ut_ad(!trx->read_only); ut_ad(trx->id); pundo = &trx->rsegs.m_redo.undo; rseg = trx->rsegs.m_redo.rseg; + undo_block = trx_undo_assign_low(trx, rseg, pundo, + &mtr, &err); } - dberr_t err; - buf_block_t* undo_block = trx_undo_assign_low(trx, rseg, pundo, - &err, &mtr); trx_undo_t* undo = *pundo; ut_ad((err == DB_SUCCESS) == (undo_block != NULL)); if (UNIV_UNLIKELY(undo_block == NULL)) { diff --git a/storage/innobase/trx/trx0rseg.cc b/storage/innobase/trx/trx0rseg.cc index 1dc3c18fc09..e730530adb2 100644 --- a/storage/innobase/trx/trx0rseg.cc +++ b/storage/innobase/trx/trx0rseg.cc @@ -395,7 +395,6 @@ void trx_rseg_t::reinit(uint32_t page) { next= UT_LIST_GET_NEXT(undo_list, undo); UT_LIST_REMOVE(undo_cached, undo); - MONITOR_DEC(MONITOR_NUM_UNDO_SLOT_CACHED); ut_free(undo); } @@ -404,6 +403,7 @@ void trx_rseg_t::reinit(uint32_t page) last_commit_and_offset= 0; last_page_no= FIL_NULL; curr_size= 1; + ref.store(0, std::memory_order_release); } /** Read the undo log lists. @@ -428,7 +428,6 @@ static dberr_t trx_undo_lists_init(trx_rseg_t *rseg, if (is_undo_empty) is_undo_empty= !undo->size || undo->state == TRX_UNDO_CACHED; rseg->curr_size+= undo->size; - MONITOR_INC(MONITOR_NUM_UNDO_SLOT_USED); } } diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index e88f7824ba6..0f85aec540f 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -816,28 +816,17 @@ static void trx_assign_rseg_low(trx_t *trx) static Atomic_counter rseg_slot; unsigned slot = rseg_slot++ % TRX_SYS_N_RSEGS; ut_d(if (trx_rseg_n_slots_debug) slot = 0); + ut_d(const auto start_scan_slot = slot); + ut_d(bool look_for_rollover = false); trx_rseg_t* rseg; -#ifdef UNIV_DEBUG - ulint start_scan_slot = slot; - bool look_for_rollover = false; -#endif /* UNIV_DEBUG */ - bool allocated; do { for (;;) { rseg = &trx_sys.rseg_array[slot]; - -#ifdef UNIV_DEBUG - /* Ensure that we are not revisiting the same - slot that we have already inspected. */ - if (look_for_rollover) { - ut_ad(start_scan_slot != slot); - } - look_for_rollover = true; -#endif /* UNIV_DEBUG */ - + ut_ad(!look_for_rollover || start_scan_slot != slot); + ut_d(look_for_rollover = true); ut_d(if (!trx_rseg_n_slots_debug)) slot = (slot + 1) % TRX_SYS_N_RSEGS; @@ -1038,7 +1027,13 @@ trx_write_serialisation_history( mtr_t temp_mtr; temp_mtr.start(); temp_mtr.set_log_mode(MTR_LOG_NO_REDO); - trx_undo_set_state_at_finish(undo, &temp_mtr); + buf_block_t* block= buf_page_get(page_id_t(SRV_TMP_SPACE_ID, + undo->hdr_page_no), + 0, RW_X_LATCH, mtr); + ut_a(block); + temp_mtr.write<2>(*block, TRX_UNDO_SEG_HDR + TRX_UNDO_STATE + + block->page.frame, TRX_UNDO_TO_PURGE); + undo->state = TRX_UNDO_TO_PURGE; temp_mtr.commit(); } diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc index 3b9c598e745..cbbf316fe69 100644 --- a/storage/innobase/trx/trx0undo.cc +++ b/storage/innobase/trx/trx0undo.cc @@ -535,8 +535,6 @@ trx_undo_seg_create(fil_space_t *space, buf_block_t *rseg_hdr, ulint *id, + slot_no * TRX_RSEG_SLOT_SIZE + rseg_hdr->page.frame, block->page.id().page_no()); - MONITOR_INC(MONITOR_NUM_UNDO_SLOT_USED); - *err = DB_SUCCESS; return block; } @@ -991,7 +989,6 @@ static void trx_undo_seg_free(const trx_undo_t *undo) static_assert(FIL_NULL == 0xffffffff, "compatibility"); mtr.memset(rseg_header, TRX_RSEG + TRX_RSEG_UNDO_SLOTS + undo->id * TRX_RSEG_SLOT_SIZE, 4, 0xff); - MONITOR_DEC(MONITOR_NUM_UNDO_SLOT_USED); } } @@ -1150,7 +1147,6 @@ corrupted_type: UT_LIST_ADD_LAST(rseg->undo_list, undo); } else { UT_LIST_ADD_LAST(rseg->undo_cached, undo); - MONITOR_INC(MONITOR_NUM_UNDO_SLOT_CACHED); } mtr.commit(); @@ -1289,27 +1285,25 @@ trx_undo_create(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** undo, @param[in,out] rseg rollback segment @param[out] pundo the undo log memory object @param[in,out] mtr mini-transaction +@param[out] err error code @return the undo log block @retval NULL if none cached */ static buf_block_t* trx_undo_reuse_cached(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** pundo, - mtr_t* mtr) + mtr_t* mtr, dberr_t *err) { - if (rseg->is_persistent()) { - ut_ad(rseg->is_referenced()); - if (rseg->needs_purge <= trx->id) { - /* trx_purge_truncate_history() compares - rseg->needs_purge <= head.trx_no - so we need to compensate for that. - The rseg->needs_purge after crash - recovery would be at least trx->id + 1, - because that is the minimum possible value - assigned by trx_serialise() on commit. */ - rseg->needs_purge = trx->id + 1; - } - } else { - ut_ad(!rseg->is_referenced()); + ut_ad(rseg->is_persistent()); + ut_ad(rseg->is_referenced()); + if (rseg->needs_purge <= trx->id) { + /* trx_purge_truncate_history() compares + rseg->needs_purge <= head.trx_no + so we need to compensate for that. + The rseg->needs_purge after crash + recovery would be at least trx->id + 1, + because that is the minimum possible value + assigned by trx_serialise() on commit. */ + rseg->needs_purge = trx->id + 1; } trx_undo_t* undo = UT_LIST_GET_FIRST(rseg->undo_cached); @@ -1320,15 +1314,15 @@ trx_undo_reuse_cached(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** pundo, ut_ad(undo->size == 1); ut_ad(undo->id < TRX_RSEG_N_SLOTS); - buf_block_t* block = buf_page_get(page_id_t(undo->rseg->space->id, - undo->hdr_page_no), - 0, RW_X_LATCH, mtr); + buf_block_t* block = buf_page_get_gen(page_id_t(undo->rseg->space->id, + undo->hdr_page_no), + 0, RW_X_LATCH, nullptr, BUF_GET, + mtr, err); if (!block) { return NULL; } UT_LIST_REMOVE(rseg->undo_cached, undo); - MONITOR_DEC(MONITOR_NUM_UNDO_SLOT_CACHED); *pundo = undo; @@ -1374,11 +1368,12 @@ trx_undo_assign(trx_t* trx, dberr_t* err, mtr_t* mtr) BUF_GET, mtr, err); } + *err = DB_SUCCESS; trx_rseg_t* rseg = trx->rsegs.m_redo.rseg; rseg->latch.wr_lock(SRW_LOCK_CALL); buf_block_t* block = trx_undo_reuse_cached( - trx, rseg, &trx->rsegs.m_redo.undo, mtr); + trx, rseg, &trx->rsegs.m_redo.undo, mtr, err); if (!block) { block = trx_undo_create(trx, rseg, &trx->rsegs.m_redo.undo, @@ -1387,8 +1382,6 @@ trx_undo_assign(trx_t* trx, dberr_t* err, mtr_t* mtr) if (!block) { goto func_exit; } - } else { - *err = DB_SUCCESS; } UT_LIST_ADD_FIRST(rseg->undo_list, trx->rsegs.m_redo.undo); @@ -1400,18 +1393,20 @@ func_exit: /** Assign an undo log for a transaction. A new undo log is created or a cached undo log reused. +@tparam is_temp whether this is temporary undo log @param[in,out] trx transaction @param[in] rseg rollback segment @param[out] undo the undo log -@param[out] err error code @param[in,out] mtr mini-transaction +@param[out] err error code @return the undo log block -@retval NULL on error */ +@retval nullptr on error */ +template buf_block_t* -trx_undo_assign_low(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** undo, - dberr_t* err, mtr_t* mtr) +trx_undo_assign_low(trx_t *trx, trx_rseg_t *rseg, trx_undo_t **undo, + mtr_t *mtr, dberr_t *err) { - ut_d(const bool is_temp = rseg == trx->rsegs.m_noredo.rseg); + ut_ad(is_temp == (rseg == trx->rsegs.m_noredo.rseg)); ut_ad(is_temp || rseg == trx->rsegs.m_redo.rseg); ut_ad(undo == (is_temp ? &trx->rsegs.m_noredo.undo @@ -1431,19 +1426,24 @@ trx_undo_assign_low(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** undo, *err = DB_TOO_MANY_CONCURRENT_TRXS; return NULL; ); + *err = DB_SUCCESS; rseg->latch.wr_lock(SRW_LOCK_CALL); - buf_block_t* block = trx_undo_reuse_cached(trx, rseg, undo, mtr); - - if (!block) { - block = trx_undo_create(trx, rseg, undo, err, mtr); - ut_ad(!block == (*err != DB_SUCCESS)); - if (!block) { - goto func_exit; - } + buf_block_t* block; + if (is_temp) { + ut_ad(!UT_LIST_GET_LEN(rseg->undo_cached)); } else { - *err = DB_SUCCESS; + block = trx_undo_reuse_cached(trx, rseg, undo, mtr, err); + if (block) { + goto got_block; + } + } + block = trx_undo_create(trx, rseg, undo, err, mtr); + ut_ad(!block == (*err != DB_SUCCESS)); + if (!block) { + goto func_exit; } +got_block: UT_LIST_ADD_FIRST(rseg->undo_list, *undo); func_exit: @@ -1451,6 +1451,13 @@ func_exit: return block; } +template buf_block_t* +trx_undo_assign_low(trx_t *trx, trx_rseg_t *rseg, trx_undo_t **undo, + mtr_t *mtr, dberr_t *err); +template buf_block_t* +trx_undo_assign_low(trx_t *trx, trx_rseg_t *rseg, trx_undo_t **undo, + mtr_t *mtr, dberr_t *err); + /******************************************************************//** Sets the state of the undo log segment at a transaction finish. @return undo log segment header page, x-latched */ @@ -1461,6 +1468,7 @@ trx_undo_set_state_at_finish( mtr_t* mtr) /*!< in: mtr */ { ut_ad(undo->id < TRX_RSEG_N_SLOTS); + ut_ad(undo->rseg->is_persistent()); buf_block_t *block= buf_page_get(page_id_t(undo->rseg->space->id, undo->hdr_page_no), 0, @@ -1532,29 +1540,19 @@ the data can be discarded. @param undo temporary undo log */ void trx_undo_commit_cleanup(trx_undo_t *undo) { - trx_rseg_t* rseg = undo->rseg; - ut_ad(rseg->space == fil_system.temp_space); + trx_rseg_t *rseg= undo->rseg; + ut_ad(rseg->space == fil_system.temp_space); + rseg->latch.wr_lock(SRW_LOCK_CALL); - rseg->latch.wr_lock(SRW_LOCK_CALL); + UT_LIST_REMOVE(rseg->undo_list, undo); + ut_ad(undo->state == TRX_UNDO_TO_PURGE); + /* Delete first the undo log segment in the file */ + trx_undo_seg_free(undo); + ut_ad(rseg->curr_size > undo->size); + rseg->curr_size-= undo->size; - UT_LIST_REMOVE(rseg->undo_list, undo); - - if (undo->state == TRX_UNDO_CACHED) { - UT_LIST_ADD_FIRST(rseg->undo_cached, undo); - MONITOR_INC(MONITOR_NUM_UNDO_SLOT_CACHED); - undo = nullptr; - } else { - ut_ad(undo->state == TRX_UNDO_TO_PURGE); - - /* Delete first the undo log segment in the file */ - trx_undo_seg_free(undo); - - ut_ad(rseg->curr_size > undo->size); - rseg->curr_size -= undo->size; - } - - rseg->latch.wr_unlock(); - ut_free(undo); + rseg->latch.wr_unlock(); + ut_free(undo); } /** At shutdown, frees the undo logs of a transaction. */ diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake index 096185af08f..27a8616cfda 100644 --- a/storage/rocksdb/build_rocksdb.cmake +++ b/storage/rocksdb/build_rocksdb.cmake @@ -134,8 +134,8 @@ option(WITH_FALLOCATE "build with fallocate" ON) if(WITH_FALLOCATE AND UNIX) include(CheckCSourceCompiles) CHECK_C_SOURCE_COMPILES(" +#define _GNU_SOURCE #include -#include int main() { int fd = open(\"/dev/null\", 0); fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024); diff --git a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result index d2974438ecb..8612b922cab 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result @@ -133,8 +133,8 @@ trx_commits_insert_update transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NUL trx_rollbacks transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of transactions rolled back trx_rollbacks_savepoint transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of transactions rolled back to savepoint trx_rseg_history_len transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Length of the TRX_RSEG_HISTORY list -trx_undo_slots_used transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of undo slots used -trx_undo_slots_cached transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of undo slots cached +trx_undo_slots_used transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Number of undo slots used +trx_undo_slots_cached transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Number of undo slots cached trx_rseg_current_size transaction 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value Current rollback segment size in pages purge_del_mark_records purge 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of delete-marked rows purged purge_upd_exist_or_extern_records purge 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of purges on updates of existing records and updates on delete marked record with externally stored field diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_29644.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_29644.result new file mode 100644 index 00000000000..b52cecc5bb7 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_29644.result @@ -0,0 +1,41 @@ +# +# MDEV-29644 a potential bug of null pointer dereference in spider_db_mbase::print_warnings() +# +for master_1 +for child2 +child2_1 +child2_2 +child2_3 +for child3 +connection child2_1; +CREATE DATABASE auto_test_remote; +USE auto_test_remote; +CREATE TABLE tbl_a ( +a CHAR(5) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +SET GLOBAL sql_mode=''; +connection master_1; +CREATE DATABASE auto_test_local; +USE auto_test_local; +CREATE TABLE tbl_a ( +a CHAR(255) +) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_a", srv "s_2_1"'; +SET sql_mode=''; +INSERT INTO tbl_a VALUES ("this will be truncated"); +NOT FOUND /\[WARN SPIDER RESULT\].* Warning 1265 Data truncated for column 'a' at row 1.*/ in mysqld.1.1.err +SET GLOBAL spider_log_result_errors=4; +INSERT INTO tbl_a VALUES ("this will be truncated"); +FOUND 1 /\[WARN SPIDER RESULT\].* Warning 1265 Data truncated for column 'a' at row 1.*/ in mysqld.1.1.err +connection master_1; +SET GLOBAL spider_log_result_errors=DEFAULT; +SET sql_mode=DEFAULT; +DROP DATABASE IF EXISTS auto_test_local; +connection child2_1; +SET GLOBAL sql_mode=DEFAULT; +DROP DATABASE IF EXISTS auto_test_remote; +for master_1 +for child2 +child2_1 +child2_2 +child2_3 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result b/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result new file mode 100644 index 00000000000..8ddf428b4ea --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result @@ -0,0 +1,21 @@ +for master_1 +for child2 +for child3 + +MDEV-6268 SPIDER table with no COMMENT clause causes queries to wait forever + +CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +create table t2 (c int); +create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +create table t0 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t1"'; +alter table t2 ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t0"'; +select * from t0; +ERROR HY000: An infinite loop is detected when opening table test.t0 +select * from t1; +ERROR HY000: An infinite loop is detected when opening table test.t1 +select * from t2; +ERROR HY000: An infinite loop is detected when opening table test.t2 +drop table t0, t1, t2; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.cnf new file mode 100644 index 00000000000..05dfd8a0bce --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.cnf @@ -0,0 +1,3 @@ +!include include/default_mysqld.cnf +!include ../my_1_1.cnf +!include ../my_2_1.cnf diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.test new file mode 100644 index 00000000000..3a8fbb251e1 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29644.test @@ -0,0 +1,56 @@ +--echo # +--echo # MDEV-29644 a potential bug of null pointer dereference in spider_db_mbase::print_warnings() +--echo # + +# The test case below does not cause the potential null pointer dereference. +# It is just for checking spider_db_mbase::fetch_and_print_warnings() works. + +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +--connection child2_1 +CREATE DATABASE auto_test_remote; +USE auto_test_remote; +eval CREATE TABLE tbl_a ( + a CHAR(5) +) $CHILD2_1_ENGINE $CHILD2_1_CHARSET; + +SET GLOBAL sql_mode=''; + +--connection master_1 +CREATE DATABASE auto_test_local; +USE auto_test_local; +eval CREATE TABLE tbl_a ( + a CHAR(255) +) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"'; + +SET sql_mode=''; + +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.1.err; +let SEARCH_PATTERN= \[WARN SPIDER RESULT\].* Warning 1265 Data truncated for column 'a' at row 1.*; + +INSERT INTO tbl_a VALUES ("this will be truncated"); +--source include/search_pattern_in_file.inc # should not find + +SET GLOBAL spider_log_result_errors=4; + +INSERT INTO tbl_a VALUES ("this will be truncated"); +--source include/search_pattern_in_file.inc # should find + +--connection master_1 +SET GLOBAL spider_log_result_errors=DEFAULT; +SET sql_mode=DEFAULT; +DROP DATABASE IF EXISTS auto_test_local; + +--connection child2_1 +SET GLOBAL sql_mode=DEFAULT; +DROP DATABASE IF EXISTS auto_test_remote; + +--disable_query_log +--disable_result_log +--source ../t/test_deinit.inc +--enable_query_log +--enable_result_log diff --git a/storage/spider/mysql-test/spider/bugfix/t/self_reference_multi.test b/storage/spider/mysql-test/spider/bugfix/t/self_reference_multi.test new file mode 100644 index 00000000000..8b6f070d167 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/self_reference_multi.test @@ -0,0 +1,29 @@ +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +--echo +--echo MDEV-6268 SPIDER table with no COMMENT clause causes queries to wait forever +--echo + +--replace_regex /SOCKET ".*"/SOCKET "$MASTER_1_MYSOCK"/ +eval CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +create table t2 (c int); +create table t1 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +create table t0 (c int) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t1"'; +alter table t2 ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t0"'; +--error 12719 +select * from t0; +--error 12719 +select * from t1; +--error 12719 +select * from t2; +drop table t0, t1, t2; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 21c2e6bb434..f3af3faadad 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -2141,7 +2141,7 @@ int spider_db_mbase::exec_query( db_conn->affected_rows, db_conn->insert_id, db_conn->server_status, db_conn->warning_count); if (spider_param_log_result_errors() >= 3) - print_warnings(l_time); + fetch_and_print_warnings(l_time); } else if (log_result_errors >= 4) { time_t cur_time = (time_t) time((time_t*) 0); @@ -2223,77 +2223,33 @@ bool spider_db_mbase::is_xa_nota_error( DBUG_RETURN(xa_nota); } -int spider_db_mbase::print_warnings( - struct tm *l_time -) { - int error_num = 0; - DBUG_ENTER("spider_db_mbase::print_warnings"); - DBUG_PRINT("info",("spider this=%p", this)); - if (db_conn->status == MYSQL_STATUS_READY) - { - if ( - !(db_conn->server_status & SERVER_MORE_RESULTS_EXISTS) && - db_conn->warning_count - ) { - if ( - spider_param_dry_access() || - !mysql_real_query(db_conn, SPIDER_SQL_SHOW_WARNINGS_STR, - SPIDER_SQL_SHOW_WARNINGS_LEN) - ) { - MYSQL_RES *res = NULL; - MYSQL_ROW row = NULL; - uint num_fields; - if ( - spider_param_dry_access() || - !(res = mysql_store_result(db_conn)) || - !(row = mysql_fetch_row(res)) - ) { - if (mysql_errno(db_conn)) - { - if (res) - mysql_free_result(res); - DBUG_RETURN(0); - } - /* no record is ok */ - } - num_fields = mysql_num_fields(res); - if (num_fields != 3) - { - mysql_free_result(res); - DBUG_RETURN(0); - } - if (l_time) - { - while (row) - { - fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] " - "from [%s] %ld to %ld: %s %s %s\n", +void spider_db_mbase::fetch_and_print_warnings(struct tm *l_time) +{ + DBUG_ENTER("spider_db_mbase::fetch_and_print_warnings"); + + if (spider_param_dry_access() || db_conn->status != MYSQL_STATUS_READY || + db_conn->server_status & SERVER_MORE_RESULTS_EXISTS) + DBUG_VOID_RETURN; + + if (mysql_real_query(db_conn, SPIDER_SQL_SHOW_WARNINGS_STR, + SPIDER_SQL_SHOW_WARNINGS_LEN)) + DBUG_VOID_RETURN; + + MYSQL_RES *res= mysql_store_result(db_conn); + if (!res) + DBUG_VOID_RETURN; + + if (mysql_num_fields(res) == 3) + while (MYSQL_ROW row= mysql_fetch_row(res)) + fprintf(stderr, + "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] from [%s] %ld " + "to %ld: %s %s %s\n", l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday, - l_time->tm_hour, l_time->tm_min, l_time->tm_sec, - conn->tgt_host, (ulong) db_conn->thread_id, - (ulong) current_thd->thread_id, row[0], row[1], row[2]); - row = mysql_fetch_row(res); - } - } else { - while (row) - { - DBUG_PRINT("info",("spider row[0]=%s", row[0])); - DBUG_PRINT("info",("spider row[1]=%s", row[1])); - DBUG_PRINT("info",("spider row[2]=%s", row[2])); - longlong res_num = - (longlong) my_strtoll10(row[1], (char**) NULL, &error_num); - DBUG_PRINT("info",("spider res_num=%lld", res_num)); - my_printf_error((int) res_num, row[2], MYF(0)); - error_num = (int) res_num; - row = mysql_fetch_row(res); - } - } - if (res) - mysql_free_result(res); - } - } - } - DBUG_RETURN(error_num); + l_time->tm_hour, l_time->tm_min, l_time->tm_sec, conn->tgt_host, + (ulong) db_conn->thread_id, (ulong) current_thd->thread_id, + row[0], row[1], row[2]); + mysql_free_result(res); + DBUG_VOID_RETURN; } spider_db_result *spider_db_mbase::store_result( @@ -13770,9 +13726,11 @@ int spider_mbase_handler::show_table_status( DBUG_RETURN(error_num); } } - if ((error_num = ((spider_db_mbase *) conn->db_conn)->print_warnings(NULL))) { - DBUG_RETURN(error_num); + time_t cur_time = (time_t) time((time_t*) 0); + struct tm lt; + struct tm *l_time = localtime_r(&cur_time, <); + ((spider_db_mbase *) conn->db_conn)->fetch_and_print_warnings(l_time); } if (share->static_records_for_status != -1) { diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h index 5cfd3e693d5..725b08044b3 100644 --- a/storage/spider/spd_db_mysql.h +++ b/storage/spider/spd_db_mysql.h @@ -434,9 +434,7 @@ public: bool is_xa_nota_error( int error_num ); - int print_warnings( - struct tm *l_time - ); + void fetch_and_print_warnings(struct tm *l_time); spider_db_result *store_result( spider_db_result_buffer **spider_res_buf, st_spider_db_request_key *request_key, diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt index 85e8cd05816..099f3c67660 100644 --- a/strings/CMakeLists.txt +++ b/strings/CMakeLists.txt @@ -22,6 +22,7 @@ SET(STRINGS_SOURCES bchange.c bmove_upp.c ctype-big5.c ctype-bin.c ctype-cp932.c ctype-czech.c ctype-euc_kr.c ctype-eucjpms.c ctype-extra.c ctype-gb2312.c ctype-gbk.c ctype-latin1.c ctype-mb.c ctype-simple.c ctype-sjis.c ctype-tis620.c ctype-uca.c ctype-ucs2.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype.c decimal.c dtoa.c int2str.c + ctype-unidata.c is_prefix.c llstr.c longlong2str.c my_strtoll10.c my_vsnprintf.c str2int.c strcend.c strend.c strfill.c strmake.c strmov.c strnmov.c strxmov.c strxnmov.c xml.c diff --git a/strings/conf_to_src.c b/strings/conf_to_src.c index 692effbd3f4..fce763b4fc7 100644 --- a/strings/conf_to_src.c +++ b/strings/conf_to_src.c @@ -409,7 +409,6 @@ void dispcset(FILE *f,CHARSET_INFO *cs) fprintf(f," NULL, /* from_uni */\n"); fprintf(f," NULL, /* casefold */\n"); - fprintf(f," &my_unicase_default, /* caseinfo */\n"); fprintf(f," NULL, /* state map */\n"); fprintf(f," NULL, /* ident map */\n"); fprintf(f," 1, /* strxfrm_multiply*/\n"); diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index ef01b45aec0..aaf6769989b 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -806,7 +806,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_big5[256]= static MY_CASEFOLD_INFO my_casefold_big5= { 0xFFFF, - my_casefold_pages_big5 + my_casefold_pages_big5, + NULL /* ws */ }; @@ -6847,7 +6848,6 @@ struct charset_info_st my_charset_big5_chinese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_big5, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6879,7 +6879,6 @@ struct charset_info_st my_charset_big5_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_big5, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6911,7 +6910,6 @@ struct charset_info_st my_charset_big5_chinese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_big5, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6943,7 +6941,6 @@ struct charset_info_st my_charset_big5_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_big5, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index a6c3fb6d0ea..f11fe611482 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -625,7 +625,6 @@ struct charset_info_st my_charset_bin = NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c index 0f1e8457072..f01909d4f65 100644 --- a/strings/ctype-cp932.c +++ b/strings/ctype-cp932.c @@ -1706,7 +1706,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_cp932[256]= MY_CASEFOLD_INFO my_casefold_cp932= { 0xFFFF, - my_casefold_pages_cp932 + my_casefold_pages_cp932, + NULL /* ws */ }; @@ -34805,7 +34806,6 @@ struct charset_info_st my_charset_cp932_japanese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_cp932, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34836,7 +34836,6 @@ struct charset_info_st my_charset_cp932_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_cp932, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34868,7 +34867,6 @@ struct charset_info_st my_charset_cp932_japanese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_cp932, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34899,7 +34897,6 @@ struct charset_info_st my_charset_cp932_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_cp932, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index 109731abaaf..64aff2e7be0 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -618,7 +618,6 @@ struct charset_info_st my_charset_latin2_czech_cs = tab_8859_2_uni, /* tab_to_uni */ idx_uni_8859_2, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c index ab27074f20d..dd6ab60bd3a 100644 --- a/strings/ctype-euc_kr.c +++ b/strings/ctype-euc_kr.c @@ -1483,7 +1483,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_euckr[256]= static MY_CASEFOLD_INFO my_casefold_euckr= { 0xFFFF, - my_casefold_pages_euckr + my_casefold_pages_euckr, + NULL /* ws */ }; @@ -10095,7 +10096,6 @@ struct charset_info_st my_charset_euckr_korean_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_euckr, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10127,7 +10127,6 @@ struct charset_info_st my_charset_euckr_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_euckr, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10159,7 +10158,6 @@ struct charset_info_st my_charset_euckr_korean_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_euckr, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10191,7 +10189,6 @@ struct charset_info_st my_charset_euckr_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_euckr, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c index 1812c74d465..a5f727551aa 100644 --- a/strings/ctype-eucjpms.c +++ b/strings/ctype-eucjpms.c @@ -1779,7 +1779,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_eucjpms[512]= static MY_CASEFOLD_INFO my_casefold_eucjpms= { 0x0FFFF, - my_casefold_pages_eucjpms + my_casefold_pages_eucjpms, + NULL /* ws */ }; @@ -67634,7 +67635,6 @@ struct charset_info_st my_charset_eucjpms_japanese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_eucjpms,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67666,7 +67666,6 @@ struct charset_info_st my_charset_eucjpms_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_eucjpms,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67698,7 +67697,6 @@ struct charset_info_st my_charset_eucjpms_japanese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_eucjpms,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67730,7 +67728,6 @@ struct charset_info_st my_charset_eucjpms_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_eucjpms,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index 82df1088a62..8a25a9c6a61 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -3690,7 +3690,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_dec8_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3722,7 +3721,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp850_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3754,7 +3752,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin1_german1_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3786,7 +3783,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hp8_english_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3818,7 +3814,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8r_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3850,7 +3845,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3882,7 +3876,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_swe7_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3914,7 +3907,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_ascii_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3946,7 +3938,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -3978,7 +3969,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin1_danish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4010,7 +4000,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hebrew_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4042,7 +4031,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4074,7 +4062,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4106,7 +4093,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8u_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4138,7 +4124,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4170,7 +4155,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_greek_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4202,7 +4186,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4234,7 +4217,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4266,7 +4248,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1257_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4298,7 +4279,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin5_turkish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4330,7 +4310,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_armscii8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4362,7 +4341,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp866_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4394,7 +4372,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_keybcs2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4426,7 +4403,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macce_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4458,7 +4434,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macroman_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4490,7 +4465,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp852_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4522,7 +4496,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4554,7 +4527,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4586,7 +4558,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macce_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4618,7 +4589,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4650,7 +4620,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin1_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4682,7 +4651,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin1_general_cs, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4714,7 +4682,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4746,7 +4713,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4778,7 +4744,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4810,7 +4775,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macroman_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4842,7 +4806,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1256_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4874,7 +4837,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1257_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4906,7 +4868,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1257_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4938,7 +4899,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_armscii8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -4970,7 +4930,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_ascii_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5002,7 +4961,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5034,7 +4992,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1256_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5066,7 +5023,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp866_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5098,7 +5054,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_dec8_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5130,7 +5085,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_greek_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5162,7 +5116,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hebrew_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5194,7 +5147,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hp8_english_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5226,7 +5178,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_keybcs2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5258,7 +5209,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8r_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5290,7 +5240,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8u_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5322,7 +5271,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5354,7 +5302,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin5_turkish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5386,7 +5333,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5418,7 +5364,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp850_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5450,7 +5395,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp852_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5482,7 +5426,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_swe7_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5514,7 +5457,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_geostd8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5546,7 +5488,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_geostd8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5578,7 +5519,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin1_spanish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5610,7 +5550,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5642,7 +5581,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_dec8_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5674,7 +5612,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp850_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5706,7 +5643,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hp8_english_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5738,7 +5674,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8r_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5770,7 +5705,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5802,7 +5736,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_swe7_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5834,7 +5767,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_ascii_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5866,7 +5798,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hebrew_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5898,7 +5829,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8u_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5930,7 +5860,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_greek_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5962,7 +5891,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -5994,7 +5922,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin5_turkish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6026,7 +5953,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_armscii8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6058,7 +5984,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp866_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6090,7 +6015,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_keybcs2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6122,7 +6046,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macce_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6154,7 +6077,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macroman_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6186,7 +6108,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp852_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6218,7 +6139,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6250,7 +6170,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macce_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6282,7 +6201,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6314,7 +6232,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1251_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6346,7 +6263,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_macroman_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6378,7 +6294,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1256_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6410,7 +6325,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1257_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6442,7 +6356,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1257_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6474,7 +6387,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_armscii8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6506,7 +6418,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_ascii_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6538,7 +6449,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1250_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6570,7 +6480,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp1256_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6602,7 +6511,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp866_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6634,7 +6542,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_dec8_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6666,7 +6573,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_greek_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6698,7 +6604,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hebrew_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6730,7 +6635,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_hp8_english_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6762,7 +6666,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_keybcs2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6794,7 +6697,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8r_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6826,7 +6728,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_koi8u_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6858,7 +6759,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin2_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6890,7 +6790,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin5_turkish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6922,7 +6821,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_latin7_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6954,7 +6852,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp850_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -6986,7 +6883,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_cp852_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -7018,7 +6914,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_swe7_swedish_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -7050,7 +6945,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_geostd8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -7082,7 +6976,6 @@ struct charset_info_st compiled_charsets[] = { to_uni_geostd8_general_ci, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ @@ -7113,7 +7006,6 @@ struct charset_info_st compiled_charsets[] = { NULL, /* to_uni */ NULL, /* from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state map */ NULL, /* ident map */ 1, /* strxfrm_multiply*/ diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c index 9e6ed3cfabe..f3e9c902389 100644 --- a/strings/ctype-gb2312.c +++ b/strings/ctype-gb2312.c @@ -822,7 +822,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_gb2312[256]= static MY_CASEFOLD_INFO my_casefold_gb2312= { 0xFFFF, - my_casefold_pages_gb2312 + my_casefold_pages_gb2312, + NULL /* ws */ }; @@ -6499,7 +6500,6 @@ struct charset_info_st my_charset_gb2312_chinese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gb2312,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6531,7 +6531,6 @@ struct charset_info_st my_charset_gb2312_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gb2312,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6563,7 +6562,6 @@ struct charset_info_st my_charset_gb2312_chinese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gb2312,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6595,7 +6593,6 @@ struct charset_info_st my_charset_gb2312_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gb2312,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index a81e2465157..a22e6aa8d84 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -1006,7 +1006,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_gbk[256]= static MY_CASEFOLD_INFO my_casefold_gbk= { 0xFFFF, - my_casefold_pages_gbk + my_casefold_pages_gbk, + NULL /* ws */ }; @@ -10780,7 +10781,6 @@ struct charset_info_st my_charset_gbk_chinese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gbk, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10811,7 +10811,6 @@ struct charset_info_st my_charset_gbk_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gbk, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10843,7 +10842,6 @@ struct charset_info_st my_charset_gbk_chinese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gbk, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10874,7 +10872,6 @@ struct charset_info_st my_charset_gbk_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_gbk, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index a0bee911af5..5d763c6a561 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -449,7 +449,6 @@ struct charset_info_st my_charset_latin1= cs_to_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -481,7 +480,6 @@ struct charset_info_st my_charset_latin1_nopad= cs_to_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -763,7 +761,6 @@ struct charset_info_st my_charset_latin1_german2_ci= cs_to_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 2, /* strxfrm_multiply */ @@ -795,7 +792,6 @@ struct charset_info_st my_charset_latin1_bin= cs_to_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -827,7 +823,6 @@ struct charset_info_st my_charset_latin1_nopad_bin= cs_to_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index 1e3ef16bdb5..a5fed41b964 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -1076,7 +1076,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_sjis[256]= static MY_CASEFOLD_INFO my_casefold_sjis= { 0xFFFF, - my_casefold_pages_sjis + my_casefold_pages_sjis, + NULL /* ws */ }; @@ -34193,7 +34194,6 @@ struct charset_info_st my_charset_sjis_japanese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_sjis, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34224,7 +34224,6 @@ struct charset_info_st my_charset_sjis_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_sjis, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34256,7 +34255,6 @@ struct charset_info_st my_charset_sjis_japanese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_sjis, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -34287,7 +34285,6 @@ struct charset_info_st my_charset_sjis_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_sjis, /* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index 7ca33807fe4..0b728346f6a 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -957,7 +957,6 @@ struct charset_info_st my_charset_tis620_thai_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -988,7 +987,6 @@ struct charset_info_st my_charset_tis620_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -1020,7 +1018,6 @@ struct charset_info_st my_charset_tis620_thai_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -1052,7 +1049,6 @@ struct charset_info_st my_charset_tis620_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index 8e94a18a478..aa4d366208f 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -35,6 +35,7 @@ #include "strings_def.h" #include #include "ctype-uca.h" +#include "ctype-unidata.h" #include "my_bit.h" typedef struct @@ -34611,8 +34612,8 @@ my_coll_init_uca(struct charset_info_st *cs, MY_CHARSET_LOADER *loader) { cs->pad_char= ' '; cs->m_ctype= my_charset_utf8mb3_unicode_ci.m_ctype; - if (!cs->caseinfo) - cs->caseinfo= &my_unicase_default; + if (!cs->casefold) + cs->casefold= &my_casefold_default; return create_tailoring(cs, loader); } @@ -34762,23 +34763,23 @@ create_tailoring(struct charset_info_st *cs, if (rules.version == 520) /* Unicode-5.2.0 requested */ { src_uca= &my_uca_v520; - cs->caseinfo= &my_unicase_unicode520; + cs->casefold= &my_casefold_unicode520; } else if (rules.version == 1400) /* Unicode-14.0.0 */ { src_uca= &my_uca_v1400; - cs->caseinfo= &my_unicase_unicode520; + cs->casefold= &my_casefold_unicode1400; } else if (rules.version == 400) /* Unicode-4.0.0 requested */ { src_uca= &my_uca_v400; - cs->caseinfo= &my_unicase_default; + cs->casefold= &my_casefold_default; } else /* No Unicode version specified */ { src_uca= cs->uca ? cs->uca : &my_uca_v400; - if (!cs->caseinfo) - cs->caseinfo= &my_unicase_default; + if (!cs->casefold) + cs->casefold= &my_casefold_default; } if (rules.strength) my_ci_set_strength(cs, rules.strength); @@ -34855,8 +34856,7 @@ struct charset_info_st my_charset_ucs2_unicode_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -34886,8 +34886,7 @@ struct charset_info_st my_charset_ucs2_icelandic_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -34917,8 +34916,7 @@ struct charset_info_st my_charset_ucs2_latvian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -34948,8 +34946,7 @@ struct charset_info_st my_charset_ucs2_romanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -34979,8 +34976,7 @@ struct charset_info_st my_charset_ucs2_slovenian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35010,8 +35006,7 @@ struct charset_info_st my_charset_ucs2_polish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35041,8 +35036,7 @@ struct charset_info_st my_charset_ucs2_estonian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35072,8 +35066,7 @@ struct charset_info_st my_charset_ucs2_spanish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35103,8 +35096,7 @@ struct charset_info_st my_charset_ucs2_swedish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35134,8 +35126,7 @@ struct charset_info_st my_charset_ucs2_turkish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_turkish,/* caseinfo */ + &my_casefold_turkish,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35165,8 +35156,7 @@ struct charset_info_st my_charset_ucs2_czech_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35197,8 +35187,7 @@ struct charset_info_st my_charset_ucs2_danish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35228,8 +35217,7 @@ struct charset_info_st my_charset_ucs2_lithuanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35259,8 +35247,7 @@ struct charset_info_st my_charset_ucs2_slovak_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35290,8 +35277,7 @@ struct charset_info_st my_charset_ucs2_spanish2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35322,8 +35308,7 @@ struct charset_info_st my_charset_ucs2_roman_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35354,8 +35339,7 @@ struct charset_info_st my_charset_ucs2_persian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35386,8 +35370,7 @@ struct charset_info_st my_charset_ucs2_esperanto_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35418,8 +35401,7 @@ struct charset_info_st my_charset_ucs2_hungarian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35449,8 +35431,7 @@ struct charset_info_st my_charset_ucs2_sinhala_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35482,8 +35463,7 @@ struct charset_info_st my_charset_ucs2_german2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35513,8 +35493,7 @@ struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35545,8 +35524,7 @@ struct charset_info_st my_charset_ucs2_croatian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35577,8 +35555,7 @@ struct charset_info_st my_charset_ucs2_myanmar_uca_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35609,8 +35586,7 @@ struct charset_info_st my_charset_ucs2_thai_520_w2= &my_uca_v520_th, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -35640,8 +35616,7 @@ struct charset_info_st my_charset_ucs2_unicode_520_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35672,8 +35647,7 @@ struct charset_info_st my_charset_ucs2_vietnamese_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35704,8 +35678,7 @@ struct charset_info_st my_charset_ucs2_unicode_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35736,8 +35709,7 @@ struct charset_info_st my_charset_ucs2_unicode_520_nopad_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520, /* caseinfo */ + &my_casefold_unicode520, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35837,8 +35809,7 @@ struct charset_info_st my_charset_utf8mb3_unicode_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35869,8 +35840,7 @@ struct charset_info_st my_charset_utf8mb3_icelandic_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35900,8 +35870,7 @@ struct charset_info_st my_charset_utf8mb3_latvian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35931,8 +35900,7 @@ struct charset_info_st my_charset_utf8mb3_romanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35962,8 +35930,7 @@ struct charset_info_st my_charset_utf8mb3_slovenian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -35993,8 +35960,7 @@ struct charset_info_st my_charset_utf8mb3_polish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36024,8 +35990,7 @@ struct charset_info_st my_charset_utf8mb3_estonian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36055,8 +36020,7 @@ struct charset_info_st my_charset_utf8mb3_spanish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36086,8 +36050,7 @@ struct charset_info_st my_charset_utf8mb3_swedish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36117,8 +36080,7 @@ struct charset_info_st my_charset_utf8mb3_turkish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_turkish,/* caseinfo */ + &my_casefold_turkish,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36148,8 +36110,7 @@ struct charset_info_st my_charset_utf8mb3_czech_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36180,8 +36141,7 @@ struct charset_info_st my_charset_utf8mb3_danish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36211,8 +36171,7 @@ struct charset_info_st my_charset_utf8mb3_lithuanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36242,8 +36201,7 @@ struct charset_info_st my_charset_utf8mb3_slovak_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36273,8 +36231,7 @@ struct charset_info_st my_charset_utf8mb3_spanish2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36304,8 +36261,7 @@ struct charset_info_st my_charset_utf8mb3_roman_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36335,8 +36291,7 @@ struct charset_info_st my_charset_utf8mb3_persian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36366,8 +36321,7 @@ struct charset_info_st my_charset_utf8mb3_esperanto_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36397,8 +36351,7 @@ struct charset_info_st my_charset_utf8mb3_hungarian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36428,8 +36381,7 @@ struct charset_info_st my_charset_utf8mb3_sinhala_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36460,8 +36412,7 @@ struct charset_info_st my_charset_utf8mb3_german2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36491,8 +36442,7 @@ struct charset_info_st my_charset_utf8mb3_croatian_mysql561_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36523,8 +36473,7 @@ struct charset_info_st my_charset_utf8mb3_croatian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36555,8 +36504,7 @@ struct charset_info_st my_charset_utf8mb3_myanmar_uca_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36587,8 +36535,7 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36618,8 +36565,7 @@ struct charset_info_st my_charset_utf8mb3_thai_520_w2= &my_uca_v520_th, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -36649,8 +36595,7 @@ struct charset_info_st my_charset_utf8mb3_vietnamese_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36681,8 +36626,7 @@ struct charset_info_st my_charset_utf8mb3_unicode_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36713,8 +36657,7 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_nopad_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520, /* caseinfo */ + &my_casefold_unicode520, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36787,8 +36730,7 @@ struct charset_info_st my_charset_utf8mb4_unicode_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36819,8 +36761,7 @@ struct charset_info_st my_charset_utf8mb4_icelandic_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36850,8 +36791,7 @@ struct charset_info_st my_charset_utf8mb4_latvian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36881,8 +36821,7 @@ struct charset_info_st my_charset_utf8mb4_romanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36912,8 +36851,7 @@ struct charset_info_st my_charset_utf8mb4_slovenian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36943,8 +36881,7 @@ struct charset_info_st my_charset_utf8mb4_polish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -36974,8 +36911,7 @@ struct charset_info_st my_charset_utf8mb4_estonian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37005,8 +36941,7 @@ struct charset_info_st my_charset_utf8mb4_spanish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37036,8 +36971,7 @@ struct charset_info_st my_charset_utf8mb4_swedish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37067,8 +37001,7 @@ struct charset_info_st my_charset_utf8mb4_turkish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_turkish, /* caseinfo */ + &my_casefold_turkish,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37098,8 +37031,7 @@ struct charset_info_st my_charset_utf8mb4_czech_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37130,8 +37062,7 @@ struct charset_info_st my_charset_utf8mb4_danish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37161,8 +37092,7 @@ struct charset_info_st my_charset_utf8mb4_lithuanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37192,8 +37122,7 @@ struct charset_info_st my_charset_utf8mb4_slovak_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37223,8 +37152,7 @@ struct charset_info_st my_charset_utf8mb4_spanish2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37254,8 +37182,7 @@ struct charset_info_st my_charset_utf8mb4_roman_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37285,8 +37212,7 @@ struct charset_info_st my_charset_utf8mb4_persian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37316,8 +37242,7 @@ struct charset_info_st my_charset_utf8mb4_esperanto_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37347,8 +37272,7 @@ struct charset_info_st my_charset_utf8mb4_hungarian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37378,8 +37302,7 @@ struct charset_info_st my_charset_utf8mb4_sinhala_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37409,8 +37332,7 @@ struct charset_info_st my_charset_utf8mb4_german2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37440,8 +37362,7 @@ struct charset_info_st my_charset_utf8mb4_croatian_mysql561_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37472,8 +37393,7 @@ struct charset_info_st my_charset_utf8mb4_croatian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37504,8 +37424,7 @@ struct charset_info_st my_charset_utf8mb4_myanmar_uca_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37535,8 +37454,7 @@ struct charset_info_st my_charset_utf8mb4_thai_520_w2= &my_uca_v520_th, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -37566,8 +37484,7 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37598,8 +37515,7 @@ struct charset_info_st my_charset_utf8mb4_vietnamese_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37630,8 +37546,7 @@ struct charset_info_st my_charset_utf8mb4_unicode_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37662,8 +37577,7 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520, /* caseinfo */ + &my_casefold_unicode520, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37713,8 +37627,7 @@ struct charset_info_st my_charset_utf32_unicode_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37745,8 +37658,7 @@ struct charset_info_st my_charset_utf32_icelandic_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37776,8 +37688,7 @@ struct charset_info_st my_charset_utf32_latvian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37807,8 +37718,7 @@ struct charset_info_st my_charset_utf32_romanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37838,8 +37748,7 @@ struct charset_info_st my_charset_utf32_slovenian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37869,8 +37778,7 @@ struct charset_info_st my_charset_utf32_polish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37900,8 +37808,7 @@ struct charset_info_st my_charset_utf32_estonian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37931,8 +37838,7 @@ struct charset_info_st my_charset_utf32_spanish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37962,8 +37868,7 @@ struct charset_info_st my_charset_utf32_swedish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -37993,8 +37898,7 @@ struct charset_info_st my_charset_utf32_turkish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_turkish, /* caseinfo */ + &my_casefold_turkish,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38024,8 +37928,7 @@ struct charset_info_st my_charset_utf32_czech_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38056,8 +37959,7 @@ struct charset_info_st my_charset_utf32_danish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38087,8 +37989,7 @@ struct charset_info_st my_charset_utf32_lithuanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38118,8 +38019,7 @@ struct charset_info_st my_charset_utf32_slovak_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38149,8 +38049,7 @@ struct charset_info_st my_charset_utf32_spanish2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38180,8 +38079,7 @@ struct charset_info_st my_charset_utf32_roman_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38211,8 +38109,7 @@ struct charset_info_st my_charset_utf32_persian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38242,8 +38139,7 @@ struct charset_info_st my_charset_utf32_esperanto_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38273,8 +38169,7 @@ struct charset_info_st my_charset_utf32_hungarian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38304,8 +38199,7 @@ struct charset_info_st my_charset_utf32_sinhala_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38335,8 +38229,7 @@ struct charset_info_st my_charset_utf32_german2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38366,8 +38259,7 @@ struct charset_info_st my_charset_utf32_croatian_mysql561_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38397,8 +38289,7 @@ struct charset_info_st my_charset_utf32_croatian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38429,8 +38320,7 @@ struct charset_info_st my_charset_utf32_myanmar_uca_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38461,8 +38351,7 @@ struct charset_info_st my_charset_utf32_thai_520_w2= &my_uca_v520_th, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -38493,8 +38382,7 @@ struct charset_info_st my_charset_utf32_unicode_520_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38525,8 +38413,7 @@ struct charset_info_st my_charset_utf32_vietnamese_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38557,8 +38444,7 @@ struct charset_info_st my_charset_utf32_unicode_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38589,8 +38475,7 @@ struct charset_info_st my_charset_utf32_unicode_520_nopad_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520, /* caseinfo */ + &my_casefold_unicode520, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38641,8 +38526,7 @@ struct charset_info_st my_charset_utf16_unicode_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38673,8 +38557,7 @@ struct charset_info_st my_charset_utf16_icelandic_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38704,8 +38587,7 @@ struct charset_info_st my_charset_utf16_latvian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38735,8 +38617,7 @@ struct charset_info_st my_charset_utf16_romanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38766,8 +38647,7 @@ struct charset_info_st my_charset_utf16_slovenian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38797,8 +38677,7 @@ struct charset_info_st my_charset_utf16_polish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38828,8 +38707,7 @@ struct charset_info_st my_charset_utf16_estonian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38859,8 +38737,7 @@ struct charset_info_st my_charset_utf16_spanish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38890,8 +38767,7 @@ struct charset_info_st my_charset_utf16_swedish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38921,8 +38797,7 @@ struct charset_info_st my_charset_utf16_turkish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_turkish, /* caseinfo */ + &my_casefold_turkish,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38952,8 +38827,7 @@ struct charset_info_st my_charset_utf16_czech_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -38984,8 +38858,7 @@ struct charset_info_st my_charset_utf16_danish_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39015,8 +38888,7 @@ struct charset_info_st my_charset_utf16_lithuanian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39046,8 +38918,7 @@ struct charset_info_st my_charset_utf16_slovak_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39077,8 +38948,7 @@ struct charset_info_st my_charset_utf16_spanish2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39108,8 +38978,7 @@ struct charset_info_st my_charset_utf16_roman_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39139,8 +39008,7 @@ struct charset_info_st my_charset_utf16_persian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39170,8 +39038,7 @@ struct charset_info_st my_charset_utf16_esperanto_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39201,8 +39068,7 @@ struct charset_info_st my_charset_utf16_hungarian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39232,8 +39098,7 @@ struct charset_info_st my_charset_utf16_sinhala_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39263,8 +39128,7 @@ struct charset_info_st my_charset_utf16_german2_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39295,8 +39159,7 @@ struct charset_info_st my_charset_utf16_croatian_mysql561_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39327,8 +39190,7 @@ struct charset_info_st my_charset_utf16_croatian_uca_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39359,8 +39221,7 @@ struct charset_info_st my_charset_utf16_myanmar_uca_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold*/ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39391,8 +39252,7 @@ struct charset_info_st my_charset_utf16_thai_520_w2= &my_uca_v520_th, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold*/ NULL, /* state_map */ NULL, /* ident_map */ 4, /* strxfrm_multiply */ @@ -39423,8 +39283,7 @@ struct charset_info_st my_charset_utf16_unicode_520_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520,/* caseinfo */ + &my_casefold_unicode520,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39455,8 +39314,7 @@ struct charset_info_st my_charset_utf16_vietnamese_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39487,8 +39345,7 @@ struct charset_info_st my_charset_utf16_unicode_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39519,8 +39376,7 @@ struct charset_info_st my_charset_utf16_unicode_520_nopad_ci= &my_uca_v520, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_unicode520, /* caseinfo */ + &my_casefold_unicode520, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 8, /* strxfrm_multiply */ @@ -39599,9 +39455,9 @@ my_uca1400_collation_definition_init(MY_CHARSET_LOADER *loader, dst->uca= &my_uca_v1400; dst->tailoring= def->tailoring; if (def->tailoring == turkish) - dst->caseinfo= &my_unicase_turkish; /*TODO: unicase_1400_turkish */ + dst->casefold= &my_casefold_unicode1400tr; else - dst->caseinfo= &my_unicase_unicode520; /*TODO: unicase_1400*/ + dst->casefold= &my_casefold_unicode1400; if (nopad) dst->state|= MY_CS_NOPAD; my_ci_set_level_flags(dst, (1 << MY_CS_LEVEL_BIT_PRIMARY) | diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index 4b29d656731..5d67762ac2f 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -1197,17 +1197,14 @@ my_lengthsp_mb2(CHARSET_INFO *cs __attribute__((unused)), static inline int my_weight_mb2_utf16mb2_general_ci(uchar b0, uchar b1) { my_wc_t wc= MY_UTF16_WC2(b0, b1); - MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); + return my_general_ci_bmp_char_to_weight((uint16) wc); } #define MY_FUNCTION_NAME(x) my_ ## x ## _utf16_general_ci #define DEFINE_STRNXFRM_UNICODE #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf16_quick(pwc, s, e) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB2(b0,b1) my_weight_mb2_utf16mb2_general_ci(b0,b1) #define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER @@ -1284,40 +1281,6 @@ my_uni_utf16(CHARSET_INFO *cs __attribute__((unused)), const char charset_name_utf16le[]= "utf16le"; #define charset_name_utf16le_length (sizeof(charset_name_utf16le)-1) -static inline void -my_tolower_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].toupper; -} - - -static inline void -my_tosort_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - if (*wc <= uni_plane->maxchar) - { - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - - static size_t my_caseup_utf16(CHARSET_INFO *cs, const char *src, size_t srclen, @@ -1329,13 +1292,13 @@ my_caseup_utf16(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((src < srcend) && (res= mb_wc(cs, &wc, (uchar *) src, (uchar *) srcend)) > 0) { - my_toupper_utf16(uni_plane, &wc); + my_toupper_unicode(uni_plane, &wc); if (res != wc_mb(cs, wc, (uchar *) dst, (uchar *) dstend)) break; src+= res; @@ -1354,12 +1317,12 @@ my_hash_sort_utf16_nopad(CHARSET_INFO *cs, my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc; int res; const uchar *e= s + slen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; register ulong m1= *nr1, m2= *nr2; while ((s < e) && (res= mb_wc(cs, &wc, (uchar *) s, (uchar *) e)) > 0) { - my_tosort_utf16(uni_plane, &wc); + my_tosort_unicode(uni_plane, &wc); MY_HASH_ADD_16(m1, m2, wc); s+= res; } @@ -1387,13 +1350,13 @@ my_casedn_utf16(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((src < srcend) && (res= mb_wc(cs, &wc, (uchar *) src, (uchar *) srcend)) > 0) { - my_tolower_utf16(uni_plane, &wc); + my_tolower_unicode(uni_plane, &wc); if (res != wc_mb(cs, wc, (uchar *) dst, (uchar *) dstend)) break; src+= res; @@ -1459,7 +1422,7 @@ my_wildcmp_utf16_ci(CHARSET_INFO *cs, const char *wildstr,const char *wildend, int escape, int w_one, int w_many) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one, w_many, uni_plane); } @@ -1637,8 +1600,7 @@ struct charset_info_st my_charset_utf16_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -1669,8 +1631,7 @@ struct charset_info_st my_charset_utf16_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -1701,8 +1662,7 @@ struct charset_info_st my_charset_utf16_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -1734,8 +1694,7 @@ struct charset_info_st my_charset_utf16_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -1759,9 +1718,7 @@ struct charset_info_st my_charset_utf16_nopad_bin= #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) (my_ci_mb_wc(cs, pwc, s, e)) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB2(b0,b1) my_weight_mb2_utf16mb2_general_ci(b1,b0) #define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER @@ -1996,8 +1953,7 @@ struct charset_info_st my_charset_utf16le_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2028,8 +1984,7 @@ struct charset_info_st my_charset_utf16le_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2060,8 +2015,7 @@ struct charset_info_st my_charset_utf16le_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2093,8 +2047,7 @@ struct charset_info_st my_charset_utf16le_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2130,21 +2083,14 @@ static inline int my_weight_utf32_general_ci(uchar b0, uchar b1, uchar b2, uchar b3) { my_wc_t wc= MY_UTF32_WC4(b0, b1, b2, b3); - if (wc <= 0xFFFF) - { - MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); - } - return MY_CS_REPLACEMENT_CHARACTER; + return my_general_ci_char_to_weight(wc); } #define MY_FUNCTION_NAME(x) my_ ## x ## _utf32_general_ci #define DEFINE_STRNXFRM_UNICODE #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf32_quick(pwc, s, e) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB4(b0,b1,b2,b3) my_weight_utf32_general_ci(b0, b1, b2, b3) #include "strcoll.inl" @@ -2196,40 +2142,6 @@ my_uni_utf32(CHARSET_INFO *cs __attribute__((unused)), } -static inline void -my_tolower_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].toupper; -} - - -static inline void -my_tosort_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - if (*wc <= uni_plane->maxchar) - { - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[*wc >> 8])) - *wc= page[*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - - static size_t my_lengthsp_utf32(CHARSET_INFO *cs __attribute__((unused)), const char *ptr, size_t length) @@ -2250,13 +2162,13 @@ my_caseup_utf32(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((src < srcend) && (res= my_utf32_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0) { - my_toupper_utf32(uni_plane, &wc); + my_toupper_unicode(uni_plane, &wc); if (res != my_uni_utf32(cs, wc, (uchar*) dst, (uchar*) dstend)) break; src+= res; @@ -2273,12 +2185,12 @@ my_hash_sort_utf32_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen, my_wc_t wc; int res; const uchar *e= s + slen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; register ulong m1= *nr1, m2= *nr2; while ((res= my_utf32_uni(cs, &wc, (uchar*) s, (uchar*) e)) > 0) { - my_tosort_utf32(uni_plane, &wc); + my_tosort_unicode(uni_plane, &wc); MY_HASH_ADD(m1, m2, (uint) (wc >> 24)); MY_HASH_ADD(m1, m2, (uint) (wc >> 16) & 0xFF); MY_HASH_ADD(m1, m2, (uint) (wc >> 8) & 0xFF); @@ -2307,12 +2219,12 @@ my_casedn_utf32(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((res= my_utf32_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) { - my_tolower_utf32(uni_plane,&wc); + my_tolower_unicode(uni_plane,&wc); if (res != my_uni_utf32(cs, wc, (uchar*) dst, (uchar*) dstend)) break; src+= res; @@ -2661,7 +2573,7 @@ my_wildcmp_utf32_ci(CHARSET_INFO *cs, const char *wildstr, const char *wildend, int escape, int w_one, int w_many) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one, w_many, uni_plane); } @@ -2840,8 +2752,7 @@ struct charset_info_st my_charset_utf32_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2872,8 +2783,7 @@ struct charset_info_st my_charset_utf32_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2904,8 +2814,7 @@ struct charset_info_st my_charset_utf32_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -2937,8 +2846,7 @@ struct charset_info_st my_charset_utf32_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -3028,16 +2936,14 @@ static const uchar to_upper_ucs2[] = { static inline int my_weight_mb2_ucs2_general_ci(uchar b0, uchar b1) { my_wc_t wc= UCS2_CODE(b0, b1); - MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); + return my_general_ci_bmp_char_to_weight((uint16) wc); } static inline int my_weight_mb2_ucs2_general_mysql500_ci(uchar b0, uchar b1) { my_wc_t wc= UCS2_CODE(b0, b1); - MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); + return my_general_mysql500_ci_bmp_char_to_weight((uint16) wc); } @@ -3046,21 +2952,18 @@ static inline int my_weight_mb2_ucs2_general_mysql500_ci(uchar b0, uchar b1) #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_ucs2_quick(pwc, s, e) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_bmp_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB2(b0,b1) my_weight_mb2_ucs2_general_ci(b0,b1) #include "strcoll.inl" + #define MY_FUNCTION_NAME(x) my_ ## x ## _ucs2_general_mysql500_ci #define DEFINE_STRNXFRM_UNICODE #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_ucs2_quick(pwc, s, e) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_mysql500_page00 -#define UNICASE_PAGES my_unicase_mysql500_pages +#define MY_WC_WEIGHT(x) my_general_mysql500_ci_bmp_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB2(b0,b1) my_weight_mb2_ucs2_general_mysql500_ci(b0,b1) #include "strcoll.inl" @@ -3118,32 +3021,6 @@ static int my_uni_ucs2(CHARSET_INFO *cs __attribute__((unused)) , } -static inline void -my_tolower_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8) & 0xFF])) - *wc= page[*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8) & 0xFF])) - *wc= page[*wc & 0xFF].toupper; -} - - -static inline void -my_tosort_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8) & 0xFF])) - *wc= page[*wc & 0xFF].sort; -} - static size_t my_caseup_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen, char *dst, size_t dstlen) { @@ -3151,13 +3028,13 @@ static size_t my_caseup_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((src < srcend) && (res= my_ucs2_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0) { - my_toupper_ucs2(uni_plane, &wc); + my_toupper_unicode_bmp(uni_plane, &wc); if (res != my_uni_ucs2(cs, wc, (uchar*) dst, (uchar*) dstend)) break; src+= res; @@ -3174,12 +3051,12 @@ my_hash_sort_ucs2_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen, my_wc_t wc; int res; const uchar *e=s+slen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; register ulong m1= *nr1, m2= *nr2; while ((s < e) && (res=my_ucs2_uni(cs,&wc, (uchar *)s, (uchar*)e)) >0) { - my_tosort_ucs2(uni_plane, &wc); + my_tosort_unicode_bmp(uni_plane, &wc); MY_HASH_ADD_16(m1, m2, wc); s+=res; } @@ -3202,13 +3079,13 @@ static size_t my_casedn_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen, int res; const char *srcend= src + srclen; char *dstend= dst + dstlen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(srclen <= dstlen); while ((src < srcend) && (res= my_ucs2_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) { - my_tolower_ucs2(uni_plane, &wc); + my_tolower_unicode_bmp(uni_plane, &wc); if (res != my_uni_ucs2(cs, wc, (uchar*) dst, (uchar*) dstend)) break; src+= res; @@ -3292,7 +3169,7 @@ int my_wildcmp_ucs2_ci(CHARSET_INFO *cs, const char *wildstr,const char *wildend, int escape, int w_one, int w_many) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, escape,w_one,w_many,uni_plane); } @@ -3490,8 +3367,7 @@ struct charset_info_st my_charset_ucs2_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -3522,8 +3398,7 @@ struct charset_info_st my_charset_ucs2_general_mysql500_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_mysql500, /* caseinfo */ + &my_casefold_mysql500, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -3554,8 +3429,7 @@ struct charset_info_st my_charset_ucs2_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -3586,8 +3460,7 @@ struct charset_info_st my_charset_ucs2_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -3618,8 +3491,7 @@ struct charset_info_st my_charset_ucs2_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c index 76f000e9ed6..a5624a8c341 100644 --- a/strings/ctype-ujis.c +++ b/strings/ctype-ujis.c @@ -67140,7 +67140,8 @@ static const MY_CASEFOLD_CHARACTER *my_casefold_pages_ujis[512]= static MY_CASEFOLD_INFO my_casefold_info_ujis= { 0x0FFFF, - my_casefold_pages_ujis + my_casefold_pages_ujis, + NULL /* ws */ }; @@ -67378,7 +67379,6 @@ struct charset_info_st my_charset_ujis_japanese_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_info_ujis,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67410,7 +67410,6 @@ struct charset_info_st my_charset_ujis_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_info_ujis,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67442,7 +67441,6 @@ struct charset_info_st my_charset_ujis_japanese_nopad_ci= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_info_ujis,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -67474,7 +67472,6 @@ struct charset_info_st my_charset_ujis_nopad_bin= NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ &my_casefold_info_ujis,/* casefold */ - NULL, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-unicode1400-casefold-tr.h b/strings/ctype-unicode1400-casefold-tr.h new file mode 100644 index 00000000000..25e1b5d3d59 --- /dev/null +++ b/strings/ctype-unicode1400-casefold-tr.h @@ -0,0 +1,704 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=casefold-tr \ + --page-name=u1400tr_casefold_page \ + --page-name-derived=u1400_casefold_page \ + --index-name=my_u1400tr_casefold_index \ + UnicodeData-14.0.0.txt + +*/ +const MY_CASEFOLD_CHARACTER u1400tr_casefold_page00[256]={ + {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */ + {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */ + {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */ + {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */ + {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */ + {0x000A,0x000A},{0x000B,0x000B}, /* 000A */ + {0x000C,0x000C},{0x000D,0x000D}, /* 000C */ + {0x000E,0x000E},{0x000F,0x000F}, /* 000E */ + {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */ + {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */ + {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */ + {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */ + {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */ + {0x001A,0x001A},{0x001B,0x001B}, /* 001A */ + {0x001C,0x001C},{0x001D,0x001D}, /* 001C */ + {0x001E,0x001E},{0x001F,0x001F}, /* 001E */ + {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */ + {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */ + {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */ + {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */ + {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */ + {0x002A,0x002A},{0x002B,0x002B}, /* 002A */ + {0x002C,0x002C},{0x002D,0x002D}, /* 002C */ + {0x002E,0x002E},{0x002F,0x002F}, /* 002E */ + {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */ + {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */ + {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */ + {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */ + {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */ + {0x003A,0x003A},{0x003B,0x003B}, /* 003A */ + {0x003C,0x003C},{0x003D,0x003D}, /* 003C */ + {0x003E,0x003E},{0x003F,0x003F}, /* 003E */ + {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */ + {0x0048,0x0068},{0x0049,0x0131}, /* 0048 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 004A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 004C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 004E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */ + {0x005A,0x007A},{0x005B,0x005B}, /* 005A */ + {0x005C,0x005C},{0x005D,0x005D}, /* 005C */ + {0x005E,0x005E},{0x005F,0x005F}, /* 005E */ + {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */ + {0x0048,0x0068},{0x0130,0x0069}, /* 0068 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 006A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 006C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 006E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */ + {0x005A,0x007A},{0x007B,0x007B}, /* 007A */ + {0x007C,0x007C},{0x007D,0x007D}, /* 007C */ + {0x007E,0x007E},{0x007F,0x007F}, /* 007E */ + {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */ + {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */ + {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */ + {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */ + {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */ + {0x008A,0x008A},{0x008B,0x008B}, /* 008A */ + {0x008C,0x008C},{0x008D,0x008D}, /* 008C */ + {0x008E,0x008E},{0x008F,0x008F}, /* 008E */ + {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */ + {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */ + {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */ + {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */ + {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */ + {0x009A,0x009A},{0x009B,0x009B}, /* 009A */ + {0x009C,0x009C},{0x009D,0x009D}, /* 009C */ + {0x009E,0x009E},{0x009F,0x009F}, /* 009E */ + {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */ + {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */ + {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */ + {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */ + {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */ + {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */ + {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */ + {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */ + {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */ + {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */ + {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */ + {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */ + {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */ + {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */ + {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */ + {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */ + {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */ + {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */ + {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */ + {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */ +}; + +const MY_CASEFOLD_CHARACTER * my_u1400tr_casefold_index[4352]={ + u1400tr_casefold_page00, u1400_casefold_page01, u1400_casefold_page02, u1400_casefold_page03, u1400_casefold_page04, u1400_casefold_page05, u1400_casefold_page06, u1400_casefold_page07, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u1400_casefold_page10, NULL, NULL, u1400_casefold_page13, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page1C, u1400_casefold_page1D, u1400_casefold_page1E, u1400_casefold_page1F, + NULL, u1400_casefold_page21, NULL, NULL, u1400_casefold_page24, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page2C, u1400_casefold_page2D, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageA6, u1400_casefold_pageA7, + NULL, NULL, NULL, u1400_casefold_pageAB, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageFF, + NULL, NULL, NULL, NULL, u1400_casefold_page104, u1400_casefold_page105, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page10C, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u1400_casefold_page118, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_page16E, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u1400_casefold_page1E9, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; diff --git a/strings/ctype-unicode1400-casefold.h b/strings/ctype-unicode1400-casefold.h new file mode 100644 index 00000000000..dae180d0157 --- /dev/null +++ b/strings/ctype-unicode1400-casefold.h @@ -0,0 +1,4240 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=casefold \ + --page-name=u1400_casefold_page \ + --index-name=my_u1400_casefold_index \ + UnicodeData-14.0.0.txt + +*/ +const MY_CASEFOLD_CHARACTER u1400_casefold_page00[256]={ + {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */ + {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */ + {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */ + {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */ + {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */ + {0x000A,0x000A},{0x000B,0x000B}, /* 000A */ + {0x000C,0x000C},{0x000D,0x000D}, /* 000C */ + {0x000E,0x000E},{0x000F,0x000F}, /* 000E */ + {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */ + {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */ + {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */ + {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */ + {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */ + {0x001A,0x001A},{0x001B,0x001B}, /* 001A */ + {0x001C,0x001C},{0x001D,0x001D}, /* 001C */ + {0x001E,0x001E},{0x001F,0x001F}, /* 001E */ + {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */ + {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */ + {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */ + {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */ + {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */ + {0x002A,0x002A},{0x002B,0x002B}, /* 002A */ + {0x002C,0x002C},{0x002D,0x002D}, /* 002C */ + {0x002E,0x002E},{0x002F,0x002F}, /* 002E */ + {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */ + {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */ + {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */ + {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */ + {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */ + {0x003A,0x003A},{0x003B,0x003B}, /* 003A */ + {0x003C,0x003C},{0x003D,0x003D}, /* 003C */ + {0x003E,0x003E},{0x003F,0x003F}, /* 003E */ + {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 004A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 004C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 004E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */ + {0x005A,0x007A},{0x005B,0x005B}, /* 005A */ + {0x005C,0x005C},{0x005D,0x005D}, /* 005C */ + {0x005E,0x005E},{0x005F,0x005F}, /* 005E */ + {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 006A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 006C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 006E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */ + {0x005A,0x007A},{0x007B,0x007B}, /* 007A */ + {0x007C,0x007C},{0x007D,0x007D}, /* 007C */ + {0x007E,0x007E},{0x007F,0x007F}, /* 007E */ + {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */ + {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */ + {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */ + {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */ + {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */ + {0x008A,0x008A},{0x008B,0x008B}, /* 008A */ + {0x008C,0x008C},{0x008D,0x008D}, /* 008C */ + {0x008E,0x008E},{0x008F,0x008F}, /* 008E */ + {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */ + {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */ + {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */ + {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */ + {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */ + {0x009A,0x009A},{0x009B,0x009B}, /* 009A */ + {0x009C,0x009C},{0x009D,0x009D}, /* 009C */ + {0x009E,0x009E},{0x009F,0x009F}, /* 009E */ + {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */ + {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */ + {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */ + {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */ + {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */ + {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */ + {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */ + {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */ + {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */ + {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */ + {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */ + {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */ + {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */ + {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */ + {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */ + {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */ + {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */ + {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */ + {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */ + {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page01[256]={ + {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */ + {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */ + {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */ + {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */ + {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */ + {0x010A,0x010B},{0x010A,0x010B}, /* 010A */ + {0x010C,0x010D},{0x010C,0x010D}, /* 010C */ + {0x010E,0x010F},{0x010E,0x010F}, /* 010E */ + {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */ + {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */ + {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */ + {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */ + {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */ + {0x011A,0x011B},{0x011A,0x011B}, /* 011A */ + {0x011C,0x011D},{0x011C,0x011D}, /* 011C */ + {0x011E,0x011F},{0x011E,0x011F}, /* 011E */ + {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */ + {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */ + {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */ + {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */ + {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */ + {0x012A,0x012B},{0x012A,0x012B}, /* 012A */ + {0x012C,0x012D},{0x012C,0x012D}, /* 012C */ + {0x012E,0x012F},{0x012E,0x012F}, /* 012E */ + {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */ + {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */ + {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */ + {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */ + {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */ + {0x0139,0x013A},{0x013B,0x013C}, /* 013A */ + {0x013B,0x013C},{0x013D,0x013E}, /* 013C */ + {0x013D,0x013E},{0x013F,0x0140}, /* 013E */ + {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */ + {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */ + {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */ + {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */ + {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */ + {0x014A,0x014B},{0x014A,0x014B}, /* 014A */ + {0x014C,0x014D},{0x014C,0x014D}, /* 014C */ + {0x014E,0x014F},{0x014E,0x014F}, /* 014E */ + {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */ + {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */ + {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */ + {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */ + {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */ + {0x015A,0x015B},{0x015A,0x015B}, /* 015A */ + {0x015C,0x015D},{0x015C,0x015D}, /* 015C */ + {0x015E,0x015F},{0x015E,0x015F}, /* 015E */ + {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */ + {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */ + {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */ + {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */ + {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */ + {0x016A,0x016B},{0x016A,0x016B}, /* 016A */ + {0x016C,0x016D},{0x016C,0x016D}, /* 016C */ + {0x016E,0x016F},{0x016E,0x016F}, /* 016E */ + {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */ + {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */ + {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */ + {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */ + {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */ + {0x0179,0x017A},{0x017B,0x017C}, /* 017A */ + {0x017B,0x017C},{0x017D,0x017E}, /* 017C */ + {0x017D,0x017E},{0x0053,0x017F}, /* 017E */ + {0x0243,0x0180},{0x0181,0x0253}, /* 0180 */ + {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */ + {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */ + {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */ + {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */ + {0x018A,0x0257},{0x018B,0x018C}, /* 018A */ + {0x018B,0x018C},{0x018D,0x018D}, /* 018C */ + {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */ + {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */ + {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */ + {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */ + {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */ + {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */ + {0x023D,0x019A},{0x019B,0x019B}, /* 019A */ + {0x019C,0x026F},{0x019D,0x0272}, /* 019C */ + {0x0220,0x019E},{0x019F,0x0275}, /* 019E */ + {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */ + {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */ + {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */ + {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */ + {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */ + {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */ + {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */ + {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */ + {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */ + {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */ + {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */ + {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */ + {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */ + {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */ + {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */ + {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */ + {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */ + {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */ + {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */ + {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */ + {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */ + {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */ + {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */ + {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */ + {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */ + {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */ + {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */ + {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */ + {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */ + {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */ + {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */ + {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */ + {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */ + {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */ + {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */ + {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */ + {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */ + {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */ + {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */ + {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */ + {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */ + {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */ + {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */ + {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */ + {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */ + {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */ + {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */ + {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page02[256]={ + {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */ + {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */ + {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */ + {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */ + {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */ + {0x020A,0x020B},{0x020A,0x020B}, /* 020A */ + {0x020C,0x020D},{0x020C,0x020D}, /* 020C */ + {0x020E,0x020F},{0x020E,0x020F}, /* 020E */ + {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */ + {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */ + {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */ + {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */ + {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */ + {0x021A,0x021B},{0x021A,0x021B}, /* 021A */ + {0x021C,0x021D},{0x021C,0x021D}, /* 021C */ + {0x021E,0x021F},{0x021E,0x021F}, /* 021E */ + {0x0220,0x019E},{0x0221,0x0221}, /* 0220 */ + {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */ + {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */ + {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */ + {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */ + {0x022A,0x022B},{0x022A,0x022B}, /* 022A */ + {0x022C,0x022D},{0x022C,0x022D}, /* 022C */ + {0x022E,0x022F},{0x022E,0x022F}, /* 022E */ + {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */ + {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */ + {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */ + {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */ + {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */ + {0x023A,0x2C65},{0x023B,0x023C}, /* 023A */ + {0x023B,0x023C},{0x023D,0x019A}, /* 023C */ + {0x023E,0x2C66},{0x2C7E,0x023F}, /* 023E */ + {0x2C7F,0x0240},{0x0241,0x0242}, /* 0240 */ + {0x0241,0x0242},{0x0243,0x0180}, /* 0242 */ + {0x0244,0x0289},{0x0245,0x028C}, /* 0244 */ + {0x0246,0x0247},{0x0246,0x0247}, /* 0246 */ + {0x0248,0x0249},{0x0248,0x0249}, /* 0248 */ + {0x024A,0x024B},{0x024A,0x024B}, /* 024A */ + {0x024C,0x024D},{0x024C,0x024D}, /* 024C */ + {0x024E,0x024F},{0x024E,0x024F}, /* 024E */ + {0x2C6F,0x0250},{0x2C6D,0x0251}, /* 0250 */ + {0x2C70,0x0252},{0x0181,0x0253}, /* 0252 */ + {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */ + {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */ + {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */ + {0x025A,0x025A},{0x0190,0x025B}, /* 025A */ + {0xA7AB,0x025C},{0x025D,0x025D}, /* 025C */ + {0x025E,0x025E},{0x025F,0x025F}, /* 025E */ + {0x0193,0x0260},{0xA7AC,0x0261}, /* 0260 */ + {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */ + {0x0264,0x0264},{0xA78D,0x0265}, /* 0264 */ + {0xA7AA,0x0266},{0x0267,0x0267}, /* 0266 */ + {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */ + {0xA7AE,0x026A},{0x2C62,0x026B}, /* 026A */ + {0xA7AD,0x026C},{0x026D,0x026D}, /* 026C */ + {0x026E,0x026E},{0x019C,0x026F}, /* 026E */ + {0x0270,0x0270},{0x2C6E,0x0271}, /* 0270 */ + {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */ + {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */ + {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */ + {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */ + {0x027A,0x027A},{0x027B,0x027B}, /* 027A */ + {0x027C,0x027C},{0x2C64,0x027D}, /* 027C */ + {0x027E,0x027E},{0x027F,0x027F}, /* 027E */ + {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */ + {0xA7C5,0x0282},{0x01A9,0x0283}, /* 0282 */ + {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */ + {0x0286,0x0286},{0xA7B1,0x0287}, /* 0286 */ + {0x01AE,0x0288},{0x0244,0x0289}, /* 0288 */ + {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */ + {0x0245,0x028C},{0x028D,0x028D}, /* 028C */ + {0x028E,0x028E},{0x028F,0x028F}, /* 028E */ + {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */ + {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */ + {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */ + {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */ + {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */ + {0x029A,0x029A},{0x029B,0x029B}, /* 029A */ + {0x029C,0x029C},{0xA7B2,0x029D}, /* 029C */ + {0xA7B0,0x029E},{0x029F,0x029F}, /* 029E */ + {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */ + {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */ + {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */ + {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */ + {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */ + {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */ + {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */ + {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */ + {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */ + {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */ + {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */ + {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */ + {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */ + {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */ + {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */ + {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */ + {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */ + {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */ + {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */ + {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */ + {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */ + {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */ + {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */ + {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */ + {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */ + {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */ + {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */ + {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */ + {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */ + {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */ + {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */ + {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */ + {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */ + {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */ + {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */ + {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */ + {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */ + {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */ + {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */ + {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */ + {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */ + {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */ + {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */ + {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */ + {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */ + {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */ + {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */ + {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page03[256]={ + {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */ + {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */ + {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */ + {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */ + {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */ + {0x030A,0x030A},{0x030B,0x030B}, /* 030A */ + {0x030C,0x030C},{0x030D,0x030D}, /* 030C */ + {0x030E,0x030E},{0x030F,0x030F}, /* 030E */ + {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */ + {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */ + {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */ + {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */ + {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */ + {0x031A,0x031A},{0x031B,0x031B}, /* 031A */ + {0x031C,0x031C},{0x031D,0x031D}, /* 031C */ + {0x031E,0x031E},{0x031F,0x031F}, /* 031E */ + {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */ + {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */ + {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */ + {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */ + {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */ + {0x032A,0x032A},{0x032B,0x032B}, /* 032A */ + {0x032C,0x032C},{0x032D,0x032D}, /* 032C */ + {0x032E,0x032E},{0x032F,0x032F}, /* 032E */ + {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */ + {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */ + {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */ + {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */ + {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */ + {0x033A,0x033A},{0x033B,0x033B}, /* 033A */ + {0x033C,0x033C},{0x033D,0x033D}, /* 033C */ + {0x033E,0x033E},{0x033F,0x033F}, /* 033E */ + {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */ + {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */ + {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */ + {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */ + {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */ + {0x034A,0x034A},{0x034B,0x034B}, /* 034A */ + {0x034C,0x034C},{0x034D,0x034D}, /* 034C */ + {0x034E,0x034E},{0x034F,0x034F}, /* 034E */ + {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */ + {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */ + {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */ + {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */ + {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */ + {0x035A,0x035A},{0x035B,0x035B}, /* 035A */ + {0x035C,0x035C},{0x035D,0x035D}, /* 035C */ + {0x035E,0x035E},{0x035F,0x035F}, /* 035E */ + {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */ + {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */ + {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */ + {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */ + {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */ + {0x036A,0x036A},{0x036B,0x036B}, /* 036A */ + {0x036C,0x036C},{0x036D,0x036D}, /* 036C */ + {0x036E,0x036E},{0x036F,0x036F}, /* 036E */ + {0x0370,0x0371},{0x0370,0x0371}, /* 0370 */ + {0x0372,0x0373},{0x0372,0x0373}, /* 0372 */ + {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */ + {0x0376,0x0377},{0x0376,0x0377}, /* 0376 */ + {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */ + {0x037A,0x037A},{0x03FD,0x037B}, /* 037A */ + {0x03FE,0x037C},{0x03FF,0x037D}, /* 037C */ + {0x037E,0x037E},{0x037F,0x03F3}, /* 037E */ + {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */ + {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */ + {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */ + {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */ + {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */ + {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */ + {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */ + {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */ + {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */ + {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */ + {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */ + {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */ + {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */ + {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */ + {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */ + {0x038F,0x03CE},{0x03CF,0x03D7}, /* 03CE */ + {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */ + {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */ + {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */ + {0x03A0,0x03D6},{0x03CF,0x03D7}, /* 03D6 */ + {0x03D8,0x03D9},{0x03D8,0x03D9}, /* 03D8 */ + {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */ + {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */ + {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */ + {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */ + {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */ + {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */ + {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */ + {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */ + {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */ + {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */ + {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */ + {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */ + {0x03F9,0x03F2},{0x037F,0x03F3}, /* 03F2 */ + {0x03F4,0x03B8},{0x0395,0x03F5}, /* 03F4 */ + {0x03F6,0x03F6},{0x03F7,0x03F8}, /* 03F6 */ + {0x03F7,0x03F8},{0x03F9,0x03F2}, /* 03F8 */ + {0x03FA,0x03FB},{0x03FA,0x03FB}, /* 03FA */ + {0x03FC,0x03FC},{0x03FD,0x037B}, /* 03FC */ + {0x03FE,0x037C},{0x03FF,0x037D} /* 03FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page04[256]={ + {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 040A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 040C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 040E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 041A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 041C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 041E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 042A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 042C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 042E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 043A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 043C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 043E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 044A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 044C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 044E */ + {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 045A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 045C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 045E */ + {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */ + {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */ + {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */ + {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */ + {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */ + {0x046A,0x046B},{0x046A,0x046B}, /* 046A */ + {0x046C,0x046D},{0x046C,0x046D}, /* 046C */ + {0x046E,0x046F},{0x046E,0x046F}, /* 046E */ + {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */ + {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */ + {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */ + {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */ + {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */ + {0x047A,0x047B},{0x047A,0x047B}, /* 047A */ + {0x047C,0x047D},{0x047C,0x047D}, /* 047C */ + {0x047E,0x047F},{0x047E,0x047F}, /* 047E */ + {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */ + {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */ + {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */ + {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */ + {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */ + {0x048A,0x048B},{0x048A,0x048B}, /* 048A */ + {0x048C,0x048D},{0x048C,0x048D}, /* 048C */ + {0x048E,0x048F},{0x048E,0x048F}, /* 048E */ + {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */ + {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */ + {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */ + {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */ + {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */ + {0x049A,0x049B},{0x049A,0x049B}, /* 049A */ + {0x049C,0x049D},{0x049C,0x049D}, /* 049C */ + {0x049E,0x049F},{0x049E,0x049F}, /* 049E */ + {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */ + {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */ + {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */ + {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */ + {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */ + {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */ + {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */ + {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */ + {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */ + {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */ + {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */ + {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */ + {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */ + {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */ + {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */ + {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */ + {0x04C0,0x04CF},{0x04C1,0x04C2}, /* 04C0 */ + {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */ + {0x04C3,0x04C4},{0x04C5,0x04C6}, /* 04C4 */ + {0x04C5,0x04C6},{0x04C7,0x04C8}, /* 04C6 */ + {0x04C7,0x04C8},{0x04C9,0x04CA}, /* 04C8 */ + {0x04C9,0x04CA},{0x04CB,0x04CC}, /* 04CA */ + {0x04CB,0x04CC},{0x04CD,0x04CE}, /* 04CC */ + {0x04CD,0x04CE},{0x04C0,0x04CF}, /* 04CE */ + {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */ + {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */ + {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */ + {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */ + {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */ + {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */ + {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */ + {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */ + {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */ + {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */ + {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */ + {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */ + {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */ + {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */ + {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */ + {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */ + {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */ + {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */ + {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */ + {0x04F6,0x04F7},{0x04F6,0x04F7}, /* 04F6 */ + {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */ + {0x04FA,0x04FB},{0x04FA,0x04FB}, /* 04FA */ + {0x04FC,0x04FD},{0x04FC,0x04FD}, /* 04FC */ + {0x04FE,0x04FF},{0x04FE,0x04FF} /* 04FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page05[256]={ + {0x0500,0x0501},{0x0500,0x0501}, /* 0500 */ + {0x0502,0x0503},{0x0502,0x0503}, /* 0502 */ + {0x0504,0x0505},{0x0504,0x0505}, /* 0504 */ + {0x0506,0x0507},{0x0506,0x0507}, /* 0506 */ + {0x0508,0x0509},{0x0508,0x0509}, /* 0508 */ + {0x050A,0x050B},{0x050A,0x050B}, /* 050A */ + {0x050C,0x050D},{0x050C,0x050D}, /* 050C */ + {0x050E,0x050F},{0x050E,0x050F}, /* 050E */ + {0x0510,0x0511},{0x0510,0x0511}, /* 0510 */ + {0x0512,0x0513},{0x0512,0x0513}, /* 0512 */ + {0x0514,0x0515},{0x0514,0x0515}, /* 0514 */ + {0x0516,0x0517},{0x0516,0x0517}, /* 0516 */ + {0x0518,0x0519},{0x0518,0x0519}, /* 0518 */ + {0x051A,0x051B},{0x051A,0x051B}, /* 051A */ + {0x051C,0x051D},{0x051C,0x051D}, /* 051C */ + {0x051E,0x051F},{0x051E,0x051F}, /* 051E */ + {0x0520,0x0521},{0x0520,0x0521}, /* 0520 */ + {0x0522,0x0523},{0x0522,0x0523}, /* 0522 */ + {0x0524,0x0525},{0x0524,0x0525}, /* 0524 */ + {0x0526,0x0527},{0x0526,0x0527}, /* 0526 */ + {0x0528,0x0529},{0x0528,0x0529}, /* 0528 */ + {0x052A,0x052B},{0x052A,0x052B}, /* 052A */ + {0x052C,0x052D},{0x052C,0x052D}, /* 052C */ + {0x052E,0x052F},{0x052E,0x052F}, /* 052E */ + {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 053A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 053C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 053E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 054A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 054C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 054E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */ + {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */ + {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */ + {0x055A,0x055A},{0x055B,0x055B}, /* 055A */ + {0x055C,0x055C},{0x055D,0x055D}, /* 055C */ + {0x055E,0x055E},{0x055F,0x055F}, /* 055E */ + {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 056A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 056C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 056E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 057A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 057C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 057E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */ + {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */ + {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */ + {0x058A,0x058A},{0x058B,0x058B}, /* 058A */ + {0x058C,0x058C},{0x058D,0x058D}, /* 058C */ + {0x058E,0x058E},{0x058F,0x058F}, /* 058E */ + {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */ + {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */ + {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */ + {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */ + {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */ + {0x059A,0x059A},{0x059B,0x059B}, /* 059A */ + {0x059C,0x059C},{0x059D,0x059D}, /* 059C */ + {0x059E,0x059E},{0x059F,0x059F}, /* 059E */ + {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */ + {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */ + {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */ + {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */ + {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */ + {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */ + {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */ + {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */ + {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */ + {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */ + {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */ + {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */ + {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */ + {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */ + {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */ + {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */ + {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */ + {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */ + {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */ + {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */ + {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */ + {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */ + {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */ + {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */ + {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */ + {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */ + {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */ + {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */ + {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */ + {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */ + {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */ + {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */ + {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */ + {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */ + {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */ + {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */ + {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */ + {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */ + {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */ + {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */ + {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */ + {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */ + {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */ + {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */ + {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */ + {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */ + {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */ + {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page06[256]={ /* This page is dummy */ + {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */ + {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */ + {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */ + {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */ + {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */ + {0x060A,0x060A},{0x060B,0x060B}, /* 060A */ + {0x060C,0x060C},{0x060D,0x060D}, /* 060C */ + {0x060E,0x060E},{0x060F,0x060F}, /* 060E */ + {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */ + {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */ + {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */ + {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */ + {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */ + {0x061A,0x061A},{0x061B,0x061B}, /* 061A */ + {0x061C,0x061C},{0x061D,0x061D}, /* 061C */ + {0x061E,0x061E},{0x061F,0x061F}, /* 061E */ + {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */ + {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */ + {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */ + {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */ + {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */ + {0x062A,0x062A},{0x062B,0x062B}, /* 062A */ + {0x062C,0x062C},{0x062D,0x062D}, /* 062C */ + {0x062E,0x062E},{0x062F,0x062F}, /* 062E */ + {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */ + {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */ + {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */ + {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */ + {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */ + {0x063A,0x063A},{0x063B,0x063B}, /* 063A */ + {0x063C,0x063C},{0x063D,0x063D}, /* 063C */ + {0x063E,0x063E},{0x063F,0x063F}, /* 063E */ + {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */ + {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */ + {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */ + {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */ + {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */ + {0x064A,0x064A},{0x064B,0x064B}, /* 064A */ + {0x064C,0x064C},{0x064D,0x064D}, /* 064C */ + {0x064E,0x064E},{0x064F,0x064F}, /* 064E */ + {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */ + {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */ + {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */ + {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */ + {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */ + {0x065A,0x065A},{0x065B,0x065B}, /* 065A */ + {0x065C,0x065C},{0x065D,0x065D}, /* 065C */ + {0x065E,0x065E},{0x065F,0x065F}, /* 065E */ + {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */ + {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */ + {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */ + {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */ + {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */ + {0x066A,0x066A},{0x066B,0x066B}, /* 066A */ + {0x066C,0x066C},{0x066D,0x066D}, /* 066C */ + {0x066E,0x066E},{0x066F,0x066F}, /* 066E */ + {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */ + {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */ + {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */ + {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */ + {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */ + {0x067A,0x067A},{0x067B,0x067B}, /* 067A */ + {0x067C,0x067C},{0x067D,0x067D}, /* 067C */ + {0x067E,0x067E},{0x067F,0x067F}, /* 067E */ + {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */ + {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */ + {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */ + {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */ + {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */ + {0x068A,0x068A},{0x068B,0x068B}, /* 068A */ + {0x068C,0x068C},{0x068D,0x068D}, /* 068C */ + {0x068E,0x068E},{0x068F,0x068F}, /* 068E */ + {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */ + {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */ + {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */ + {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */ + {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */ + {0x069A,0x069A},{0x069B,0x069B}, /* 069A */ + {0x069C,0x069C},{0x069D,0x069D}, /* 069C */ + {0x069E,0x069E},{0x069F,0x069F}, /* 069E */ + {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */ + {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */ + {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */ + {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */ + {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */ + {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */ + {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */ + {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */ + {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */ + {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */ + {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */ + {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */ + {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */ + {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */ + {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */ + {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */ + {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */ + {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */ + {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */ + {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */ + {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */ + {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */ + {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */ + {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */ + {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */ + {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */ + {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */ + {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */ + {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */ + {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */ + {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */ + {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */ + {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */ + {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */ + {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */ + {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */ + {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */ + {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */ + {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */ + {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */ + {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */ + {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */ + {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */ + {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */ + {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */ + {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */ + {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */ + {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page07[256]={ /* This page is dummy */ + {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */ + {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */ + {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */ + {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */ + {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */ + {0x070A,0x070A},{0x070B,0x070B}, /* 070A */ + {0x070C,0x070C},{0x070D,0x070D}, /* 070C */ + {0x070E,0x070E},{0x070F,0x070F}, /* 070E */ + {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */ + {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */ + {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */ + {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */ + {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */ + {0x071A,0x071A},{0x071B,0x071B}, /* 071A */ + {0x071C,0x071C},{0x071D,0x071D}, /* 071C */ + {0x071E,0x071E},{0x071F,0x071F}, /* 071E */ + {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */ + {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */ + {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */ + {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */ + {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */ + {0x072A,0x072A},{0x072B,0x072B}, /* 072A */ + {0x072C,0x072C},{0x072D,0x072D}, /* 072C */ + {0x072E,0x072E},{0x072F,0x072F}, /* 072E */ + {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */ + {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */ + {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */ + {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */ + {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */ + {0x073A,0x073A},{0x073B,0x073B}, /* 073A */ + {0x073C,0x073C},{0x073D,0x073D}, /* 073C */ + {0x073E,0x073E},{0x073F,0x073F}, /* 073E */ + {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */ + {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */ + {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */ + {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */ + {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */ + {0x074A,0x074A},{0x074B,0x074B}, /* 074A */ + {0x074C,0x074C},{0x074D,0x074D}, /* 074C */ + {0x074E,0x074E},{0x074F,0x074F}, /* 074E */ + {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */ + {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */ + {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */ + {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */ + {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */ + {0x075A,0x075A},{0x075B,0x075B}, /* 075A */ + {0x075C,0x075C},{0x075D,0x075D}, /* 075C */ + {0x075E,0x075E},{0x075F,0x075F}, /* 075E */ + {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */ + {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */ + {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */ + {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */ + {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */ + {0x076A,0x076A},{0x076B,0x076B}, /* 076A */ + {0x076C,0x076C},{0x076D,0x076D}, /* 076C */ + {0x076E,0x076E},{0x076F,0x076F}, /* 076E */ + {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */ + {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */ + {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */ + {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */ + {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */ + {0x077A,0x077A},{0x077B,0x077B}, /* 077A */ + {0x077C,0x077C},{0x077D,0x077D}, /* 077C */ + {0x077E,0x077E},{0x077F,0x077F}, /* 077E */ + {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */ + {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */ + {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */ + {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */ + {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */ + {0x078A,0x078A},{0x078B,0x078B}, /* 078A */ + {0x078C,0x078C},{0x078D,0x078D}, /* 078C */ + {0x078E,0x078E},{0x078F,0x078F}, /* 078E */ + {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */ + {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */ + {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */ + {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */ + {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */ + {0x079A,0x079A},{0x079B,0x079B}, /* 079A */ + {0x079C,0x079C},{0x079D,0x079D}, /* 079C */ + {0x079E,0x079E},{0x079F,0x079F}, /* 079E */ + {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */ + {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */ + {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */ + {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */ + {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */ + {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */ + {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */ + {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */ + {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */ + {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */ + {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */ + {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */ + {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */ + {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */ + {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */ + {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */ + {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */ + {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */ + {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */ + {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */ + {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */ + {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */ + {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */ + {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */ + {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */ + {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */ + {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */ + {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */ + {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */ + {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */ + {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */ + {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */ + {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */ + {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */ + {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */ + {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */ + {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */ + {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */ + {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */ + {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */ + {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */ + {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */ + {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */ + {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */ + {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */ + {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */ + {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */ + {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page10[256]={ + {0x1000,0x1000},{0x1001,0x1001}, /* 1000 */ + {0x1002,0x1002},{0x1003,0x1003}, /* 1002 */ + {0x1004,0x1004},{0x1005,0x1005}, /* 1004 */ + {0x1006,0x1006},{0x1007,0x1007}, /* 1006 */ + {0x1008,0x1008},{0x1009,0x1009}, /* 1008 */ + {0x100A,0x100A},{0x100B,0x100B}, /* 100A */ + {0x100C,0x100C},{0x100D,0x100D}, /* 100C */ + {0x100E,0x100E},{0x100F,0x100F}, /* 100E */ + {0x1010,0x1010},{0x1011,0x1011}, /* 1010 */ + {0x1012,0x1012},{0x1013,0x1013}, /* 1012 */ + {0x1014,0x1014},{0x1015,0x1015}, /* 1014 */ + {0x1016,0x1016},{0x1017,0x1017}, /* 1016 */ + {0x1018,0x1018},{0x1019,0x1019}, /* 1018 */ + {0x101A,0x101A},{0x101B,0x101B}, /* 101A */ + {0x101C,0x101C},{0x101D,0x101D}, /* 101C */ + {0x101E,0x101E},{0x101F,0x101F}, /* 101E */ + {0x1020,0x1020},{0x1021,0x1021}, /* 1020 */ + {0x1022,0x1022},{0x1023,0x1023}, /* 1022 */ + {0x1024,0x1024},{0x1025,0x1025}, /* 1024 */ + {0x1026,0x1026},{0x1027,0x1027}, /* 1026 */ + {0x1028,0x1028},{0x1029,0x1029}, /* 1028 */ + {0x102A,0x102A},{0x102B,0x102B}, /* 102A */ + {0x102C,0x102C},{0x102D,0x102D}, /* 102C */ + {0x102E,0x102E},{0x102F,0x102F}, /* 102E */ + {0x1030,0x1030},{0x1031,0x1031}, /* 1030 */ + {0x1032,0x1032},{0x1033,0x1033}, /* 1032 */ + {0x1034,0x1034},{0x1035,0x1035}, /* 1034 */ + {0x1036,0x1036},{0x1037,0x1037}, /* 1036 */ + {0x1038,0x1038},{0x1039,0x1039}, /* 1038 */ + {0x103A,0x103A},{0x103B,0x103B}, /* 103A */ + {0x103C,0x103C},{0x103D,0x103D}, /* 103C */ + {0x103E,0x103E},{0x103F,0x103F}, /* 103E */ + {0x1040,0x1040},{0x1041,0x1041}, /* 1040 */ + {0x1042,0x1042},{0x1043,0x1043}, /* 1042 */ + {0x1044,0x1044},{0x1045,0x1045}, /* 1044 */ + {0x1046,0x1046},{0x1047,0x1047}, /* 1046 */ + {0x1048,0x1048},{0x1049,0x1049}, /* 1048 */ + {0x104A,0x104A},{0x104B,0x104B}, /* 104A */ + {0x104C,0x104C},{0x104D,0x104D}, /* 104C */ + {0x104E,0x104E},{0x104F,0x104F}, /* 104E */ + {0x1050,0x1050},{0x1051,0x1051}, /* 1050 */ + {0x1052,0x1052},{0x1053,0x1053}, /* 1052 */ + {0x1054,0x1054},{0x1055,0x1055}, /* 1054 */ + {0x1056,0x1056},{0x1057,0x1057}, /* 1056 */ + {0x1058,0x1058},{0x1059,0x1059}, /* 1058 */ + {0x105A,0x105A},{0x105B,0x105B}, /* 105A */ + {0x105C,0x105C},{0x105D,0x105D}, /* 105C */ + {0x105E,0x105E},{0x105F,0x105F}, /* 105E */ + {0x1060,0x1060},{0x1061,0x1061}, /* 1060 */ + {0x1062,0x1062},{0x1063,0x1063}, /* 1062 */ + {0x1064,0x1064},{0x1065,0x1065}, /* 1064 */ + {0x1066,0x1066},{0x1067,0x1067}, /* 1066 */ + {0x1068,0x1068},{0x1069,0x1069}, /* 1068 */ + {0x106A,0x106A},{0x106B,0x106B}, /* 106A */ + {0x106C,0x106C},{0x106D,0x106D}, /* 106C */ + {0x106E,0x106E},{0x106F,0x106F}, /* 106E */ + {0x1070,0x1070},{0x1071,0x1071}, /* 1070 */ + {0x1072,0x1072},{0x1073,0x1073}, /* 1072 */ + {0x1074,0x1074},{0x1075,0x1075}, /* 1074 */ + {0x1076,0x1076},{0x1077,0x1077}, /* 1076 */ + {0x1078,0x1078},{0x1079,0x1079}, /* 1078 */ + {0x107A,0x107A},{0x107B,0x107B}, /* 107A */ + {0x107C,0x107C},{0x107D,0x107D}, /* 107C */ + {0x107E,0x107E},{0x107F,0x107F}, /* 107E */ + {0x1080,0x1080},{0x1081,0x1081}, /* 1080 */ + {0x1082,0x1082},{0x1083,0x1083}, /* 1082 */ + {0x1084,0x1084},{0x1085,0x1085}, /* 1084 */ + {0x1086,0x1086},{0x1087,0x1087}, /* 1086 */ + {0x1088,0x1088},{0x1089,0x1089}, /* 1088 */ + {0x108A,0x108A},{0x108B,0x108B}, /* 108A */ + {0x108C,0x108C},{0x108D,0x108D}, /* 108C */ + {0x108E,0x108E},{0x108F,0x108F}, /* 108E */ + {0x1090,0x1090},{0x1091,0x1091}, /* 1090 */ + {0x1092,0x1092},{0x1093,0x1093}, /* 1092 */ + {0x1094,0x1094},{0x1095,0x1095}, /* 1094 */ + {0x1096,0x1096},{0x1097,0x1097}, /* 1096 */ + {0x1098,0x1098},{0x1099,0x1099}, /* 1098 */ + {0x109A,0x109A},{0x109B,0x109B}, /* 109A */ + {0x109C,0x109C},{0x109D,0x109D}, /* 109C */ + {0x109E,0x109E},{0x109F,0x109F}, /* 109E */ + {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 10A0 */ + {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 10A2 */ + {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 10A4 */ + {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 10A6 */ + {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 10A8 */ + {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 10AA */ + {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 10AC */ + {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 10AE */ + {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 10B0 */ + {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 10B2 */ + {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 10B4 */ + {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 10B6 */ + {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 10B8 */ + {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 10BA */ + {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 10BC */ + {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 10BE */ + {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 10C0 */ + {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 10C2 */ + {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 10C4 */ + {0x10C6,0x10C6},{0x10C7,0x2D27}, /* 10C6 */ + {0x10C8,0x10C8},{0x10C9,0x10C9}, /* 10C8 */ + {0x10CA,0x10CA},{0x10CB,0x10CB}, /* 10CA */ + {0x10CC,0x10CC},{0x10CD,0x2D2D}, /* 10CC */ + {0x10CE,0x10CE},{0x10CF,0x10CF}, /* 10CE */ + {0x1C90,0x10D0},{0x1C91,0x10D1}, /* 10D0 */ + {0x1C92,0x10D2},{0x1C93,0x10D3}, /* 10D2 */ + {0x1C94,0x10D4},{0x1C95,0x10D5}, /* 10D4 */ + {0x1C96,0x10D6},{0x1C97,0x10D7}, /* 10D6 */ + {0x1C98,0x10D8},{0x1C99,0x10D9}, /* 10D8 */ + {0x1C9A,0x10DA},{0x1C9B,0x10DB}, /* 10DA */ + {0x1C9C,0x10DC},{0x1C9D,0x10DD}, /* 10DC */ + {0x1C9E,0x10DE},{0x1C9F,0x10DF}, /* 10DE */ + {0x1CA0,0x10E0},{0x1CA1,0x10E1}, /* 10E0 */ + {0x1CA2,0x10E2},{0x1CA3,0x10E3}, /* 10E2 */ + {0x1CA4,0x10E4},{0x1CA5,0x10E5}, /* 10E4 */ + {0x1CA6,0x10E6},{0x1CA7,0x10E7}, /* 10E6 */ + {0x1CA8,0x10E8},{0x1CA9,0x10E9}, /* 10E8 */ + {0x1CAA,0x10EA},{0x1CAB,0x10EB}, /* 10EA */ + {0x1CAC,0x10EC},{0x1CAD,0x10ED}, /* 10EC */ + {0x1CAE,0x10EE},{0x1CAF,0x10EF}, /* 10EE */ + {0x1CB0,0x10F0},{0x1CB1,0x10F1}, /* 10F0 */ + {0x1CB2,0x10F2},{0x1CB3,0x10F3}, /* 10F2 */ + {0x1CB4,0x10F4},{0x1CB5,0x10F5}, /* 10F4 */ + {0x1CB6,0x10F6},{0x1CB7,0x10F7}, /* 10F6 */ + {0x1CB8,0x10F8},{0x1CB9,0x10F9}, /* 10F8 */ + {0x1CBA,0x10FA},{0x10FB,0x10FB}, /* 10FA */ + {0x10FC,0x10FC},{0x1CBD,0x10FD}, /* 10FC */ + {0x1CBE,0x10FE},{0x1CBF,0x10FF} /* 10FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page13[256]={ + {0x1300,0x1300},{0x1301,0x1301}, /* 1300 */ + {0x1302,0x1302},{0x1303,0x1303}, /* 1302 */ + {0x1304,0x1304},{0x1305,0x1305}, /* 1304 */ + {0x1306,0x1306},{0x1307,0x1307}, /* 1306 */ + {0x1308,0x1308},{0x1309,0x1309}, /* 1308 */ + {0x130A,0x130A},{0x130B,0x130B}, /* 130A */ + {0x130C,0x130C},{0x130D,0x130D}, /* 130C */ + {0x130E,0x130E},{0x130F,0x130F}, /* 130E */ + {0x1310,0x1310},{0x1311,0x1311}, /* 1310 */ + {0x1312,0x1312},{0x1313,0x1313}, /* 1312 */ + {0x1314,0x1314},{0x1315,0x1315}, /* 1314 */ + {0x1316,0x1316},{0x1317,0x1317}, /* 1316 */ + {0x1318,0x1318},{0x1319,0x1319}, /* 1318 */ + {0x131A,0x131A},{0x131B,0x131B}, /* 131A */ + {0x131C,0x131C},{0x131D,0x131D}, /* 131C */ + {0x131E,0x131E},{0x131F,0x131F}, /* 131E */ + {0x1320,0x1320},{0x1321,0x1321}, /* 1320 */ + {0x1322,0x1322},{0x1323,0x1323}, /* 1322 */ + {0x1324,0x1324},{0x1325,0x1325}, /* 1324 */ + {0x1326,0x1326},{0x1327,0x1327}, /* 1326 */ + {0x1328,0x1328},{0x1329,0x1329}, /* 1328 */ + {0x132A,0x132A},{0x132B,0x132B}, /* 132A */ + {0x132C,0x132C},{0x132D,0x132D}, /* 132C */ + {0x132E,0x132E},{0x132F,0x132F}, /* 132E */ + {0x1330,0x1330},{0x1331,0x1331}, /* 1330 */ + {0x1332,0x1332},{0x1333,0x1333}, /* 1332 */ + {0x1334,0x1334},{0x1335,0x1335}, /* 1334 */ + {0x1336,0x1336},{0x1337,0x1337}, /* 1336 */ + {0x1338,0x1338},{0x1339,0x1339}, /* 1338 */ + {0x133A,0x133A},{0x133B,0x133B}, /* 133A */ + {0x133C,0x133C},{0x133D,0x133D}, /* 133C */ + {0x133E,0x133E},{0x133F,0x133F}, /* 133E */ + {0x1340,0x1340},{0x1341,0x1341}, /* 1340 */ + {0x1342,0x1342},{0x1343,0x1343}, /* 1342 */ + {0x1344,0x1344},{0x1345,0x1345}, /* 1344 */ + {0x1346,0x1346},{0x1347,0x1347}, /* 1346 */ + {0x1348,0x1348},{0x1349,0x1349}, /* 1348 */ + {0x134A,0x134A},{0x134B,0x134B}, /* 134A */ + {0x134C,0x134C},{0x134D,0x134D}, /* 134C */ + {0x134E,0x134E},{0x134F,0x134F}, /* 134E */ + {0x1350,0x1350},{0x1351,0x1351}, /* 1350 */ + {0x1352,0x1352},{0x1353,0x1353}, /* 1352 */ + {0x1354,0x1354},{0x1355,0x1355}, /* 1354 */ + {0x1356,0x1356},{0x1357,0x1357}, /* 1356 */ + {0x1358,0x1358},{0x1359,0x1359}, /* 1358 */ + {0x135A,0x135A},{0x135B,0x135B}, /* 135A */ + {0x135C,0x135C},{0x135D,0x135D}, /* 135C */ + {0x135E,0x135E},{0x135F,0x135F}, /* 135E */ + {0x1360,0x1360},{0x1361,0x1361}, /* 1360 */ + {0x1362,0x1362},{0x1363,0x1363}, /* 1362 */ + {0x1364,0x1364},{0x1365,0x1365}, /* 1364 */ + {0x1366,0x1366},{0x1367,0x1367}, /* 1366 */ + {0x1368,0x1368},{0x1369,0x1369}, /* 1368 */ + {0x136A,0x136A},{0x136B,0x136B}, /* 136A */ + {0x136C,0x136C},{0x136D,0x136D}, /* 136C */ + {0x136E,0x136E},{0x136F,0x136F}, /* 136E */ + {0x1370,0x1370},{0x1371,0x1371}, /* 1370 */ + {0x1372,0x1372},{0x1373,0x1373}, /* 1372 */ + {0x1374,0x1374},{0x1375,0x1375}, /* 1374 */ + {0x1376,0x1376},{0x1377,0x1377}, /* 1376 */ + {0x1378,0x1378},{0x1379,0x1379}, /* 1378 */ + {0x137A,0x137A},{0x137B,0x137B}, /* 137A */ + {0x137C,0x137C},{0x137D,0x137D}, /* 137C */ + {0x137E,0x137E},{0x137F,0x137F}, /* 137E */ + {0x1380,0x1380},{0x1381,0x1381}, /* 1380 */ + {0x1382,0x1382},{0x1383,0x1383}, /* 1382 */ + {0x1384,0x1384},{0x1385,0x1385}, /* 1384 */ + {0x1386,0x1386},{0x1387,0x1387}, /* 1386 */ + {0x1388,0x1388},{0x1389,0x1389}, /* 1388 */ + {0x138A,0x138A},{0x138B,0x138B}, /* 138A */ + {0x138C,0x138C},{0x138D,0x138D}, /* 138C */ + {0x138E,0x138E},{0x138F,0x138F}, /* 138E */ + {0x1390,0x1390},{0x1391,0x1391}, /* 1390 */ + {0x1392,0x1392},{0x1393,0x1393}, /* 1392 */ + {0x1394,0x1394},{0x1395,0x1395}, /* 1394 */ + {0x1396,0x1396},{0x1397,0x1397}, /* 1396 */ + {0x1398,0x1398},{0x1399,0x1399}, /* 1398 */ + {0x139A,0x139A},{0x139B,0x139B}, /* 139A */ + {0x139C,0x139C},{0x139D,0x139D}, /* 139C */ + {0x139E,0x139E},{0x139F,0x139F}, /* 139E */ + {0x13A0,0xAB70},{0x13A1,0xAB71}, /* 13A0 */ + {0x13A2,0xAB72},{0x13A3,0xAB73}, /* 13A2 */ + {0x13A4,0xAB74},{0x13A5,0xAB75}, /* 13A4 */ + {0x13A6,0xAB76},{0x13A7,0xAB77}, /* 13A6 */ + {0x13A8,0xAB78},{0x13A9,0xAB79}, /* 13A8 */ + {0x13AA,0xAB7A},{0x13AB,0xAB7B}, /* 13AA */ + {0x13AC,0xAB7C},{0x13AD,0xAB7D}, /* 13AC */ + {0x13AE,0xAB7E},{0x13AF,0xAB7F}, /* 13AE */ + {0x13B0,0xAB80},{0x13B1,0xAB81}, /* 13B0 */ + {0x13B2,0xAB82},{0x13B3,0xAB83}, /* 13B2 */ + {0x13B4,0xAB84},{0x13B5,0xAB85}, /* 13B4 */ + {0x13B6,0xAB86},{0x13B7,0xAB87}, /* 13B6 */ + {0x13B8,0xAB88},{0x13B9,0xAB89}, /* 13B8 */ + {0x13BA,0xAB8A},{0x13BB,0xAB8B}, /* 13BA */ + {0x13BC,0xAB8C},{0x13BD,0xAB8D}, /* 13BC */ + {0x13BE,0xAB8E},{0x13BF,0xAB8F}, /* 13BE */ + {0x13C0,0xAB90},{0x13C1,0xAB91}, /* 13C0 */ + {0x13C2,0xAB92},{0x13C3,0xAB93}, /* 13C2 */ + {0x13C4,0xAB94},{0x13C5,0xAB95}, /* 13C4 */ + {0x13C6,0xAB96},{0x13C7,0xAB97}, /* 13C6 */ + {0x13C8,0xAB98},{0x13C9,0xAB99}, /* 13C8 */ + {0x13CA,0xAB9A},{0x13CB,0xAB9B}, /* 13CA */ + {0x13CC,0xAB9C},{0x13CD,0xAB9D}, /* 13CC */ + {0x13CE,0xAB9E},{0x13CF,0xAB9F}, /* 13CE */ + {0x13D0,0xABA0},{0x13D1,0xABA1}, /* 13D0 */ + {0x13D2,0xABA2},{0x13D3,0xABA3}, /* 13D2 */ + {0x13D4,0xABA4},{0x13D5,0xABA5}, /* 13D4 */ + {0x13D6,0xABA6},{0x13D7,0xABA7}, /* 13D6 */ + {0x13D8,0xABA8},{0x13D9,0xABA9}, /* 13D8 */ + {0x13DA,0xABAA},{0x13DB,0xABAB}, /* 13DA */ + {0x13DC,0xABAC},{0x13DD,0xABAD}, /* 13DC */ + {0x13DE,0xABAE},{0x13DF,0xABAF}, /* 13DE */ + {0x13E0,0xABB0},{0x13E1,0xABB1}, /* 13E0 */ + {0x13E2,0xABB2},{0x13E3,0xABB3}, /* 13E2 */ + {0x13E4,0xABB4},{0x13E5,0xABB5}, /* 13E4 */ + {0x13E6,0xABB6},{0x13E7,0xABB7}, /* 13E6 */ + {0x13E8,0xABB8},{0x13E9,0xABB9}, /* 13E8 */ + {0x13EA,0xABBA},{0x13EB,0xABBB}, /* 13EA */ + {0x13EC,0xABBC},{0x13ED,0xABBD}, /* 13EC */ + {0x13EE,0xABBE},{0x13EF,0xABBF}, /* 13EE */ + {0x13F0,0x13F8},{0x13F1,0x13F9}, /* 13F0 */ + {0x13F2,0x13FA},{0x13F3,0x13FB}, /* 13F2 */ + {0x13F4,0x13FC},{0x13F5,0x13FD}, /* 13F4 */ + {0x13F6,0x13F6},{0x13F7,0x13F7}, /* 13F6 */ + {0x13F0,0x13F8},{0x13F1,0x13F9}, /* 13F8 */ + {0x13F2,0x13FA},{0x13F3,0x13FB}, /* 13FA */ + {0x13F4,0x13FC},{0x13F5,0x13FD}, /* 13FC */ + {0x13FE,0x13FE},{0x13FF,0x13FF} /* 13FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page1C[256]={ + {0x1C00,0x1C00},{0x1C01,0x1C01}, /* 1C00 */ + {0x1C02,0x1C02},{0x1C03,0x1C03}, /* 1C02 */ + {0x1C04,0x1C04},{0x1C05,0x1C05}, /* 1C04 */ + {0x1C06,0x1C06},{0x1C07,0x1C07}, /* 1C06 */ + {0x1C08,0x1C08},{0x1C09,0x1C09}, /* 1C08 */ + {0x1C0A,0x1C0A},{0x1C0B,0x1C0B}, /* 1C0A */ + {0x1C0C,0x1C0C},{0x1C0D,0x1C0D}, /* 1C0C */ + {0x1C0E,0x1C0E},{0x1C0F,0x1C0F}, /* 1C0E */ + {0x1C10,0x1C10},{0x1C11,0x1C11}, /* 1C10 */ + {0x1C12,0x1C12},{0x1C13,0x1C13}, /* 1C12 */ + {0x1C14,0x1C14},{0x1C15,0x1C15}, /* 1C14 */ + {0x1C16,0x1C16},{0x1C17,0x1C17}, /* 1C16 */ + {0x1C18,0x1C18},{0x1C19,0x1C19}, /* 1C18 */ + {0x1C1A,0x1C1A},{0x1C1B,0x1C1B}, /* 1C1A */ + {0x1C1C,0x1C1C},{0x1C1D,0x1C1D}, /* 1C1C */ + {0x1C1E,0x1C1E},{0x1C1F,0x1C1F}, /* 1C1E */ + {0x1C20,0x1C20},{0x1C21,0x1C21}, /* 1C20 */ + {0x1C22,0x1C22},{0x1C23,0x1C23}, /* 1C22 */ + {0x1C24,0x1C24},{0x1C25,0x1C25}, /* 1C24 */ + {0x1C26,0x1C26},{0x1C27,0x1C27}, /* 1C26 */ + {0x1C28,0x1C28},{0x1C29,0x1C29}, /* 1C28 */ + {0x1C2A,0x1C2A},{0x1C2B,0x1C2B}, /* 1C2A */ + {0x1C2C,0x1C2C},{0x1C2D,0x1C2D}, /* 1C2C */ + {0x1C2E,0x1C2E},{0x1C2F,0x1C2F}, /* 1C2E */ + {0x1C30,0x1C30},{0x1C31,0x1C31}, /* 1C30 */ + {0x1C32,0x1C32},{0x1C33,0x1C33}, /* 1C32 */ + {0x1C34,0x1C34},{0x1C35,0x1C35}, /* 1C34 */ + {0x1C36,0x1C36},{0x1C37,0x1C37}, /* 1C36 */ + {0x1C38,0x1C38},{0x1C39,0x1C39}, /* 1C38 */ + {0x1C3A,0x1C3A},{0x1C3B,0x1C3B}, /* 1C3A */ + {0x1C3C,0x1C3C},{0x1C3D,0x1C3D}, /* 1C3C */ + {0x1C3E,0x1C3E},{0x1C3F,0x1C3F}, /* 1C3E */ + {0x1C40,0x1C40},{0x1C41,0x1C41}, /* 1C40 */ + {0x1C42,0x1C42},{0x1C43,0x1C43}, /* 1C42 */ + {0x1C44,0x1C44},{0x1C45,0x1C45}, /* 1C44 */ + {0x1C46,0x1C46},{0x1C47,0x1C47}, /* 1C46 */ + {0x1C48,0x1C48},{0x1C49,0x1C49}, /* 1C48 */ + {0x1C4A,0x1C4A},{0x1C4B,0x1C4B}, /* 1C4A */ + {0x1C4C,0x1C4C},{0x1C4D,0x1C4D}, /* 1C4C */ + {0x1C4E,0x1C4E},{0x1C4F,0x1C4F}, /* 1C4E */ + {0x1C50,0x1C50},{0x1C51,0x1C51}, /* 1C50 */ + {0x1C52,0x1C52},{0x1C53,0x1C53}, /* 1C52 */ + {0x1C54,0x1C54},{0x1C55,0x1C55}, /* 1C54 */ + {0x1C56,0x1C56},{0x1C57,0x1C57}, /* 1C56 */ + {0x1C58,0x1C58},{0x1C59,0x1C59}, /* 1C58 */ + {0x1C5A,0x1C5A},{0x1C5B,0x1C5B}, /* 1C5A */ + {0x1C5C,0x1C5C},{0x1C5D,0x1C5D}, /* 1C5C */ + {0x1C5E,0x1C5E},{0x1C5F,0x1C5F}, /* 1C5E */ + {0x1C60,0x1C60},{0x1C61,0x1C61}, /* 1C60 */ + {0x1C62,0x1C62},{0x1C63,0x1C63}, /* 1C62 */ + {0x1C64,0x1C64},{0x1C65,0x1C65}, /* 1C64 */ + {0x1C66,0x1C66},{0x1C67,0x1C67}, /* 1C66 */ + {0x1C68,0x1C68},{0x1C69,0x1C69}, /* 1C68 */ + {0x1C6A,0x1C6A},{0x1C6B,0x1C6B}, /* 1C6A */ + {0x1C6C,0x1C6C},{0x1C6D,0x1C6D}, /* 1C6C */ + {0x1C6E,0x1C6E},{0x1C6F,0x1C6F}, /* 1C6E */ + {0x1C70,0x1C70},{0x1C71,0x1C71}, /* 1C70 */ + {0x1C72,0x1C72},{0x1C73,0x1C73}, /* 1C72 */ + {0x1C74,0x1C74},{0x1C75,0x1C75}, /* 1C74 */ + {0x1C76,0x1C76},{0x1C77,0x1C77}, /* 1C76 */ + {0x1C78,0x1C78},{0x1C79,0x1C79}, /* 1C78 */ + {0x1C7A,0x1C7A},{0x1C7B,0x1C7B}, /* 1C7A */ + {0x1C7C,0x1C7C},{0x1C7D,0x1C7D}, /* 1C7C */ + {0x1C7E,0x1C7E},{0x1C7F,0x1C7F}, /* 1C7E */ + {0x0412,0x1C80},{0x0414,0x1C81}, /* 1C80 */ + {0x041E,0x1C82},{0x0421,0x1C83}, /* 1C82 */ + {0x0422,0x1C84},{0x0422,0x1C85}, /* 1C84 */ + {0x042A,0x1C86},{0x0462,0x1C87}, /* 1C86 */ + {0xA64A,0x1C88},{0x1C89,0x1C89}, /* 1C88 */ + {0x1C8A,0x1C8A},{0x1C8B,0x1C8B}, /* 1C8A */ + {0x1C8C,0x1C8C},{0x1C8D,0x1C8D}, /* 1C8C */ + {0x1C8E,0x1C8E},{0x1C8F,0x1C8F}, /* 1C8E */ + {0x1C90,0x10D0},{0x1C91,0x10D1}, /* 1C90 */ + {0x1C92,0x10D2},{0x1C93,0x10D3}, /* 1C92 */ + {0x1C94,0x10D4},{0x1C95,0x10D5}, /* 1C94 */ + {0x1C96,0x10D6},{0x1C97,0x10D7}, /* 1C96 */ + {0x1C98,0x10D8},{0x1C99,0x10D9}, /* 1C98 */ + {0x1C9A,0x10DA},{0x1C9B,0x10DB}, /* 1C9A */ + {0x1C9C,0x10DC},{0x1C9D,0x10DD}, /* 1C9C */ + {0x1C9E,0x10DE},{0x1C9F,0x10DF}, /* 1C9E */ + {0x1CA0,0x10E0},{0x1CA1,0x10E1}, /* 1CA0 */ + {0x1CA2,0x10E2},{0x1CA3,0x10E3}, /* 1CA2 */ + {0x1CA4,0x10E4},{0x1CA5,0x10E5}, /* 1CA4 */ + {0x1CA6,0x10E6},{0x1CA7,0x10E7}, /* 1CA6 */ + {0x1CA8,0x10E8},{0x1CA9,0x10E9}, /* 1CA8 */ + {0x1CAA,0x10EA},{0x1CAB,0x10EB}, /* 1CAA */ + {0x1CAC,0x10EC},{0x1CAD,0x10ED}, /* 1CAC */ + {0x1CAE,0x10EE},{0x1CAF,0x10EF}, /* 1CAE */ + {0x1CB0,0x10F0},{0x1CB1,0x10F1}, /* 1CB0 */ + {0x1CB2,0x10F2},{0x1CB3,0x10F3}, /* 1CB2 */ + {0x1CB4,0x10F4},{0x1CB5,0x10F5}, /* 1CB4 */ + {0x1CB6,0x10F6},{0x1CB7,0x10F7}, /* 1CB6 */ + {0x1CB8,0x10F8},{0x1CB9,0x10F9}, /* 1CB8 */ + {0x1CBA,0x10FA},{0x1CBB,0x1CBB}, /* 1CBA */ + {0x1CBC,0x1CBC},{0x1CBD,0x10FD}, /* 1CBC */ + {0x1CBE,0x10FE},{0x1CBF,0x10FF}, /* 1CBE */ + {0x1CC0,0x1CC0},{0x1CC1,0x1CC1}, /* 1CC0 */ + {0x1CC2,0x1CC2},{0x1CC3,0x1CC3}, /* 1CC2 */ + {0x1CC4,0x1CC4},{0x1CC5,0x1CC5}, /* 1CC4 */ + {0x1CC6,0x1CC6},{0x1CC7,0x1CC7}, /* 1CC6 */ + {0x1CC8,0x1CC8},{0x1CC9,0x1CC9}, /* 1CC8 */ + {0x1CCA,0x1CCA},{0x1CCB,0x1CCB}, /* 1CCA */ + {0x1CCC,0x1CCC},{0x1CCD,0x1CCD}, /* 1CCC */ + {0x1CCE,0x1CCE},{0x1CCF,0x1CCF}, /* 1CCE */ + {0x1CD0,0x1CD0},{0x1CD1,0x1CD1}, /* 1CD0 */ + {0x1CD2,0x1CD2},{0x1CD3,0x1CD3}, /* 1CD2 */ + {0x1CD4,0x1CD4},{0x1CD5,0x1CD5}, /* 1CD4 */ + {0x1CD6,0x1CD6},{0x1CD7,0x1CD7}, /* 1CD6 */ + {0x1CD8,0x1CD8},{0x1CD9,0x1CD9}, /* 1CD8 */ + {0x1CDA,0x1CDA},{0x1CDB,0x1CDB}, /* 1CDA */ + {0x1CDC,0x1CDC},{0x1CDD,0x1CDD}, /* 1CDC */ + {0x1CDE,0x1CDE},{0x1CDF,0x1CDF}, /* 1CDE */ + {0x1CE0,0x1CE0},{0x1CE1,0x1CE1}, /* 1CE0 */ + {0x1CE2,0x1CE2},{0x1CE3,0x1CE3}, /* 1CE2 */ + {0x1CE4,0x1CE4},{0x1CE5,0x1CE5}, /* 1CE4 */ + {0x1CE6,0x1CE6},{0x1CE7,0x1CE7}, /* 1CE6 */ + {0x1CE8,0x1CE8},{0x1CE9,0x1CE9}, /* 1CE8 */ + {0x1CEA,0x1CEA},{0x1CEB,0x1CEB}, /* 1CEA */ + {0x1CEC,0x1CEC},{0x1CED,0x1CED}, /* 1CEC */ + {0x1CEE,0x1CEE},{0x1CEF,0x1CEF}, /* 1CEE */ + {0x1CF0,0x1CF0},{0x1CF1,0x1CF1}, /* 1CF0 */ + {0x1CF2,0x1CF2},{0x1CF3,0x1CF3}, /* 1CF2 */ + {0x1CF4,0x1CF4},{0x1CF5,0x1CF5}, /* 1CF4 */ + {0x1CF6,0x1CF6},{0x1CF7,0x1CF7}, /* 1CF6 */ + {0x1CF8,0x1CF8},{0x1CF9,0x1CF9}, /* 1CF8 */ + {0x1CFA,0x1CFA},{0x1CFB,0x1CFB}, /* 1CFA */ + {0x1CFC,0x1CFC},{0x1CFD,0x1CFD}, /* 1CFC */ + {0x1CFE,0x1CFE},{0x1CFF,0x1CFF} /* 1CFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page1D[256]={ + {0x1D00,0x1D00},{0x1D01,0x1D01}, /* 1D00 */ + {0x1D02,0x1D02},{0x1D03,0x1D03}, /* 1D02 */ + {0x1D04,0x1D04},{0x1D05,0x1D05}, /* 1D04 */ + {0x1D06,0x1D06},{0x1D07,0x1D07}, /* 1D06 */ + {0x1D08,0x1D08},{0x1D09,0x1D09}, /* 1D08 */ + {0x1D0A,0x1D0A},{0x1D0B,0x1D0B}, /* 1D0A */ + {0x1D0C,0x1D0C},{0x1D0D,0x1D0D}, /* 1D0C */ + {0x1D0E,0x1D0E},{0x1D0F,0x1D0F}, /* 1D0E */ + {0x1D10,0x1D10},{0x1D11,0x1D11}, /* 1D10 */ + {0x1D12,0x1D12},{0x1D13,0x1D13}, /* 1D12 */ + {0x1D14,0x1D14},{0x1D15,0x1D15}, /* 1D14 */ + {0x1D16,0x1D16},{0x1D17,0x1D17}, /* 1D16 */ + {0x1D18,0x1D18},{0x1D19,0x1D19}, /* 1D18 */ + {0x1D1A,0x1D1A},{0x1D1B,0x1D1B}, /* 1D1A */ + {0x1D1C,0x1D1C},{0x1D1D,0x1D1D}, /* 1D1C */ + {0x1D1E,0x1D1E},{0x1D1F,0x1D1F}, /* 1D1E */ + {0x1D20,0x1D20},{0x1D21,0x1D21}, /* 1D20 */ + {0x1D22,0x1D22},{0x1D23,0x1D23}, /* 1D22 */ + {0x1D24,0x1D24},{0x1D25,0x1D25}, /* 1D24 */ + {0x1D26,0x1D26},{0x1D27,0x1D27}, /* 1D26 */ + {0x1D28,0x1D28},{0x1D29,0x1D29}, /* 1D28 */ + {0x1D2A,0x1D2A},{0x1D2B,0x1D2B}, /* 1D2A */ + {0x1D2C,0x1D2C},{0x1D2D,0x1D2D}, /* 1D2C */ + {0x1D2E,0x1D2E},{0x1D2F,0x1D2F}, /* 1D2E */ + {0x1D30,0x1D30},{0x1D31,0x1D31}, /* 1D30 */ + {0x1D32,0x1D32},{0x1D33,0x1D33}, /* 1D32 */ + {0x1D34,0x1D34},{0x1D35,0x1D35}, /* 1D34 */ + {0x1D36,0x1D36},{0x1D37,0x1D37}, /* 1D36 */ + {0x1D38,0x1D38},{0x1D39,0x1D39}, /* 1D38 */ + {0x1D3A,0x1D3A},{0x1D3B,0x1D3B}, /* 1D3A */ + {0x1D3C,0x1D3C},{0x1D3D,0x1D3D}, /* 1D3C */ + {0x1D3E,0x1D3E},{0x1D3F,0x1D3F}, /* 1D3E */ + {0x1D40,0x1D40},{0x1D41,0x1D41}, /* 1D40 */ + {0x1D42,0x1D42},{0x1D43,0x1D43}, /* 1D42 */ + {0x1D44,0x1D44},{0x1D45,0x1D45}, /* 1D44 */ + {0x1D46,0x1D46},{0x1D47,0x1D47}, /* 1D46 */ + {0x1D48,0x1D48},{0x1D49,0x1D49}, /* 1D48 */ + {0x1D4A,0x1D4A},{0x1D4B,0x1D4B}, /* 1D4A */ + {0x1D4C,0x1D4C},{0x1D4D,0x1D4D}, /* 1D4C */ + {0x1D4E,0x1D4E},{0x1D4F,0x1D4F}, /* 1D4E */ + {0x1D50,0x1D50},{0x1D51,0x1D51}, /* 1D50 */ + {0x1D52,0x1D52},{0x1D53,0x1D53}, /* 1D52 */ + {0x1D54,0x1D54},{0x1D55,0x1D55}, /* 1D54 */ + {0x1D56,0x1D56},{0x1D57,0x1D57}, /* 1D56 */ + {0x1D58,0x1D58},{0x1D59,0x1D59}, /* 1D58 */ + {0x1D5A,0x1D5A},{0x1D5B,0x1D5B}, /* 1D5A */ + {0x1D5C,0x1D5C},{0x1D5D,0x1D5D}, /* 1D5C */ + {0x1D5E,0x1D5E},{0x1D5F,0x1D5F}, /* 1D5E */ + {0x1D60,0x1D60},{0x1D61,0x1D61}, /* 1D60 */ + {0x1D62,0x1D62},{0x1D63,0x1D63}, /* 1D62 */ + {0x1D64,0x1D64},{0x1D65,0x1D65}, /* 1D64 */ + {0x1D66,0x1D66},{0x1D67,0x1D67}, /* 1D66 */ + {0x1D68,0x1D68},{0x1D69,0x1D69}, /* 1D68 */ + {0x1D6A,0x1D6A},{0x1D6B,0x1D6B}, /* 1D6A */ + {0x1D6C,0x1D6C},{0x1D6D,0x1D6D}, /* 1D6C */ + {0x1D6E,0x1D6E},{0x1D6F,0x1D6F}, /* 1D6E */ + {0x1D70,0x1D70},{0x1D71,0x1D71}, /* 1D70 */ + {0x1D72,0x1D72},{0x1D73,0x1D73}, /* 1D72 */ + {0x1D74,0x1D74},{0x1D75,0x1D75}, /* 1D74 */ + {0x1D76,0x1D76},{0x1D77,0x1D77}, /* 1D76 */ + {0x1D78,0x1D78},{0xA77D,0x1D79}, /* 1D78 */ + {0x1D7A,0x1D7A},{0x1D7B,0x1D7B}, /* 1D7A */ + {0x1D7C,0x1D7C},{0x2C63,0x1D7D}, /* 1D7C */ + {0x1D7E,0x1D7E},{0x1D7F,0x1D7F}, /* 1D7E */ + {0x1D80,0x1D80},{0x1D81,0x1D81}, /* 1D80 */ + {0x1D82,0x1D82},{0x1D83,0x1D83}, /* 1D82 */ + {0x1D84,0x1D84},{0x1D85,0x1D85}, /* 1D84 */ + {0x1D86,0x1D86},{0x1D87,0x1D87}, /* 1D86 */ + {0x1D88,0x1D88},{0x1D89,0x1D89}, /* 1D88 */ + {0x1D8A,0x1D8A},{0x1D8B,0x1D8B}, /* 1D8A */ + {0x1D8C,0x1D8C},{0x1D8D,0x1D8D}, /* 1D8C */ + {0xA7C6,0x1D8E},{0x1D8F,0x1D8F}, /* 1D8E */ + {0x1D90,0x1D90},{0x1D91,0x1D91}, /* 1D90 */ + {0x1D92,0x1D92},{0x1D93,0x1D93}, /* 1D92 */ + {0x1D94,0x1D94},{0x1D95,0x1D95}, /* 1D94 */ + {0x1D96,0x1D96},{0x1D97,0x1D97}, /* 1D96 */ + {0x1D98,0x1D98},{0x1D99,0x1D99}, /* 1D98 */ + {0x1D9A,0x1D9A},{0x1D9B,0x1D9B}, /* 1D9A */ + {0x1D9C,0x1D9C},{0x1D9D,0x1D9D}, /* 1D9C */ + {0x1D9E,0x1D9E},{0x1D9F,0x1D9F}, /* 1D9E */ + {0x1DA0,0x1DA0},{0x1DA1,0x1DA1}, /* 1DA0 */ + {0x1DA2,0x1DA2},{0x1DA3,0x1DA3}, /* 1DA2 */ + {0x1DA4,0x1DA4},{0x1DA5,0x1DA5}, /* 1DA4 */ + {0x1DA6,0x1DA6},{0x1DA7,0x1DA7}, /* 1DA6 */ + {0x1DA8,0x1DA8},{0x1DA9,0x1DA9}, /* 1DA8 */ + {0x1DAA,0x1DAA},{0x1DAB,0x1DAB}, /* 1DAA */ + {0x1DAC,0x1DAC},{0x1DAD,0x1DAD}, /* 1DAC */ + {0x1DAE,0x1DAE},{0x1DAF,0x1DAF}, /* 1DAE */ + {0x1DB0,0x1DB0},{0x1DB1,0x1DB1}, /* 1DB0 */ + {0x1DB2,0x1DB2},{0x1DB3,0x1DB3}, /* 1DB2 */ + {0x1DB4,0x1DB4},{0x1DB5,0x1DB5}, /* 1DB4 */ + {0x1DB6,0x1DB6},{0x1DB7,0x1DB7}, /* 1DB6 */ + {0x1DB8,0x1DB8},{0x1DB9,0x1DB9}, /* 1DB8 */ + {0x1DBA,0x1DBA},{0x1DBB,0x1DBB}, /* 1DBA */ + {0x1DBC,0x1DBC},{0x1DBD,0x1DBD}, /* 1DBC */ + {0x1DBE,0x1DBE},{0x1DBF,0x1DBF}, /* 1DBE */ + {0x1DC0,0x1DC0},{0x1DC1,0x1DC1}, /* 1DC0 */ + {0x1DC2,0x1DC2},{0x1DC3,0x1DC3}, /* 1DC2 */ + {0x1DC4,0x1DC4},{0x1DC5,0x1DC5}, /* 1DC4 */ + {0x1DC6,0x1DC6},{0x1DC7,0x1DC7}, /* 1DC6 */ + {0x1DC8,0x1DC8},{0x1DC9,0x1DC9}, /* 1DC8 */ + {0x1DCA,0x1DCA},{0x1DCB,0x1DCB}, /* 1DCA */ + {0x1DCC,0x1DCC},{0x1DCD,0x1DCD}, /* 1DCC */ + {0x1DCE,0x1DCE},{0x1DCF,0x1DCF}, /* 1DCE */ + {0x1DD0,0x1DD0},{0x1DD1,0x1DD1}, /* 1DD0 */ + {0x1DD2,0x1DD2},{0x1DD3,0x1DD3}, /* 1DD2 */ + {0x1DD4,0x1DD4},{0x1DD5,0x1DD5}, /* 1DD4 */ + {0x1DD6,0x1DD6},{0x1DD7,0x1DD7}, /* 1DD6 */ + {0x1DD8,0x1DD8},{0x1DD9,0x1DD9}, /* 1DD8 */ + {0x1DDA,0x1DDA},{0x1DDB,0x1DDB}, /* 1DDA */ + {0x1DDC,0x1DDC},{0x1DDD,0x1DDD}, /* 1DDC */ + {0x1DDE,0x1DDE},{0x1DDF,0x1DDF}, /* 1DDE */ + {0x1DE0,0x1DE0},{0x1DE1,0x1DE1}, /* 1DE0 */ + {0x1DE2,0x1DE2},{0x1DE3,0x1DE3}, /* 1DE2 */ + {0x1DE4,0x1DE4},{0x1DE5,0x1DE5}, /* 1DE4 */ + {0x1DE6,0x1DE6},{0x1DE7,0x1DE7}, /* 1DE6 */ + {0x1DE8,0x1DE8},{0x1DE9,0x1DE9}, /* 1DE8 */ + {0x1DEA,0x1DEA},{0x1DEB,0x1DEB}, /* 1DEA */ + {0x1DEC,0x1DEC},{0x1DED,0x1DED}, /* 1DEC */ + {0x1DEE,0x1DEE},{0x1DEF,0x1DEF}, /* 1DEE */ + {0x1DF0,0x1DF0},{0x1DF1,0x1DF1}, /* 1DF0 */ + {0x1DF2,0x1DF2},{0x1DF3,0x1DF3}, /* 1DF2 */ + {0x1DF4,0x1DF4},{0x1DF5,0x1DF5}, /* 1DF4 */ + {0x1DF6,0x1DF6},{0x1DF7,0x1DF7}, /* 1DF6 */ + {0x1DF8,0x1DF8},{0x1DF9,0x1DF9}, /* 1DF8 */ + {0x1DFA,0x1DFA},{0x1DFB,0x1DFB}, /* 1DFA */ + {0x1DFC,0x1DFC},{0x1DFD,0x1DFD}, /* 1DFC */ + {0x1DFE,0x1DFE},{0x1DFF,0x1DFF} /* 1DFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page1E[256]={ + {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */ + {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */ + {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */ + {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */ + {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */ + {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */ + {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */ + {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */ + {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */ + {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */ + {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */ + {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */ + {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */ + {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */ + {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */ + {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */ + {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */ + {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */ + {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */ + {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */ + {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */ + {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */ + {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */ + {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */ + {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */ + {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */ + {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */ + {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */ + {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */ + {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */ + {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */ + {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */ + {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */ + {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */ + {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */ + {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */ + {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */ + {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */ + {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */ + {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */ + {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */ + {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */ + {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */ + {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */ + {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */ + {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */ + {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */ + {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */ + {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */ + {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */ + {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */ + {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */ + {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */ + {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */ + {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */ + {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */ + {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */ + {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */ + {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */ + {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */ + {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */ + {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */ + {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */ + {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */ + {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */ + {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */ + {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */ + {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */ + {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */ + {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */ + {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */ + {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */ + {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */ + {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */ + {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */ + {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */ + {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */ + {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */ + {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */ + {0x1E9E,0x00DF},{0x1E9F,0x1E9F}, /* 1E9E */ + {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */ + {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */ + {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */ + {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */ + {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */ + {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */ + {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */ + {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */ + {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */ + {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */ + {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */ + {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */ + {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */ + {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */ + {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */ + {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */ + {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */ + {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */ + {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */ + {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */ + {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */ + {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */ + {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */ + {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */ + {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */ + {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */ + {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */ + {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */ + {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */ + {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */ + {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */ + {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */ + {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */ + {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */ + {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */ + {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */ + {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */ + {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */ + {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */ + {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */ + {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */ + {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */ + {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */ + {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */ + {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */ + {0x1EFA,0x1EFB},{0x1EFA,0x1EFB}, /* 1EFA */ + {0x1EFC,0x1EFD},{0x1EFC,0x1EFD}, /* 1EFC */ + {0x1EFE,0x1EFF},{0x1EFE,0x1EFF} /* 1EFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page1F[256]={ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */ + {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */ + {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */ + {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */ + {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */ + {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */ + {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */ + {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */ + {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */ + {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */ + {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */ + {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */ + {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */ + {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */ + {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */ + {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */ + {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */ + {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */ + {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */ + {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */ + {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */ + {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */ + {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */ + {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */ + {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */ + {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */ + {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */ + {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */ + {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */ + {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */ + {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */ + {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */ + {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */ + {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */ + {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */ + {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */ + {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */ + {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */ + {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */ + {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */ + {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page21[256]={ + {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */ + {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */ + {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */ + {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */ + {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */ + {0x210A,0x210A},{0x210B,0x210B}, /* 210A */ + {0x210C,0x210C},{0x210D,0x210D}, /* 210C */ + {0x210E,0x210E},{0x210F,0x210F}, /* 210E */ + {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */ + {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */ + {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */ + {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */ + {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */ + {0x211A,0x211A},{0x211B,0x211B}, /* 211A */ + {0x211C,0x211C},{0x211D,0x211D}, /* 211C */ + {0x211E,0x211E},{0x211F,0x211F}, /* 211E */ + {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */ + {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */ + {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */ + {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */ + {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */ + {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */ + {0x212C,0x212C},{0x212D,0x212D}, /* 212C */ + {0x212E,0x212E},{0x212F,0x212F}, /* 212E */ + {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */ + {0x2132,0x214E},{0x2133,0x2133}, /* 2132 */ + {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */ + {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */ + {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */ + {0x213A,0x213A},{0x213B,0x213B}, /* 213A */ + {0x213C,0x213C},{0x213D,0x213D}, /* 213C */ + {0x213E,0x213E},{0x213F,0x213F}, /* 213E */ + {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */ + {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */ + {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */ + {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */ + {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */ + {0x214A,0x214A},{0x214B,0x214B}, /* 214A */ + {0x214C,0x214C},{0x214D,0x214D}, /* 214C */ + {0x2132,0x214E},{0x214F,0x214F}, /* 214E */ + {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */ + {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */ + {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */ + {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */ + {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */ + {0x215A,0x215A},{0x215B,0x215B}, /* 215A */ + {0x215C,0x215C},{0x215D,0x215D}, /* 215C */ + {0x215E,0x215E},{0x215F,0x215F}, /* 215E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 216A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 216C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 216E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 217A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 217C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 217E */ + {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */ + {0x2182,0x2182},{0x2183,0x2184}, /* 2182 */ + {0x2183,0x2184},{0x2185,0x2185}, /* 2184 */ + {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */ + {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */ + {0x218A,0x218A},{0x218B,0x218B}, /* 218A */ + {0x218C,0x218C},{0x218D,0x218D}, /* 218C */ + {0x218E,0x218E},{0x218F,0x218F}, /* 218E */ + {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */ + {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */ + {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */ + {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */ + {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */ + {0x219A,0x219A},{0x219B,0x219B}, /* 219A */ + {0x219C,0x219C},{0x219D,0x219D}, /* 219C */ + {0x219E,0x219E},{0x219F,0x219F}, /* 219E */ + {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */ + {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */ + {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */ + {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */ + {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */ + {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */ + {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */ + {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */ + {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */ + {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */ + {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */ + {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */ + {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */ + {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */ + {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */ + {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */ + {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */ + {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */ + {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */ + {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */ + {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */ + {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */ + {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */ + {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */ + {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */ + {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */ + {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */ + {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */ + {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */ + {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */ + {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */ + {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */ + {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */ + {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */ + {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */ + {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */ + {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */ + {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */ + {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */ + {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */ + {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */ + {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */ + {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */ + {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */ + {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */ + {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */ + {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */ + {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page24[256]={ + {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */ + {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */ + {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */ + {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */ + {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */ + {0x240A,0x240A},{0x240B,0x240B}, /* 240A */ + {0x240C,0x240C},{0x240D,0x240D}, /* 240C */ + {0x240E,0x240E},{0x240F,0x240F}, /* 240E */ + {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */ + {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */ + {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */ + {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */ + {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */ + {0x241A,0x241A},{0x241B,0x241B}, /* 241A */ + {0x241C,0x241C},{0x241D,0x241D}, /* 241C */ + {0x241E,0x241E},{0x241F,0x241F}, /* 241E */ + {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */ + {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */ + {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */ + {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */ + {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */ + {0x242A,0x242A},{0x242B,0x242B}, /* 242A */ + {0x242C,0x242C},{0x242D,0x242D}, /* 242C */ + {0x242E,0x242E},{0x242F,0x242F}, /* 242E */ + {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */ + {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */ + {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */ + {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */ + {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */ + {0x243A,0x243A},{0x243B,0x243B}, /* 243A */ + {0x243C,0x243C},{0x243D,0x243D}, /* 243C */ + {0x243E,0x243E},{0x243F,0x243F}, /* 243E */ + {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */ + {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */ + {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */ + {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */ + {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */ + {0x244A,0x244A},{0x244B,0x244B}, /* 244A */ + {0x244C,0x244C},{0x244D,0x244D}, /* 244C */ + {0x244E,0x244E},{0x244F,0x244F}, /* 244E */ + {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */ + {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */ + {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */ + {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */ + {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */ + {0x245A,0x245A},{0x245B,0x245B}, /* 245A */ + {0x245C,0x245C},{0x245D,0x245D}, /* 245C */ + {0x245E,0x245E},{0x245F,0x245F}, /* 245E */ + {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */ + {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */ + {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */ + {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */ + {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */ + {0x246A,0x246A},{0x246B,0x246B}, /* 246A */ + {0x246C,0x246C},{0x246D,0x246D}, /* 246C */ + {0x246E,0x246E},{0x246F,0x246F}, /* 246E */ + {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */ + {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */ + {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */ + {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */ + {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */ + {0x247A,0x247A},{0x247B,0x247B}, /* 247A */ + {0x247C,0x247C},{0x247D,0x247D}, /* 247C */ + {0x247E,0x247E},{0x247F,0x247F}, /* 247E */ + {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */ + {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */ + {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */ + {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */ + {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */ + {0x248A,0x248A},{0x248B,0x248B}, /* 248A */ + {0x248C,0x248C},{0x248D,0x248D}, /* 248C */ + {0x248E,0x248E},{0x248F,0x248F}, /* 248E */ + {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */ + {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */ + {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */ + {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */ + {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */ + {0x249A,0x249A},{0x249B,0x249B}, /* 249A */ + {0x249C,0x249C},{0x249D,0x249D}, /* 249C */ + {0x249E,0x249E},{0x249F,0x249F}, /* 249E */ + {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */ + {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */ + {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */ + {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */ + {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */ + {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */ + {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */ + {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */ + {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */ + {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */ + {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */ + {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */ + {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */ + {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */ + {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */ + {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */ + {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */ + {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */ + {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */ + {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */ + {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */ + {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page2C[256]={ + {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C00 */ + {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C02 */ + {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C04 */ + {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C06 */ + {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C08 */ + {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C0A */ + {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C0C */ + {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C0E */ + {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C10 */ + {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C12 */ + {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C14 */ + {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C16 */ + {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C18 */ + {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C1A */ + {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C1C */ + {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C1E */ + {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C20 */ + {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C22 */ + {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C24 */ + {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C26 */ + {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C28 */ + {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C2A */ + {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C2C */ + {0x2C2E,0x2C5E},{0x2C2F,0x2C5F}, /* 2C2E */ + {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C30 */ + {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C32 */ + {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C34 */ + {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C36 */ + {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C38 */ + {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C3A */ + {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C3C */ + {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C3E */ + {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C40 */ + {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C42 */ + {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C44 */ + {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C46 */ + {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C48 */ + {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C4A */ + {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C4C */ + {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C4E */ + {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C50 */ + {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C52 */ + {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C54 */ + {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C56 */ + {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C58 */ + {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C5A */ + {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C5C */ + {0x2C2E,0x2C5E},{0x2C2F,0x2C5F}, /* 2C5E */ + {0x2C60,0x2C61},{0x2C60,0x2C61}, /* 2C60 */ + {0x2C62,0x026B},{0x2C63,0x1D7D}, /* 2C62 */ + {0x2C64,0x027D},{0x023A,0x2C65}, /* 2C64 */ + {0x023E,0x2C66},{0x2C67,0x2C68}, /* 2C66 */ + {0x2C67,0x2C68},{0x2C69,0x2C6A}, /* 2C68 */ + {0x2C69,0x2C6A},{0x2C6B,0x2C6C}, /* 2C6A */ + {0x2C6B,0x2C6C},{0x2C6D,0x0251}, /* 2C6C */ + {0x2C6E,0x0271},{0x2C6F,0x0250}, /* 2C6E */ + {0x2C70,0x0252},{0x2C71,0x2C71}, /* 2C70 */ + {0x2C72,0x2C73},{0x2C72,0x2C73}, /* 2C72 */ + {0x2C74,0x2C74},{0x2C75,0x2C76}, /* 2C74 */ + {0x2C75,0x2C76},{0x2C77,0x2C77}, /* 2C76 */ + {0x2C78,0x2C78},{0x2C79,0x2C79}, /* 2C78 */ + {0x2C7A,0x2C7A},{0x2C7B,0x2C7B}, /* 2C7A */ + {0x2C7C,0x2C7C},{0x2C7D,0x2C7D}, /* 2C7C */ + {0x2C7E,0x023F},{0x2C7F,0x0240}, /* 2C7E */ + {0x2C80,0x2C81},{0x2C80,0x2C81}, /* 2C80 */ + {0x2C82,0x2C83},{0x2C82,0x2C83}, /* 2C82 */ + {0x2C84,0x2C85},{0x2C84,0x2C85}, /* 2C84 */ + {0x2C86,0x2C87},{0x2C86,0x2C87}, /* 2C86 */ + {0x2C88,0x2C89},{0x2C88,0x2C89}, /* 2C88 */ + {0x2C8A,0x2C8B},{0x2C8A,0x2C8B}, /* 2C8A */ + {0x2C8C,0x2C8D},{0x2C8C,0x2C8D}, /* 2C8C */ + {0x2C8E,0x2C8F},{0x2C8E,0x2C8F}, /* 2C8E */ + {0x2C90,0x2C91},{0x2C90,0x2C91}, /* 2C90 */ + {0x2C92,0x2C93},{0x2C92,0x2C93}, /* 2C92 */ + {0x2C94,0x2C95},{0x2C94,0x2C95}, /* 2C94 */ + {0x2C96,0x2C97},{0x2C96,0x2C97}, /* 2C96 */ + {0x2C98,0x2C99},{0x2C98,0x2C99}, /* 2C98 */ + {0x2C9A,0x2C9B},{0x2C9A,0x2C9B}, /* 2C9A */ + {0x2C9C,0x2C9D},{0x2C9C,0x2C9D}, /* 2C9C */ + {0x2C9E,0x2C9F},{0x2C9E,0x2C9F}, /* 2C9E */ + {0x2CA0,0x2CA1},{0x2CA0,0x2CA1}, /* 2CA0 */ + {0x2CA2,0x2CA3},{0x2CA2,0x2CA3}, /* 2CA2 */ + {0x2CA4,0x2CA5},{0x2CA4,0x2CA5}, /* 2CA4 */ + {0x2CA6,0x2CA7},{0x2CA6,0x2CA7}, /* 2CA6 */ + {0x2CA8,0x2CA9},{0x2CA8,0x2CA9}, /* 2CA8 */ + {0x2CAA,0x2CAB},{0x2CAA,0x2CAB}, /* 2CAA */ + {0x2CAC,0x2CAD},{0x2CAC,0x2CAD}, /* 2CAC */ + {0x2CAE,0x2CAF},{0x2CAE,0x2CAF}, /* 2CAE */ + {0x2CB0,0x2CB1},{0x2CB0,0x2CB1}, /* 2CB0 */ + {0x2CB2,0x2CB3},{0x2CB2,0x2CB3}, /* 2CB2 */ + {0x2CB4,0x2CB5},{0x2CB4,0x2CB5}, /* 2CB4 */ + {0x2CB6,0x2CB7},{0x2CB6,0x2CB7}, /* 2CB6 */ + {0x2CB8,0x2CB9},{0x2CB8,0x2CB9}, /* 2CB8 */ + {0x2CBA,0x2CBB},{0x2CBA,0x2CBB}, /* 2CBA */ + {0x2CBC,0x2CBD},{0x2CBC,0x2CBD}, /* 2CBC */ + {0x2CBE,0x2CBF},{0x2CBE,0x2CBF}, /* 2CBE */ + {0x2CC0,0x2CC1},{0x2CC0,0x2CC1}, /* 2CC0 */ + {0x2CC2,0x2CC3},{0x2CC2,0x2CC3}, /* 2CC2 */ + {0x2CC4,0x2CC5},{0x2CC4,0x2CC5}, /* 2CC4 */ + {0x2CC6,0x2CC7},{0x2CC6,0x2CC7}, /* 2CC6 */ + {0x2CC8,0x2CC9},{0x2CC8,0x2CC9}, /* 2CC8 */ + {0x2CCA,0x2CCB},{0x2CCA,0x2CCB}, /* 2CCA */ + {0x2CCC,0x2CCD},{0x2CCC,0x2CCD}, /* 2CCC */ + {0x2CCE,0x2CCF},{0x2CCE,0x2CCF}, /* 2CCE */ + {0x2CD0,0x2CD1},{0x2CD0,0x2CD1}, /* 2CD0 */ + {0x2CD2,0x2CD3},{0x2CD2,0x2CD3}, /* 2CD2 */ + {0x2CD4,0x2CD5},{0x2CD4,0x2CD5}, /* 2CD4 */ + {0x2CD6,0x2CD7},{0x2CD6,0x2CD7}, /* 2CD6 */ + {0x2CD8,0x2CD9},{0x2CD8,0x2CD9}, /* 2CD8 */ + {0x2CDA,0x2CDB},{0x2CDA,0x2CDB}, /* 2CDA */ + {0x2CDC,0x2CDD},{0x2CDC,0x2CDD}, /* 2CDC */ + {0x2CDE,0x2CDF},{0x2CDE,0x2CDF}, /* 2CDE */ + {0x2CE0,0x2CE1},{0x2CE0,0x2CE1}, /* 2CE0 */ + {0x2CE2,0x2CE3},{0x2CE2,0x2CE3}, /* 2CE2 */ + {0x2CE4,0x2CE4},{0x2CE5,0x2CE5}, /* 2CE4 */ + {0x2CE6,0x2CE6},{0x2CE7,0x2CE7}, /* 2CE6 */ + {0x2CE8,0x2CE8},{0x2CE9,0x2CE9}, /* 2CE8 */ + {0x2CEA,0x2CEA},{0x2CEB,0x2CEC}, /* 2CEA */ + {0x2CEB,0x2CEC},{0x2CED,0x2CEE}, /* 2CEC */ + {0x2CED,0x2CEE},{0x2CEF,0x2CEF}, /* 2CEE */ + {0x2CF0,0x2CF0},{0x2CF1,0x2CF1}, /* 2CF0 */ + {0x2CF2,0x2CF3},{0x2CF2,0x2CF3}, /* 2CF2 */ + {0x2CF4,0x2CF4},{0x2CF5,0x2CF5}, /* 2CF4 */ + {0x2CF6,0x2CF6},{0x2CF7,0x2CF7}, /* 2CF6 */ + {0x2CF8,0x2CF8},{0x2CF9,0x2CF9}, /* 2CF8 */ + {0x2CFA,0x2CFA},{0x2CFB,0x2CFB}, /* 2CFA */ + {0x2CFC,0x2CFC},{0x2CFD,0x2CFD}, /* 2CFC */ + {0x2CFE,0x2CFE},{0x2CFF,0x2CFF} /* 2CFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page2D[256]={ + {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 2D00 */ + {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 2D02 */ + {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 2D04 */ + {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 2D06 */ + {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 2D08 */ + {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 2D0A */ + {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 2D0C */ + {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 2D0E */ + {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 2D10 */ + {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 2D12 */ + {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 2D14 */ + {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 2D16 */ + {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 2D18 */ + {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 2D1A */ + {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 2D1C */ + {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 2D1E */ + {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 2D20 */ + {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 2D22 */ + {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 2D24 */ + {0x2D26,0x2D26},{0x10C7,0x2D27}, /* 2D26 */ + {0x2D28,0x2D28},{0x2D29,0x2D29}, /* 2D28 */ + {0x2D2A,0x2D2A},{0x2D2B,0x2D2B}, /* 2D2A */ + {0x2D2C,0x2D2C},{0x10CD,0x2D2D}, /* 2D2C */ + {0x2D2E,0x2D2E},{0x2D2F,0x2D2F}, /* 2D2E */ + {0x2D30,0x2D30},{0x2D31,0x2D31}, /* 2D30 */ + {0x2D32,0x2D32},{0x2D33,0x2D33}, /* 2D32 */ + {0x2D34,0x2D34},{0x2D35,0x2D35}, /* 2D34 */ + {0x2D36,0x2D36},{0x2D37,0x2D37}, /* 2D36 */ + {0x2D38,0x2D38},{0x2D39,0x2D39}, /* 2D38 */ + {0x2D3A,0x2D3A},{0x2D3B,0x2D3B}, /* 2D3A */ + {0x2D3C,0x2D3C},{0x2D3D,0x2D3D}, /* 2D3C */ + {0x2D3E,0x2D3E},{0x2D3F,0x2D3F}, /* 2D3E */ + {0x2D40,0x2D40},{0x2D41,0x2D41}, /* 2D40 */ + {0x2D42,0x2D42},{0x2D43,0x2D43}, /* 2D42 */ + {0x2D44,0x2D44},{0x2D45,0x2D45}, /* 2D44 */ + {0x2D46,0x2D46},{0x2D47,0x2D47}, /* 2D46 */ + {0x2D48,0x2D48},{0x2D49,0x2D49}, /* 2D48 */ + {0x2D4A,0x2D4A},{0x2D4B,0x2D4B}, /* 2D4A */ + {0x2D4C,0x2D4C},{0x2D4D,0x2D4D}, /* 2D4C */ + {0x2D4E,0x2D4E},{0x2D4F,0x2D4F}, /* 2D4E */ + {0x2D50,0x2D50},{0x2D51,0x2D51}, /* 2D50 */ + {0x2D52,0x2D52},{0x2D53,0x2D53}, /* 2D52 */ + {0x2D54,0x2D54},{0x2D55,0x2D55}, /* 2D54 */ + {0x2D56,0x2D56},{0x2D57,0x2D57}, /* 2D56 */ + {0x2D58,0x2D58},{0x2D59,0x2D59}, /* 2D58 */ + {0x2D5A,0x2D5A},{0x2D5B,0x2D5B}, /* 2D5A */ + {0x2D5C,0x2D5C},{0x2D5D,0x2D5D}, /* 2D5C */ + {0x2D5E,0x2D5E},{0x2D5F,0x2D5F}, /* 2D5E */ + {0x2D60,0x2D60},{0x2D61,0x2D61}, /* 2D60 */ + {0x2D62,0x2D62},{0x2D63,0x2D63}, /* 2D62 */ + {0x2D64,0x2D64},{0x2D65,0x2D65}, /* 2D64 */ + {0x2D66,0x2D66},{0x2D67,0x2D67}, /* 2D66 */ + {0x2D68,0x2D68},{0x2D69,0x2D69}, /* 2D68 */ + {0x2D6A,0x2D6A},{0x2D6B,0x2D6B}, /* 2D6A */ + {0x2D6C,0x2D6C},{0x2D6D,0x2D6D}, /* 2D6C */ + {0x2D6E,0x2D6E},{0x2D6F,0x2D6F}, /* 2D6E */ + {0x2D70,0x2D70},{0x2D71,0x2D71}, /* 2D70 */ + {0x2D72,0x2D72},{0x2D73,0x2D73}, /* 2D72 */ + {0x2D74,0x2D74},{0x2D75,0x2D75}, /* 2D74 */ + {0x2D76,0x2D76},{0x2D77,0x2D77}, /* 2D76 */ + {0x2D78,0x2D78},{0x2D79,0x2D79}, /* 2D78 */ + {0x2D7A,0x2D7A},{0x2D7B,0x2D7B}, /* 2D7A */ + {0x2D7C,0x2D7C},{0x2D7D,0x2D7D}, /* 2D7C */ + {0x2D7E,0x2D7E},{0x2D7F,0x2D7F}, /* 2D7E */ + {0x2D80,0x2D80},{0x2D81,0x2D81}, /* 2D80 */ + {0x2D82,0x2D82},{0x2D83,0x2D83}, /* 2D82 */ + {0x2D84,0x2D84},{0x2D85,0x2D85}, /* 2D84 */ + {0x2D86,0x2D86},{0x2D87,0x2D87}, /* 2D86 */ + {0x2D88,0x2D88},{0x2D89,0x2D89}, /* 2D88 */ + {0x2D8A,0x2D8A},{0x2D8B,0x2D8B}, /* 2D8A */ + {0x2D8C,0x2D8C},{0x2D8D,0x2D8D}, /* 2D8C */ + {0x2D8E,0x2D8E},{0x2D8F,0x2D8F}, /* 2D8E */ + {0x2D90,0x2D90},{0x2D91,0x2D91}, /* 2D90 */ + {0x2D92,0x2D92},{0x2D93,0x2D93}, /* 2D92 */ + {0x2D94,0x2D94},{0x2D95,0x2D95}, /* 2D94 */ + {0x2D96,0x2D96},{0x2D97,0x2D97}, /* 2D96 */ + {0x2D98,0x2D98},{0x2D99,0x2D99}, /* 2D98 */ + {0x2D9A,0x2D9A},{0x2D9B,0x2D9B}, /* 2D9A */ + {0x2D9C,0x2D9C},{0x2D9D,0x2D9D}, /* 2D9C */ + {0x2D9E,0x2D9E},{0x2D9F,0x2D9F}, /* 2D9E */ + {0x2DA0,0x2DA0},{0x2DA1,0x2DA1}, /* 2DA0 */ + {0x2DA2,0x2DA2},{0x2DA3,0x2DA3}, /* 2DA2 */ + {0x2DA4,0x2DA4},{0x2DA5,0x2DA5}, /* 2DA4 */ + {0x2DA6,0x2DA6},{0x2DA7,0x2DA7}, /* 2DA6 */ + {0x2DA8,0x2DA8},{0x2DA9,0x2DA9}, /* 2DA8 */ + {0x2DAA,0x2DAA},{0x2DAB,0x2DAB}, /* 2DAA */ + {0x2DAC,0x2DAC},{0x2DAD,0x2DAD}, /* 2DAC */ + {0x2DAE,0x2DAE},{0x2DAF,0x2DAF}, /* 2DAE */ + {0x2DB0,0x2DB0},{0x2DB1,0x2DB1}, /* 2DB0 */ + {0x2DB2,0x2DB2},{0x2DB3,0x2DB3}, /* 2DB2 */ + {0x2DB4,0x2DB4},{0x2DB5,0x2DB5}, /* 2DB4 */ + {0x2DB6,0x2DB6},{0x2DB7,0x2DB7}, /* 2DB6 */ + {0x2DB8,0x2DB8},{0x2DB9,0x2DB9}, /* 2DB8 */ + {0x2DBA,0x2DBA},{0x2DBB,0x2DBB}, /* 2DBA */ + {0x2DBC,0x2DBC},{0x2DBD,0x2DBD}, /* 2DBC */ + {0x2DBE,0x2DBE},{0x2DBF,0x2DBF}, /* 2DBE */ + {0x2DC0,0x2DC0},{0x2DC1,0x2DC1}, /* 2DC0 */ + {0x2DC2,0x2DC2},{0x2DC3,0x2DC3}, /* 2DC2 */ + {0x2DC4,0x2DC4},{0x2DC5,0x2DC5}, /* 2DC4 */ + {0x2DC6,0x2DC6},{0x2DC7,0x2DC7}, /* 2DC6 */ + {0x2DC8,0x2DC8},{0x2DC9,0x2DC9}, /* 2DC8 */ + {0x2DCA,0x2DCA},{0x2DCB,0x2DCB}, /* 2DCA */ + {0x2DCC,0x2DCC},{0x2DCD,0x2DCD}, /* 2DCC */ + {0x2DCE,0x2DCE},{0x2DCF,0x2DCF}, /* 2DCE */ + {0x2DD0,0x2DD0},{0x2DD1,0x2DD1}, /* 2DD0 */ + {0x2DD2,0x2DD2},{0x2DD3,0x2DD3}, /* 2DD2 */ + {0x2DD4,0x2DD4},{0x2DD5,0x2DD5}, /* 2DD4 */ + {0x2DD6,0x2DD6},{0x2DD7,0x2DD7}, /* 2DD6 */ + {0x2DD8,0x2DD8},{0x2DD9,0x2DD9}, /* 2DD8 */ + {0x2DDA,0x2DDA},{0x2DDB,0x2DDB}, /* 2DDA */ + {0x2DDC,0x2DDC},{0x2DDD,0x2DDD}, /* 2DDC */ + {0x2DDE,0x2DDE},{0x2DDF,0x2DDF}, /* 2DDE */ + {0x2DE0,0x2DE0},{0x2DE1,0x2DE1}, /* 2DE0 */ + {0x2DE2,0x2DE2},{0x2DE3,0x2DE3}, /* 2DE2 */ + {0x2DE4,0x2DE4},{0x2DE5,0x2DE5}, /* 2DE4 */ + {0x2DE6,0x2DE6},{0x2DE7,0x2DE7}, /* 2DE6 */ + {0x2DE8,0x2DE8},{0x2DE9,0x2DE9}, /* 2DE8 */ + {0x2DEA,0x2DEA},{0x2DEB,0x2DEB}, /* 2DEA */ + {0x2DEC,0x2DEC},{0x2DED,0x2DED}, /* 2DEC */ + {0x2DEE,0x2DEE},{0x2DEF,0x2DEF}, /* 2DEE */ + {0x2DF0,0x2DF0},{0x2DF1,0x2DF1}, /* 2DF0 */ + {0x2DF2,0x2DF2},{0x2DF3,0x2DF3}, /* 2DF2 */ + {0x2DF4,0x2DF4},{0x2DF5,0x2DF5}, /* 2DF4 */ + {0x2DF6,0x2DF6},{0x2DF7,0x2DF7}, /* 2DF6 */ + {0x2DF8,0x2DF8},{0x2DF9,0x2DF9}, /* 2DF8 */ + {0x2DFA,0x2DFA},{0x2DFB,0x2DFB}, /* 2DFA */ + {0x2DFC,0x2DFC},{0x2DFD,0x2DFD}, /* 2DFC */ + {0x2DFE,0x2DFE},{0x2DFF,0x2DFF} /* 2DFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_pageA6[256]={ + {0xA600,0xA600},{0xA601,0xA601}, /* A600 */ + {0xA602,0xA602},{0xA603,0xA603}, /* A602 */ + {0xA604,0xA604},{0xA605,0xA605}, /* A604 */ + {0xA606,0xA606},{0xA607,0xA607}, /* A606 */ + {0xA608,0xA608},{0xA609,0xA609}, /* A608 */ + {0xA60A,0xA60A},{0xA60B,0xA60B}, /* A60A */ + {0xA60C,0xA60C},{0xA60D,0xA60D}, /* A60C */ + {0xA60E,0xA60E},{0xA60F,0xA60F}, /* A60E */ + {0xA610,0xA610},{0xA611,0xA611}, /* A610 */ + {0xA612,0xA612},{0xA613,0xA613}, /* A612 */ + {0xA614,0xA614},{0xA615,0xA615}, /* A614 */ + {0xA616,0xA616},{0xA617,0xA617}, /* A616 */ + {0xA618,0xA618},{0xA619,0xA619}, /* A618 */ + {0xA61A,0xA61A},{0xA61B,0xA61B}, /* A61A */ + {0xA61C,0xA61C},{0xA61D,0xA61D}, /* A61C */ + {0xA61E,0xA61E},{0xA61F,0xA61F}, /* A61E */ + {0xA620,0xA620},{0xA621,0xA621}, /* A620 */ + {0xA622,0xA622},{0xA623,0xA623}, /* A622 */ + {0xA624,0xA624},{0xA625,0xA625}, /* A624 */ + {0xA626,0xA626},{0xA627,0xA627}, /* A626 */ + {0xA628,0xA628},{0xA629,0xA629}, /* A628 */ + {0xA62A,0xA62A},{0xA62B,0xA62B}, /* A62A */ + {0xA62C,0xA62C},{0xA62D,0xA62D}, /* A62C */ + {0xA62E,0xA62E},{0xA62F,0xA62F}, /* A62E */ + {0xA630,0xA630},{0xA631,0xA631}, /* A630 */ + {0xA632,0xA632},{0xA633,0xA633}, /* A632 */ + {0xA634,0xA634},{0xA635,0xA635}, /* A634 */ + {0xA636,0xA636},{0xA637,0xA637}, /* A636 */ + {0xA638,0xA638},{0xA639,0xA639}, /* A638 */ + {0xA63A,0xA63A},{0xA63B,0xA63B}, /* A63A */ + {0xA63C,0xA63C},{0xA63D,0xA63D}, /* A63C */ + {0xA63E,0xA63E},{0xA63F,0xA63F}, /* A63E */ + {0xA640,0xA641},{0xA640,0xA641}, /* A640 */ + {0xA642,0xA643},{0xA642,0xA643}, /* A642 */ + {0xA644,0xA645},{0xA644,0xA645}, /* A644 */ + {0xA646,0xA647},{0xA646,0xA647}, /* A646 */ + {0xA648,0xA649},{0xA648,0xA649}, /* A648 */ + {0xA64A,0xA64B},{0xA64A,0xA64B}, /* A64A */ + {0xA64C,0xA64D},{0xA64C,0xA64D}, /* A64C */ + {0xA64E,0xA64F},{0xA64E,0xA64F}, /* A64E */ + {0xA650,0xA651},{0xA650,0xA651}, /* A650 */ + {0xA652,0xA653},{0xA652,0xA653}, /* A652 */ + {0xA654,0xA655},{0xA654,0xA655}, /* A654 */ + {0xA656,0xA657},{0xA656,0xA657}, /* A656 */ + {0xA658,0xA659},{0xA658,0xA659}, /* A658 */ + {0xA65A,0xA65B},{0xA65A,0xA65B}, /* A65A */ + {0xA65C,0xA65D},{0xA65C,0xA65D}, /* A65C */ + {0xA65E,0xA65F},{0xA65E,0xA65F}, /* A65E */ + {0xA660,0xA661},{0xA660,0xA661}, /* A660 */ + {0xA662,0xA663},{0xA662,0xA663}, /* A662 */ + {0xA664,0xA665},{0xA664,0xA665}, /* A664 */ + {0xA666,0xA667},{0xA666,0xA667}, /* A666 */ + {0xA668,0xA669},{0xA668,0xA669}, /* A668 */ + {0xA66A,0xA66B},{0xA66A,0xA66B}, /* A66A */ + {0xA66C,0xA66D},{0xA66C,0xA66D}, /* A66C */ + {0xA66E,0xA66E},{0xA66F,0xA66F}, /* A66E */ + {0xA670,0xA670},{0xA671,0xA671}, /* A670 */ + {0xA672,0xA672},{0xA673,0xA673}, /* A672 */ + {0xA674,0xA674},{0xA675,0xA675}, /* A674 */ + {0xA676,0xA676},{0xA677,0xA677}, /* A676 */ + {0xA678,0xA678},{0xA679,0xA679}, /* A678 */ + {0xA67A,0xA67A},{0xA67B,0xA67B}, /* A67A */ + {0xA67C,0xA67C},{0xA67D,0xA67D}, /* A67C */ + {0xA67E,0xA67E},{0xA67F,0xA67F}, /* A67E */ + {0xA680,0xA681},{0xA680,0xA681}, /* A680 */ + {0xA682,0xA683},{0xA682,0xA683}, /* A682 */ + {0xA684,0xA685},{0xA684,0xA685}, /* A684 */ + {0xA686,0xA687},{0xA686,0xA687}, /* A686 */ + {0xA688,0xA689},{0xA688,0xA689}, /* A688 */ + {0xA68A,0xA68B},{0xA68A,0xA68B}, /* A68A */ + {0xA68C,0xA68D},{0xA68C,0xA68D}, /* A68C */ + {0xA68E,0xA68F},{0xA68E,0xA68F}, /* A68E */ + {0xA690,0xA691},{0xA690,0xA691}, /* A690 */ + {0xA692,0xA693},{0xA692,0xA693}, /* A692 */ + {0xA694,0xA695},{0xA694,0xA695}, /* A694 */ + {0xA696,0xA697},{0xA696,0xA697}, /* A696 */ + {0xA698,0xA699},{0xA698,0xA699}, /* A698 */ + {0xA69A,0xA69B},{0xA69A,0xA69B}, /* A69A */ + {0xA69C,0xA69C},{0xA69D,0xA69D}, /* A69C */ + {0xA69E,0xA69E},{0xA69F,0xA69F}, /* A69E */ + {0xA6A0,0xA6A0},{0xA6A1,0xA6A1}, /* A6A0 */ + {0xA6A2,0xA6A2},{0xA6A3,0xA6A3}, /* A6A2 */ + {0xA6A4,0xA6A4},{0xA6A5,0xA6A5}, /* A6A4 */ + {0xA6A6,0xA6A6},{0xA6A7,0xA6A7}, /* A6A6 */ + {0xA6A8,0xA6A8},{0xA6A9,0xA6A9}, /* A6A8 */ + {0xA6AA,0xA6AA},{0xA6AB,0xA6AB}, /* A6AA */ + {0xA6AC,0xA6AC},{0xA6AD,0xA6AD}, /* A6AC */ + {0xA6AE,0xA6AE},{0xA6AF,0xA6AF}, /* A6AE */ + {0xA6B0,0xA6B0},{0xA6B1,0xA6B1}, /* A6B0 */ + {0xA6B2,0xA6B2},{0xA6B3,0xA6B3}, /* A6B2 */ + {0xA6B4,0xA6B4},{0xA6B5,0xA6B5}, /* A6B4 */ + {0xA6B6,0xA6B6},{0xA6B7,0xA6B7}, /* A6B6 */ + {0xA6B8,0xA6B8},{0xA6B9,0xA6B9}, /* A6B8 */ + {0xA6BA,0xA6BA},{0xA6BB,0xA6BB}, /* A6BA */ + {0xA6BC,0xA6BC},{0xA6BD,0xA6BD}, /* A6BC */ + {0xA6BE,0xA6BE},{0xA6BF,0xA6BF}, /* A6BE */ + {0xA6C0,0xA6C0},{0xA6C1,0xA6C1}, /* A6C0 */ + {0xA6C2,0xA6C2},{0xA6C3,0xA6C3}, /* A6C2 */ + {0xA6C4,0xA6C4},{0xA6C5,0xA6C5}, /* A6C4 */ + {0xA6C6,0xA6C6},{0xA6C7,0xA6C7}, /* A6C6 */ + {0xA6C8,0xA6C8},{0xA6C9,0xA6C9}, /* A6C8 */ + {0xA6CA,0xA6CA},{0xA6CB,0xA6CB}, /* A6CA */ + {0xA6CC,0xA6CC},{0xA6CD,0xA6CD}, /* A6CC */ + {0xA6CE,0xA6CE},{0xA6CF,0xA6CF}, /* A6CE */ + {0xA6D0,0xA6D0},{0xA6D1,0xA6D1}, /* A6D0 */ + {0xA6D2,0xA6D2},{0xA6D3,0xA6D3}, /* A6D2 */ + {0xA6D4,0xA6D4},{0xA6D5,0xA6D5}, /* A6D4 */ + {0xA6D6,0xA6D6},{0xA6D7,0xA6D7}, /* A6D6 */ + {0xA6D8,0xA6D8},{0xA6D9,0xA6D9}, /* A6D8 */ + {0xA6DA,0xA6DA},{0xA6DB,0xA6DB}, /* A6DA */ + {0xA6DC,0xA6DC},{0xA6DD,0xA6DD}, /* A6DC */ + {0xA6DE,0xA6DE},{0xA6DF,0xA6DF}, /* A6DE */ + {0xA6E0,0xA6E0},{0xA6E1,0xA6E1}, /* A6E0 */ + {0xA6E2,0xA6E2},{0xA6E3,0xA6E3}, /* A6E2 */ + {0xA6E4,0xA6E4},{0xA6E5,0xA6E5}, /* A6E4 */ + {0xA6E6,0xA6E6},{0xA6E7,0xA6E7}, /* A6E6 */ + {0xA6E8,0xA6E8},{0xA6E9,0xA6E9}, /* A6E8 */ + {0xA6EA,0xA6EA},{0xA6EB,0xA6EB}, /* A6EA */ + {0xA6EC,0xA6EC},{0xA6ED,0xA6ED}, /* A6EC */ + {0xA6EE,0xA6EE},{0xA6EF,0xA6EF}, /* A6EE */ + {0xA6F0,0xA6F0},{0xA6F1,0xA6F1}, /* A6F0 */ + {0xA6F2,0xA6F2},{0xA6F3,0xA6F3}, /* A6F2 */ + {0xA6F4,0xA6F4},{0xA6F5,0xA6F5}, /* A6F4 */ + {0xA6F6,0xA6F6},{0xA6F7,0xA6F7}, /* A6F6 */ + {0xA6F8,0xA6F8},{0xA6F9,0xA6F9}, /* A6F8 */ + {0xA6FA,0xA6FA},{0xA6FB,0xA6FB}, /* A6FA */ + {0xA6FC,0xA6FC},{0xA6FD,0xA6FD}, /* A6FC */ + {0xA6FE,0xA6FE},{0xA6FF,0xA6FF} /* A6FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_pageA7[256]={ + {0xA700,0xA700},{0xA701,0xA701}, /* A700 */ + {0xA702,0xA702},{0xA703,0xA703}, /* A702 */ + {0xA704,0xA704},{0xA705,0xA705}, /* A704 */ + {0xA706,0xA706},{0xA707,0xA707}, /* A706 */ + {0xA708,0xA708},{0xA709,0xA709}, /* A708 */ + {0xA70A,0xA70A},{0xA70B,0xA70B}, /* A70A */ + {0xA70C,0xA70C},{0xA70D,0xA70D}, /* A70C */ + {0xA70E,0xA70E},{0xA70F,0xA70F}, /* A70E */ + {0xA710,0xA710},{0xA711,0xA711}, /* A710 */ + {0xA712,0xA712},{0xA713,0xA713}, /* A712 */ + {0xA714,0xA714},{0xA715,0xA715}, /* A714 */ + {0xA716,0xA716},{0xA717,0xA717}, /* A716 */ + {0xA718,0xA718},{0xA719,0xA719}, /* A718 */ + {0xA71A,0xA71A},{0xA71B,0xA71B}, /* A71A */ + {0xA71C,0xA71C},{0xA71D,0xA71D}, /* A71C */ + {0xA71E,0xA71E},{0xA71F,0xA71F}, /* A71E */ + {0xA720,0xA720},{0xA721,0xA721}, /* A720 */ + {0xA722,0xA723},{0xA722,0xA723}, /* A722 */ + {0xA724,0xA725},{0xA724,0xA725}, /* A724 */ + {0xA726,0xA727},{0xA726,0xA727}, /* A726 */ + {0xA728,0xA729},{0xA728,0xA729}, /* A728 */ + {0xA72A,0xA72B},{0xA72A,0xA72B}, /* A72A */ + {0xA72C,0xA72D},{0xA72C,0xA72D}, /* A72C */ + {0xA72E,0xA72F},{0xA72E,0xA72F}, /* A72E */ + {0xA730,0xA730},{0xA731,0xA731}, /* A730 */ + {0xA732,0xA733},{0xA732,0xA733}, /* A732 */ + {0xA734,0xA735},{0xA734,0xA735}, /* A734 */ + {0xA736,0xA737},{0xA736,0xA737}, /* A736 */ + {0xA738,0xA739},{0xA738,0xA739}, /* A738 */ + {0xA73A,0xA73B},{0xA73A,0xA73B}, /* A73A */ + {0xA73C,0xA73D},{0xA73C,0xA73D}, /* A73C */ + {0xA73E,0xA73F},{0xA73E,0xA73F}, /* A73E */ + {0xA740,0xA741},{0xA740,0xA741}, /* A740 */ + {0xA742,0xA743},{0xA742,0xA743}, /* A742 */ + {0xA744,0xA745},{0xA744,0xA745}, /* A744 */ + {0xA746,0xA747},{0xA746,0xA747}, /* A746 */ + {0xA748,0xA749},{0xA748,0xA749}, /* A748 */ + {0xA74A,0xA74B},{0xA74A,0xA74B}, /* A74A */ + {0xA74C,0xA74D},{0xA74C,0xA74D}, /* A74C */ + {0xA74E,0xA74F},{0xA74E,0xA74F}, /* A74E */ + {0xA750,0xA751},{0xA750,0xA751}, /* A750 */ + {0xA752,0xA753},{0xA752,0xA753}, /* A752 */ + {0xA754,0xA755},{0xA754,0xA755}, /* A754 */ + {0xA756,0xA757},{0xA756,0xA757}, /* A756 */ + {0xA758,0xA759},{0xA758,0xA759}, /* A758 */ + {0xA75A,0xA75B},{0xA75A,0xA75B}, /* A75A */ + {0xA75C,0xA75D},{0xA75C,0xA75D}, /* A75C */ + {0xA75E,0xA75F},{0xA75E,0xA75F}, /* A75E */ + {0xA760,0xA761},{0xA760,0xA761}, /* A760 */ + {0xA762,0xA763},{0xA762,0xA763}, /* A762 */ + {0xA764,0xA765},{0xA764,0xA765}, /* A764 */ + {0xA766,0xA767},{0xA766,0xA767}, /* A766 */ + {0xA768,0xA769},{0xA768,0xA769}, /* A768 */ + {0xA76A,0xA76B},{0xA76A,0xA76B}, /* A76A */ + {0xA76C,0xA76D},{0xA76C,0xA76D}, /* A76C */ + {0xA76E,0xA76F},{0xA76E,0xA76F}, /* A76E */ + {0xA770,0xA770},{0xA771,0xA771}, /* A770 */ + {0xA772,0xA772},{0xA773,0xA773}, /* A772 */ + {0xA774,0xA774},{0xA775,0xA775}, /* A774 */ + {0xA776,0xA776},{0xA777,0xA777}, /* A776 */ + {0xA778,0xA778},{0xA779,0xA77A}, /* A778 */ + {0xA779,0xA77A},{0xA77B,0xA77C}, /* A77A */ + {0xA77B,0xA77C},{0xA77D,0x1D79}, /* A77C */ + {0xA77E,0xA77F},{0xA77E,0xA77F}, /* A77E */ + {0xA780,0xA781},{0xA780,0xA781}, /* A780 */ + {0xA782,0xA783},{0xA782,0xA783}, /* A782 */ + {0xA784,0xA785},{0xA784,0xA785}, /* A784 */ + {0xA786,0xA787},{0xA786,0xA787}, /* A786 */ + {0xA788,0xA788},{0xA789,0xA789}, /* A788 */ + {0xA78A,0xA78A},{0xA78B,0xA78C}, /* A78A */ + {0xA78B,0xA78C},{0xA78D,0x0265}, /* A78C */ + {0xA78E,0xA78E},{0xA78F,0xA78F}, /* A78E */ + {0xA790,0xA791},{0xA790,0xA791}, /* A790 */ + {0xA792,0xA793},{0xA792,0xA793}, /* A792 */ + {0xA7C4,0xA794},{0xA795,0xA795}, /* A794 */ + {0xA796,0xA797},{0xA796,0xA797}, /* A796 */ + {0xA798,0xA799},{0xA798,0xA799}, /* A798 */ + {0xA79A,0xA79B},{0xA79A,0xA79B}, /* A79A */ + {0xA79C,0xA79D},{0xA79C,0xA79D}, /* A79C */ + {0xA79E,0xA79F},{0xA79E,0xA79F}, /* A79E */ + {0xA7A0,0xA7A1},{0xA7A0,0xA7A1}, /* A7A0 */ + {0xA7A2,0xA7A3},{0xA7A2,0xA7A3}, /* A7A2 */ + {0xA7A4,0xA7A5},{0xA7A4,0xA7A5}, /* A7A4 */ + {0xA7A6,0xA7A7},{0xA7A6,0xA7A7}, /* A7A6 */ + {0xA7A8,0xA7A9},{0xA7A8,0xA7A9}, /* A7A8 */ + {0xA7AA,0x0266},{0xA7AB,0x025C}, /* A7AA */ + {0xA7AC,0x0261},{0xA7AD,0x026C}, /* A7AC */ + {0xA7AE,0x026A},{0xA7AF,0xA7AF}, /* A7AE */ + {0xA7B0,0x029E},{0xA7B1,0x0287}, /* A7B0 */ + {0xA7B2,0x029D},{0xA7B3,0xAB53}, /* A7B2 */ + {0xA7B4,0xA7B5},{0xA7B4,0xA7B5}, /* A7B4 */ + {0xA7B6,0xA7B7},{0xA7B6,0xA7B7}, /* A7B6 */ + {0xA7B8,0xA7B9},{0xA7B8,0xA7B9}, /* A7B8 */ + {0xA7BA,0xA7BB},{0xA7BA,0xA7BB}, /* A7BA */ + {0xA7BC,0xA7BD},{0xA7BC,0xA7BD}, /* A7BC */ + {0xA7BE,0xA7BF},{0xA7BE,0xA7BF}, /* A7BE */ + {0xA7C0,0xA7C1},{0xA7C0,0xA7C1}, /* A7C0 */ + {0xA7C2,0xA7C3},{0xA7C2,0xA7C3}, /* A7C2 */ + {0xA7C4,0xA794},{0xA7C5,0x0282}, /* A7C4 */ + {0xA7C6,0x1D8E},{0xA7C7,0xA7C8}, /* A7C6 */ + {0xA7C7,0xA7C8},{0xA7C9,0xA7CA}, /* A7C8 */ + {0xA7C9,0xA7CA},{0xA7CB,0xA7CB}, /* A7CA */ + {0xA7CC,0xA7CC},{0xA7CD,0xA7CD}, /* A7CC */ + {0xA7CE,0xA7CE},{0xA7CF,0xA7CF}, /* A7CE */ + {0xA7D0,0xA7D1},{0xA7D0,0xA7D1}, /* A7D0 */ + {0xA7D2,0xA7D2},{0xA7D3,0xA7D3}, /* A7D2 */ + {0xA7D4,0xA7D4},{0xA7D5,0xA7D5}, /* A7D4 */ + {0xA7D6,0xA7D7},{0xA7D6,0xA7D7}, /* A7D6 */ + {0xA7D8,0xA7D9},{0xA7D8,0xA7D9}, /* A7D8 */ + {0xA7DA,0xA7DA},{0xA7DB,0xA7DB}, /* A7DA */ + {0xA7DC,0xA7DC},{0xA7DD,0xA7DD}, /* A7DC */ + {0xA7DE,0xA7DE},{0xA7DF,0xA7DF}, /* A7DE */ + {0xA7E0,0xA7E0},{0xA7E1,0xA7E1}, /* A7E0 */ + {0xA7E2,0xA7E2},{0xA7E3,0xA7E3}, /* A7E2 */ + {0xA7E4,0xA7E4},{0xA7E5,0xA7E5}, /* A7E4 */ + {0xA7E6,0xA7E6},{0xA7E7,0xA7E7}, /* A7E6 */ + {0xA7E8,0xA7E8},{0xA7E9,0xA7E9}, /* A7E8 */ + {0xA7EA,0xA7EA},{0xA7EB,0xA7EB}, /* A7EA */ + {0xA7EC,0xA7EC},{0xA7ED,0xA7ED}, /* A7EC */ + {0xA7EE,0xA7EE},{0xA7EF,0xA7EF}, /* A7EE */ + {0xA7F0,0xA7F0},{0xA7F1,0xA7F1}, /* A7F0 */ + {0xA7F2,0xA7F2},{0xA7F3,0xA7F3}, /* A7F2 */ + {0xA7F4,0xA7F4},{0xA7F5,0xA7F6}, /* A7F4 */ + {0xA7F5,0xA7F6},{0xA7F7,0xA7F7}, /* A7F6 */ + {0xA7F8,0xA7F8},{0xA7F9,0xA7F9}, /* A7F8 */ + {0xA7FA,0xA7FA},{0xA7FB,0xA7FB}, /* A7FA */ + {0xA7FC,0xA7FC},{0xA7FD,0xA7FD}, /* A7FC */ + {0xA7FE,0xA7FE},{0xA7FF,0xA7FF} /* A7FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_pageAB[256]={ + {0xAB00,0xAB00},{0xAB01,0xAB01}, /* AB00 */ + {0xAB02,0xAB02},{0xAB03,0xAB03}, /* AB02 */ + {0xAB04,0xAB04},{0xAB05,0xAB05}, /* AB04 */ + {0xAB06,0xAB06},{0xAB07,0xAB07}, /* AB06 */ + {0xAB08,0xAB08},{0xAB09,0xAB09}, /* AB08 */ + {0xAB0A,0xAB0A},{0xAB0B,0xAB0B}, /* AB0A */ + {0xAB0C,0xAB0C},{0xAB0D,0xAB0D}, /* AB0C */ + {0xAB0E,0xAB0E},{0xAB0F,0xAB0F}, /* AB0E */ + {0xAB10,0xAB10},{0xAB11,0xAB11}, /* AB10 */ + {0xAB12,0xAB12},{0xAB13,0xAB13}, /* AB12 */ + {0xAB14,0xAB14},{0xAB15,0xAB15}, /* AB14 */ + {0xAB16,0xAB16},{0xAB17,0xAB17}, /* AB16 */ + {0xAB18,0xAB18},{0xAB19,0xAB19}, /* AB18 */ + {0xAB1A,0xAB1A},{0xAB1B,0xAB1B}, /* AB1A */ + {0xAB1C,0xAB1C},{0xAB1D,0xAB1D}, /* AB1C */ + {0xAB1E,0xAB1E},{0xAB1F,0xAB1F}, /* AB1E */ + {0xAB20,0xAB20},{0xAB21,0xAB21}, /* AB20 */ + {0xAB22,0xAB22},{0xAB23,0xAB23}, /* AB22 */ + {0xAB24,0xAB24},{0xAB25,0xAB25}, /* AB24 */ + {0xAB26,0xAB26},{0xAB27,0xAB27}, /* AB26 */ + {0xAB28,0xAB28},{0xAB29,0xAB29}, /* AB28 */ + {0xAB2A,0xAB2A},{0xAB2B,0xAB2B}, /* AB2A */ + {0xAB2C,0xAB2C},{0xAB2D,0xAB2D}, /* AB2C */ + {0xAB2E,0xAB2E},{0xAB2F,0xAB2F}, /* AB2E */ + {0xAB30,0xAB30},{0xAB31,0xAB31}, /* AB30 */ + {0xAB32,0xAB32},{0xAB33,0xAB33}, /* AB32 */ + {0xAB34,0xAB34},{0xAB35,0xAB35}, /* AB34 */ + {0xAB36,0xAB36},{0xAB37,0xAB37}, /* AB36 */ + {0xAB38,0xAB38},{0xAB39,0xAB39}, /* AB38 */ + {0xAB3A,0xAB3A},{0xAB3B,0xAB3B}, /* AB3A */ + {0xAB3C,0xAB3C},{0xAB3D,0xAB3D}, /* AB3C */ + {0xAB3E,0xAB3E},{0xAB3F,0xAB3F}, /* AB3E */ + {0xAB40,0xAB40},{0xAB41,0xAB41}, /* AB40 */ + {0xAB42,0xAB42},{0xAB43,0xAB43}, /* AB42 */ + {0xAB44,0xAB44},{0xAB45,0xAB45}, /* AB44 */ + {0xAB46,0xAB46},{0xAB47,0xAB47}, /* AB46 */ + {0xAB48,0xAB48},{0xAB49,0xAB49}, /* AB48 */ + {0xAB4A,0xAB4A},{0xAB4B,0xAB4B}, /* AB4A */ + {0xAB4C,0xAB4C},{0xAB4D,0xAB4D}, /* AB4C */ + {0xAB4E,0xAB4E},{0xAB4F,0xAB4F}, /* AB4E */ + {0xAB50,0xAB50},{0xAB51,0xAB51}, /* AB50 */ + {0xAB52,0xAB52},{0xA7B3,0xAB53}, /* AB52 */ + {0xAB54,0xAB54},{0xAB55,0xAB55}, /* AB54 */ + {0xAB56,0xAB56},{0xAB57,0xAB57}, /* AB56 */ + {0xAB58,0xAB58},{0xAB59,0xAB59}, /* AB58 */ + {0xAB5A,0xAB5A},{0xAB5B,0xAB5B}, /* AB5A */ + {0xAB5C,0xAB5C},{0xAB5D,0xAB5D}, /* AB5C */ + {0xAB5E,0xAB5E},{0xAB5F,0xAB5F}, /* AB5E */ + {0xAB60,0xAB60},{0xAB61,0xAB61}, /* AB60 */ + {0xAB62,0xAB62},{0xAB63,0xAB63}, /* AB62 */ + {0xAB64,0xAB64},{0xAB65,0xAB65}, /* AB64 */ + {0xAB66,0xAB66},{0xAB67,0xAB67}, /* AB66 */ + {0xAB68,0xAB68},{0xAB69,0xAB69}, /* AB68 */ + {0xAB6A,0xAB6A},{0xAB6B,0xAB6B}, /* AB6A */ + {0xAB6C,0xAB6C},{0xAB6D,0xAB6D}, /* AB6C */ + {0xAB6E,0xAB6E},{0xAB6F,0xAB6F}, /* AB6E */ + {0x13A0,0xAB70},{0x13A1,0xAB71}, /* AB70 */ + {0x13A2,0xAB72},{0x13A3,0xAB73}, /* AB72 */ + {0x13A4,0xAB74},{0x13A5,0xAB75}, /* AB74 */ + {0x13A6,0xAB76},{0x13A7,0xAB77}, /* AB76 */ + {0x13A8,0xAB78},{0x13A9,0xAB79}, /* AB78 */ + {0x13AA,0xAB7A},{0x13AB,0xAB7B}, /* AB7A */ + {0x13AC,0xAB7C},{0x13AD,0xAB7D}, /* AB7C */ + {0x13AE,0xAB7E},{0x13AF,0xAB7F}, /* AB7E */ + {0x13B0,0xAB80},{0x13B1,0xAB81}, /* AB80 */ + {0x13B2,0xAB82},{0x13B3,0xAB83}, /* AB82 */ + {0x13B4,0xAB84},{0x13B5,0xAB85}, /* AB84 */ + {0x13B6,0xAB86},{0x13B7,0xAB87}, /* AB86 */ + {0x13B8,0xAB88},{0x13B9,0xAB89}, /* AB88 */ + {0x13BA,0xAB8A},{0x13BB,0xAB8B}, /* AB8A */ + {0x13BC,0xAB8C},{0x13BD,0xAB8D}, /* AB8C */ + {0x13BE,0xAB8E},{0x13BF,0xAB8F}, /* AB8E */ + {0x13C0,0xAB90},{0x13C1,0xAB91}, /* AB90 */ + {0x13C2,0xAB92},{0x13C3,0xAB93}, /* AB92 */ + {0x13C4,0xAB94},{0x13C5,0xAB95}, /* AB94 */ + {0x13C6,0xAB96},{0x13C7,0xAB97}, /* AB96 */ + {0x13C8,0xAB98},{0x13C9,0xAB99}, /* AB98 */ + {0x13CA,0xAB9A},{0x13CB,0xAB9B}, /* AB9A */ + {0x13CC,0xAB9C},{0x13CD,0xAB9D}, /* AB9C */ + {0x13CE,0xAB9E},{0x13CF,0xAB9F}, /* AB9E */ + {0x13D0,0xABA0},{0x13D1,0xABA1}, /* ABA0 */ + {0x13D2,0xABA2},{0x13D3,0xABA3}, /* ABA2 */ + {0x13D4,0xABA4},{0x13D5,0xABA5}, /* ABA4 */ + {0x13D6,0xABA6},{0x13D7,0xABA7}, /* ABA6 */ + {0x13D8,0xABA8},{0x13D9,0xABA9}, /* ABA8 */ + {0x13DA,0xABAA},{0x13DB,0xABAB}, /* ABAA */ + {0x13DC,0xABAC},{0x13DD,0xABAD}, /* ABAC */ + {0x13DE,0xABAE},{0x13DF,0xABAF}, /* ABAE */ + {0x13E0,0xABB0},{0x13E1,0xABB1}, /* ABB0 */ + {0x13E2,0xABB2},{0x13E3,0xABB3}, /* ABB2 */ + {0x13E4,0xABB4},{0x13E5,0xABB5}, /* ABB4 */ + {0x13E6,0xABB6},{0x13E7,0xABB7}, /* ABB6 */ + {0x13E8,0xABB8},{0x13E9,0xABB9}, /* ABB8 */ + {0x13EA,0xABBA},{0x13EB,0xABBB}, /* ABBA */ + {0x13EC,0xABBC},{0x13ED,0xABBD}, /* ABBC */ + {0x13EE,0xABBE},{0x13EF,0xABBF}, /* ABBE */ + {0xABC0,0xABC0},{0xABC1,0xABC1}, /* ABC0 */ + {0xABC2,0xABC2},{0xABC3,0xABC3}, /* ABC2 */ + {0xABC4,0xABC4},{0xABC5,0xABC5}, /* ABC4 */ + {0xABC6,0xABC6},{0xABC7,0xABC7}, /* ABC6 */ + {0xABC8,0xABC8},{0xABC9,0xABC9}, /* ABC8 */ + {0xABCA,0xABCA},{0xABCB,0xABCB}, /* ABCA */ + {0xABCC,0xABCC},{0xABCD,0xABCD}, /* ABCC */ + {0xABCE,0xABCE},{0xABCF,0xABCF}, /* ABCE */ + {0xABD0,0xABD0},{0xABD1,0xABD1}, /* ABD0 */ + {0xABD2,0xABD2},{0xABD3,0xABD3}, /* ABD2 */ + {0xABD4,0xABD4},{0xABD5,0xABD5}, /* ABD4 */ + {0xABD6,0xABD6},{0xABD7,0xABD7}, /* ABD6 */ + {0xABD8,0xABD8},{0xABD9,0xABD9}, /* ABD8 */ + {0xABDA,0xABDA},{0xABDB,0xABDB}, /* ABDA */ + {0xABDC,0xABDC},{0xABDD,0xABDD}, /* ABDC */ + {0xABDE,0xABDE},{0xABDF,0xABDF}, /* ABDE */ + {0xABE0,0xABE0},{0xABE1,0xABE1}, /* ABE0 */ + {0xABE2,0xABE2},{0xABE3,0xABE3}, /* ABE2 */ + {0xABE4,0xABE4},{0xABE5,0xABE5}, /* ABE4 */ + {0xABE6,0xABE6},{0xABE7,0xABE7}, /* ABE6 */ + {0xABE8,0xABE8},{0xABE9,0xABE9}, /* ABE8 */ + {0xABEA,0xABEA},{0xABEB,0xABEB}, /* ABEA */ + {0xABEC,0xABEC},{0xABED,0xABED}, /* ABEC */ + {0xABEE,0xABEE},{0xABEF,0xABEF}, /* ABEE */ + {0xABF0,0xABF0},{0xABF1,0xABF1}, /* ABF0 */ + {0xABF2,0xABF2},{0xABF3,0xABF3}, /* ABF2 */ + {0xABF4,0xABF4},{0xABF5,0xABF5}, /* ABF4 */ + {0xABF6,0xABF6},{0xABF7,0xABF7}, /* ABF6 */ + {0xABF8,0xABF8},{0xABF9,0xABF9}, /* ABF8 */ + {0xABFA,0xABFA},{0xABFB,0xABFB}, /* ABFA */ + {0xABFC,0xABFC},{0xABFD,0xABFD}, /* ABFC */ + {0xABFE,0xABFE},{0xABFF,0xABFF} /* ABFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_pageFF[256]={ + {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */ + {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */ + {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */ + {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */ + {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */ + {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */ + {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */ + {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */ + {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */ + {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */ + {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */ + {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */ + {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */ + {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */ + {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */ + {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */ + {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */ + {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */ + {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */ + {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */ + {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */ + {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */ + {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */ + {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */ + {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */ + {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */ + {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */ + {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */ + {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */ + {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */ + {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */ + {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */ + {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */ + {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */ + {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */ + {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */ + {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */ + {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */ + {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */ + {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */ + {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */ + {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */ + {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */ + {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */ + {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */ + {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */ + {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */ + {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */ + {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */ + {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */ + {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */ + {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */ + {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */ + {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */ + {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */ + {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */ + {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */ + {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */ + {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */ + {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */ + {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */ + {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */ + {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */ + {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */ + {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */ + {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */ + {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */ + {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */ + {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */ + {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */ + {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */ + {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */ + {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */ + {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */ + {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */ + {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */ + {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */ + {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */ + {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */ + {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */ + {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */ + {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */ + {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */ + {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */ + {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */ + {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */ + {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */ + {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */ + {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */ + {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */ + {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */ + {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */ + {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */ + {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */ + {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */ + {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */ + {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */ + {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */ + {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */ + {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */ + {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */ + {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */ + {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */ + {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page104[256]={ + {0x10400,0x10428},{0x10401,0x10429}, /* 10400 */ + {0x10402,0x1042A},{0x10403,0x1042B}, /* 10402 */ + {0x10404,0x1042C},{0x10405,0x1042D}, /* 10404 */ + {0x10406,0x1042E},{0x10407,0x1042F}, /* 10406 */ + {0x10408,0x10430},{0x10409,0x10431}, /* 10408 */ + {0x1040A,0x10432},{0x1040B,0x10433}, /* 1040A */ + {0x1040C,0x10434},{0x1040D,0x10435}, /* 1040C */ + {0x1040E,0x10436},{0x1040F,0x10437}, /* 1040E */ + {0x10410,0x10438},{0x10411,0x10439}, /* 10410 */ + {0x10412,0x1043A},{0x10413,0x1043B}, /* 10412 */ + {0x10414,0x1043C},{0x10415,0x1043D}, /* 10414 */ + {0x10416,0x1043E},{0x10417,0x1043F}, /* 10416 */ + {0x10418,0x10440},{0x10419,0x10441}, /* 10418 */ + {0x1041A,0x10442},{0x1041B,0x10443}, /* 1041A */ + {0x1041C,0x10444},{0x1041D,0x10445}, /* 1041C */ + {0x1041E,0x10446},{0x1041F,0x10447}, /* 1041E */ + {0x10420,0x10448},{0x10421,0x10449}, /* 10420 */ + {0x10422,0x1044A},{0x10423,0x1044B}, /* 10422 */ + {0x10424,0x1044C},{0x10425,0x1044D}, /* 10424 */ + {0x10426,0x1044E},{0x10427,0x1044F}, /* 10426 */ + {0x10400,0x10428},{0x10401,0x10429}, /* 10428 */ + {0x10402,0x1042A},{0x10403,0x1042B}, /* 1042A */ + {0x10404,0x1042C},{0x10405,0x1042D}, /* 1042C */ + {0x10406,0x1042E},{0x10407,0x1042F}, /* 1042E */ + {0x10408,0x10430},{0x10409,0x10431}, /* 10430 */ + {0x1040A,0x10432},{0x1040B,0x10433}, /* 10432 */ + {0x1040C,0x10434},{0x1040D,0x10435}, /* 10434 */ + {0x1040E,0x10436},{0x1040F,0x10437}, /* 10436 */ + {0x10410,0x10438},{0x10411,0x10439}, /* 10438 */ + {0x10412,0x1043A},{0x10413,0x1043B}, /* 1043A */ + {0x10414,0x1043C},{0x10415,0x1043D}, /* 1043C */ + {0x10416,0x1043E},{0x10417,0x1043F}, /* 1043E */ + {0x10418,0x10440},{0x10419,0x10441}, /* 10440 */ + {0x1041A,0x10442},{0x1041B,0x10443}, /* 10442 */ + {0x1041C,0x10444},{0x1041D,0x10445}, /* 10444 */ + {0x1041E,0x10446},{0x1041F,0x10447}, /* 10446 */ + {0x10420,0x10448},{0x10421,0x10449}, /* 10448 */ + {0x10422,0x1044A},{0x10423,0x1044B}, /* 1044A */ + {0x10424,0x1044C},{0x10425,0x1044D}, /* 1044C */ + {0x10426,0x1044E},{0x10427,0x1044F}, /* 1044E */ + {0x10450,0x10450},{0x10451,0x10451}, /* 10450 */ + {0x10452,0x10452},{0x10453,0x10453}, /* 10452 */ + {0x10454,0x10454},{0x10455,0x10455}, /* 10454 */ + {0x10456,0x10456},{0x10457,0x10457}, /* 10456 */ + {0x10458,0x10458},{0x10459,0x10459}, /* 10458 */ + {0x1045A,0x1045A},{0x1045B,0x1045B}, /* 1045A */ + {0x1045C,0x1045C},{0x1045D,0x1045D}, /* 1045C */ + {0x1045E,0x1045E},{0x1045F,0x1045F}, /* 1045E */ + {0x10460,0x10460},{0x10461,0x10461}, /* 10460 */ + {0x10462,0x10462},{0x10463,0x10463}, /* 10462 */ + {0x10464,0x10464},{0x10465,0x10465}, /* 10464 */ + {0x10466,0x10466},{0x10467,0x10467}, /* 10466 */ + {0x10468,0x10468},{0x10469,0x10469}, /* 10468 */ + {0x1046A,0x1046A},{0x1046B,0x1046B}, /* 1046A */ + {0x1046C,0x1046C},{0x1046D,0x1046D}, /* 1046C */ + {0x1046E,0x1046E},{0x1046F,0x1046F}, /* 1046E */ + {0x10470,0x10470},{0x10471,0x10471}, /* 10470 */ + {0x10472,0x10472},{0x10473,0x10473}, /* 10472 */ + {0x10474,0x10474},{0x10475,0x10475}, /* 10474 */ + {0x10476,0x10476},{0x10477,0x10477}, /* 10476 */ + {0x10478,0x10478},{0x10479,0x10479}, /* 10478 */ + {0x1047A,0x1047A},{0x1047B,0x1047B}, /* 1047A */ + {0x1047C,0x1047C},{0x1047D,0x1047D}, /* 1047C */ + {0x1047E,0x1047E},{0x1047F,0x1047F}, /* 1047E */ + {0x10480,0x10480},{0x10481,0x10481}, /* 10480 */ + {0x10482,0x10482},{0x10483,0x10483}, /* 10482 */ + {0x10484,0x10484},{0x10485,0x10485}, /* 10484 */ + {0x10486,0x10486},{0x10487,0x10487}, /* 10486 */ + {0x10488,0x10488},{0x10489,0x10489}, /* 10488 */ + {0x1048A,0x1048A},{0x1048B,0x1048B}, /* 1048A */ + {0x1048C,0x1048C},{0x1048D,0x1048D}, /* 1048C */ + {0x1048E,0x1048E},{0x1048F,0x1048F}, /* 1048E */ + {0x10490,0x10490},{0x10491,0x10491}, /* 10490 */ + {0x10492,0x10492},{0x10493,0x10493}, /* 10492 */ + {0x10494,0x10494},{0x10495,0x10495}, /* 10494 */ + {0x10496,0x10496},{0x10497,0x10497}, /* 10496 */ + {0x10498,0x10498},{0x10499,0x10499}, /* 10498 */ + {0x1049A,0x1049A},{0x1049B,0x1049B}, /* 1049A */ + {0x1049C,0x1049C},{0x1049D,0x1049D}, /* 1049C */ + {0x1049E,0x1049E},{0x1049F,0x1049F}, /* 1049E */ + {0x104A0,0x104A0},{0x104A1,0x104A1}, /* 104A0 */ + {0x104A2,0x104A2},{0x104A3,0x104A3}, /* 104A2 */ + {0x104A4,0x104A4},{0x104A5,0x104A5}, /* 104A4 */ + {0x104A6,0x104A6},{0x104A7,0x104A7}, /* 104A6 */ + {0x104A8,0x104A8},{0x104A9,0x104A9}, /* 104A8 */ + {0x104AA,0x104AA},{0x104AB,0x104AB}, /* 104AA */ + {0x104AC,0x104AC},{0x104AD,0x104AD}, /* 104AC */ + {0x104AE,0x104AE},{0x104AF,0x104AF}, /* 104AE */ + {0x104B0,0x104D8},{0x104B1,0x104D9}, /* 104B0 */ + {0x104B2,0x104DA},{0x104B3,0x104DB}, /* 104B2 */ + {0x104B4,0x104DC},{0x104B5,0x104DD}, /* 104B4 */ + {0x104B6,0x104DE},{0x104B7,0x104DF}, /* 104B6 */ + {0x104B8,0x104E0},{0x104B9,0x104E1}, /* 104B8 */ + {0x104BA,0x104E2},{0x104BB,0x104E3}, /* 104BA */ + {0x104BC,0x104E4},{0x104BD,0x104E5}, /* 104BC */ + {0x104BE,0x104E6},{0x104BF,0x104E7}, /* 104BE */ + {0x104C0,0x104E8},{0x104C1,0x104E9}, /* 104C0 */ + {0x104C2,0x104EA},{0x104C3,0x104EB}, /* 104C2 */ + {0x104C4,0x104EC},{0x104C5,0x104ED}, /* 104C4 */ + {0x104C6,0x104EE},{0x104C7,0x104EF}, /* 104C6 */ + {0x104C8,0x104F0},{0x104C9,0x104F1}, /* 104C8 */ + {0x104CA,0x104F2},{0x104CB,0x104F3}, /* 104CA */ + {0x104CC,0x104F4},{0x104CD,0x104F5}, /* 104CC */ + {0x104CE,0x104F6},{0x104CF,0x104F7}, /* 104CE */ + {0x104D0,0x104F8},{0x104D1,0x104F9}, /* 104D0 */ + {0x104D2,0x104FA},{0x104D3,0x104FB}, /* 104D2 */ + {0x104D4,0x104D4},{0x104D5,0x104D5}, /* 104D4 */ + {0x104D6,0x104D6},{0x104D7,0x104D7}, /* 104D6 */ + {0x104B0,0x104D8},{0x104B1,0x104D9}, /* 104D8 */ + {0x104B2,0x104DA},{0x104B3,0x104DB}, /* 104DA */ + {0x104B4,0x104DC},{0x104B5,0x104DD}, /* 104DC */ + {0x104B6,0x104DE},{0x104B7,0x104DF}, /* 104DE */ + {0x104B8,0x104E0},{0x104B9,0x104E1}, /* 104E0 */ + {0x104BA,0x104E2},{0x104BB,0x104E3}, /* 104E2 */ + {0x104BC,0x104E4},{0x104BD,0x104E5}, /* 104E4 */ + {0x104BE,0x104E6},{0x104BF,0x104E7}, /* 104E6 */ + {0x104C0,0x104E8},{0x104C1,0x104E9}, /* 104E8 */ + {0x104C2,0x104EA},{0x104C3,0x104EB}, /* 104EA */ + {0x104C4,0x104EC},{0x104C5,0x104ED}, /* 104EC */ + {0x104C6,0x104EE},{0x104C7,0x104EF}, /* 104EE */ + {0x104C8,0x104F0},{0x104C9,0x104F1}, /* 104F0 */ + {0x104CA,0x104F2},{0x104CB,0x104F3}, /* 104F2 */ + {0x104CC,0x104F4},{0x104CD,0x104F5}, /* 104F4 */ + {0x104CE,0x104F6},{0x104CF,0x104F7}, /* 104F6 */ + {0x104D0,0x104F8},{0x104D1,0x104F9}, /* 104F8 */ + {0x104D2,0x104FA},{0x104D3,0x104FB}, /* 104FA */ + {0x104FC,0x104FC},{0x104FD,0x104FD}, /* 104FC */ + {0x104FE,0x104FE},{0x104FF,0x104FF} /* 104FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page105[256]={ + {0x10500,0x10500},{0x10501,0x10501}, /* 10500 */ + {0x10502,0x10502},{0x10503,0x10503}, /* 10502 */ + {0x10504,0x10504},{0x10505,0x10505}, /* 10504 */ + {0x10506,0x10506},{0x10507,0x10507}, /* 10506 */ + {0x10508,0x10508},{0x10509,0x10509}, /* 10508 */ + {0x1050A,0x1050A},{0x1050B,0x1050B}, /* 1050A */ + {0x1050C,0x1050C},{0x1050D,0x1050D}, /* 1050C */ + {0x1050E,0x1050E},{0x1050F,0x1050F}, /* 1050E */ + {0x10510,0x10510},{0x10511,0x10511}, /* 10510 */ + {0x10512,0x10512},{0x10513,0x10513}, /* 10512 */ + {0x10514,0x10514},{0x10515,0x10515}, /* 10514 */ + {0x10516,0x10516},{0x10517,0x10517}, /* 10516 */ + {0x10518,0x10518},{0x10519,0x10519}, /* 10518 */ + {0x1051A,0x1051A},{0x1051B,0x1051B}, /* 1051A */ + {0x1051C,0x1051C},{0x1051D,0x1051D}, /* 1051C */ + {0x1051E,0x1051E},{0x1051F,0x1051F}, /* 1051E */ + {0x10520,0x10520},{0x10521,0x10521}, /* 10520 */ + {0x10522,0x10522},{0x10523,0x10523}, /* 10522 */ + {0x10524,0x10524},{0x10525,0x10525}, /* 10524 */ + {0x10526,0x10526},{0x10527,0x10527}, /* 10526 */ + {0x10528,0x10528},{0x10529,0x10529}, /* 10528 */ + {0x1052A,0x1052A},{0x1052B,0x1052B}, /* 1052A */ + {0x1052C,0x1052C},{0x1052D,0x1052D}, /* 1052C */ + {0x1052E,0x1052E},{0x1052F,0x1052F}, /* 1052E */ + {0x10530,0x10530},{0x10531,0x10531}, /* 10530 */ + {0x10532,0x10532},{0x10533,0x10533}, /* 10532 */ + {0x10534,0x10534},{0x10535,0x10535}, /* 10534 */ + {0x10536,0x10536},{0x10537,0x10537}, /* 10536 */ + {0x10538,0x10538},{0x10539,0x10539}, /* 10538 */ + {0x1053A,0x1053A},{0x1053B,0x1053B}, /* 1053A */ + {0x1053C,0x1053C},{0x1053D,0x1053D}, /* 1053C */ + {0x1053E,0x1053E},{0x1053F,0x1053F}, /* 1053E */ + {0x10540,0x10540},{0x10541,0x10541}, /* 10540 */ + {0x10542,0x10542},{0x10543,0x10543}, /* 10542 */ + {0x10544,0x10544},{0x10545,0x10545}, /* 10544 */ + {0x10546,0x10546},{0x10547,0x10547}, /* 10546 */ + {0x10548,0x10548},{0x10549,0x10549}, /* 10548 */ + {0x1054A,0x1054A},{0x1054B,0x1054B}, /* 1054A */ + {0x1054C,0x1054C},{0x1054D,0x1054D}, /* 1054C */ + {0x1054E,0x1054E},{0x1054F,0x1054F}, /* 1054E */ + {0x10550,0x10550},{0x10551,0x10551}, /* 10550 */ + {0x10552,0x10552},{0x10553,0x10553}, /* 10552 */ + {0x10554,0x10554},{0x10555,0x10555}, /* 10554 */ + {0x10556,0x10556},{0x10557,0x10557}, /* 10556 */ + {0x10558,0x10558},{0x10559,0x10559}, /* 10558 */ + {0x1055A,0x1055A},{0x1055B,0x1055B}, /* 1055A */ + {0x1055C,0x1055C},{0x1055D,0x1055D}, /* 1055C */ + {0x1055E,0x1055E},{0x1055F,0x1055F}, /* 1055E */ + {0x10560,0x10560},{0x10561,0x10561}, /* 10560 */ + {0x10562,0x10562},{0x10563,0x10563}, /* 10562 */ + {0x10564,0x10564},{0x10565,0x10565}, /* 10564 */ + {0x10566,0x10566},{0x10567,0x10567}, /* 10566 */ + {0x10568,0x10568},{0x10569,0x10569}, /* 10568 */ + {0x1056A,0x1056A},{0x1056B,0x1056B}, /* 1056A */ + {0x1056C,0x1056C},{0x1056D,0x1056D}, /* 1056C */ + {0x1056E,0x1056E},{0x1056F,0x1056F}, /* 1056E */ + {0x10570,0x10597},{0x10571,0x10598}, /* 10570 */ + {0x10572,0x10599},{0x10573,0x1059A}, /* 10572 */ + {0x10574,0x1059B},{0x10575,0x1059C}, /* 10574 */ + {0x10576,0x1059D},{0x10577,0x1059E}, /* 10576 */ + {0x10578,0x1059F},{0x10579,0x105A0}, /* 10578 */ + {0x1057A,0x105A1},{0x1057B,0x1057B}, /* 1057A */ + {0x1057C,0x105A3},{0x1057D,0x105A4}, /* 1057C */ + {0x1057E,0x105A5},{0x1057F,0x105A6}, /* 1057E */ + {0x10580,0x105A7},{0x10581,0x105A8}, /* 10580 */ + {0x10582,0x105A9},{0x10583,0x105AA}, /* 10582 */ + {0x10584,0x105AB},{0x10585,0x105AC}, /* 10584 */ + {0x10586,0x105AD},{0x10587,0x105AE}, /* 10586 */ + {0x10588,0x105AF},{0x10589,0x105B0}, /* 10588 */ + {0x1058A,0x105B1},{0x1058B,0x1058B}, /* 1058A */ + {0x1058C,0x105B3},{0x1058D,0x105B4}, /* 1058C */ + {0x1058E,0x105B5},{0x1058F,0x105B6}, /* 1058E */ + {0x10590,0x105B7},{0x10591,0x105B8}, /* 10590 */ + {0x10592,0x105B9},{0x10593,0x10593}, /* 10592 */ + {0x10594,0x105BB},{0x10595,0x105BC}, /* 10594 */ + {0x10596,0x10596},{0x10570,0x10597}, /* 10596 */ + {0x10571,0x10598},{0x10572,0x10599}, /* 10598 */ + {0x10573,0x1059A},{0x10574,0x1059B}, /* 1059A */ + {0x10575,0x1059C},{0x10576,0x1059D}, /* 1059C */ + {0x10577,0x1059E},{0x10578,0x1059F}, /* 1059E */ + {0x10579,0x105A0},{0x1057A,0x105A1}, /* 105A0 */ + {0x105A2,0x105A2},{0x1057C,0x105A3}, /* 105A2 */ + {0x1057D,0x105A4},{0x1057E,0x105A5}, /* 105A4 */ + {0x1057F,0x105A6},{0x10580,0x105A7}, /* 105A6 */ + {0x10581,0x105A8},{0x10582,0x105A9}, /* 105A8 */ + {0x10583,0x105AA},{0x10584,0x105AB}, /* 105AA */ + {0x10585,0x105AC},{0x10586,0x105AD}, /* 105AC */ + {0x10587,0x105AE},{0x10588,0x105AF}, /* 105AE */ + {0x10589,0x105B0},{0x1058A,0x105B1}, /* 105B0 */ + {0x105B2,0x105B2},{0x1058C,0x105B3}, /* 105B2 */ + {0x1058D,0x105B4},{0x1058E,0x105B5}, /* 105B4 */ + {0x1058F,0x105B6},{0x10590,0x105B7}, /* 105B6 */ + {0x10591,0x105B8},{0x10592,0x105B9}, /* 105B8 */ + {0x105BA,0x105BA},{0x10594,0x105BB}, /* 105BA */ + {0x10595,0x105BC},{0x105BD,0x105BD}, /* 105BC */ + {0x105BE,0x105BE},{0x105BF,0x105BF}, /* 105BE */ + {0x105C0,0x105C0},{0x105C1,0x105C1}, /* 105C0 */ + {0x105C2,0x105C2},{0x105C3,0x105C3}, /* 105C2 */ + {0x105C4,0x105C4},{0x105C5,0x105C5}, /* 105C4 */ + {0x105C6,0x105C6},{0x105C7,0x105C7}, /* 105C6 */ + {0x105C8,0x105C8},{0x105C9,0x105C9}, /* 105C8 */ + {0x105CA,0x105CA},{0x105CB,0x105CB}, /* 105CA */ + {0x105CC,0x105CC},{0x105CD,0x105CD}, /* 105CC */ + {0x105CE,0x105CE},{0x105CF,0x105CF}, /* 105CE */ + {0x105D0,0x105D0},{0x105D1,0x105D1}, /* 105D0 */ + {0x105D2,0x105D2},{0x105D3,0x105D3}, /* 105D2 */ + {0x105D4,0x105D4},{0x105D5,0x105D5}, /* 105D4 */ + {0x105D6,0x105D6},{0x105D7,0x105D7}, /* 105D6 */ + {0x105D8,0x105D8},{0x105D9,0x105D9}, /* 105D8 */ + {0x105DA,0x105DA},{0x105DB,0x105DB}, /* 105DA */ + {0x105DC,0x105DC},{0x105DD,0x105DD}, /* 105DC */ + {0x105DE,0x105DE},{0x105DF,0x105DF}, /* 105DE */ + {0x105E0,0x105E0},{0x105E1,0x105E1}, /* 105E0 */ + {0x105E2,0x105E2},{0x105E3,0x105E3}, /* 105E2 */ + {0x105E4,0x105E4},{0x105E5,0x105E5}, /* 105E4 */ + {0x105E6,0x105E6},{0x105E7,0x105E7}, /* 105E6 */ + {0x105E8,0x105E8},{0x105E9,0x105E9}, /* 105E8 */ + {0x105EA,0x105EA},{0x105EB,0x105EB}, /* 105EA */ + {0x105EC,0x105EC},{0x105ED,0x105ED}, /* 105EC */ + {0x105EE,0x105EE},{0x105EF,0x105EF}, /* 105EE */ + {0x105F0,0x105F0},{0x105F1,0x105F1}, /* 105F0 */ + {0x105F2,0x105F2},{0x105F3,0x105F3}, /* 105F2 */ + {0x105F4,0x105F4},{0x105F5,0x105F5}, /* 105F4 */ + {0x105F6,0x105F6},{0x105F7,0x105F7}, /* 105F6 */ + {0x105F8,0x105F8},{0x105F9,0x105F9}, /* 105F8 */ + {0x105FA,0x105FA},{0x105FB,0x105FB}, /* 105FA */ + {0x105FC,0x105FC},{0x105FD,0x105FD}, /* 105FC */ + {0x105FE,0x105FE},{0x105FF,0x105FF} /* 105FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page10C[256]={ + {0x10C00,0x10C00},{0x10C01,0x10C01}, /* 10C00 */ + {0x10C02,0x10C02},{0x10C03,0x10C03}, /* 10C02 */ + {0x10C04,0x10C04},{0x10C05,0x10C05}, /* 10C04 */ + {0x10C06,0x10C06},{0x10C07,0x10C07}, /* 10C06 */ + {0x10C08,0x10C08},{0x10C09,0x10C09}, /* 10C08 */ + {0x10C0A,0x10C0A},{0x10C0B,0x10C0B}, /* 10C0A */ + {0x10C0C,0x10C0C},{0x10C0D,0x10C0D}, /* 10C0C */ + {0x10C0E,0x10C0E},{0x10C0F,0x10C0F}, /* 10C0E */ + {0x10C10,0x10C10},{0x10C11,0x10C11}, /* 10C10 */ + {0x10C12,0x10C12},{0x10C13,0x10C13}, /* 10C12 */ + {0x10C14,0x10C14},{0x10C15,0x10C15}, /* 10C14 */ + {0x10C16,0x10C16},{0x10C17,0x10C17}, /* 10C16 */ + {0x10C18,0x10C18},{0x10C19,0x10C19}, /* 10C18 */ + {0x10C1A,0x10C1A},{0x10C1B,0x10C1B}, /* 10C1A */ + {0x10C1C,0x10C1C},{0x10C1D,0x10C1D}, /* 10C1C */ + {0x10C1E,0x10C1E},{0x10C1F,0x10C1F}, /* 10C1E */ + {0x10C20,0x10C20},{0x10C21,0x10C21}, /* 10C20 */ + {0x10C22,0x10C22},{0x10C23,0x10C23}, /* 10C22 */ + {0x10C24,0x10C24},{0x10C25,0x10C25}, /* 10C24 */ + {0x10C26,0x10C26},{0x10C27,0x10C27}, /* 10C26 */ + {0x10C28,0x10C28},{0x10C29,0x10C29}, /* 10C28 */ + {0x10C2A,0x10C2A},{0x10C2B,0x10C2B}, /* 10C2A */ + {0x10C2C,0x10C2C},{0x10C2D,0x10C2D}, /* 10C2C */ + {0x10C2E,0x10C2E},{0x10C2F,0x10C2F}, /* 10C2E */ + {0x10C30,0x10C30},{0x10C31,0x10C31}, /* 10C30 */ + {0x10C32,0x10C32},{0x10C33,0x10C33}, /* 10C32 */ + {0x10C34,0x10C34},{0x10C35,0x10C35}, /* 10C34 */ + {0x10C36,0x10C36},{0x10C37,0x10C37}, /* 10C36 */ + {0x10C38,0x10C38},{0x10C39,0x10C39}, /* 10C38 */ + {0x10C3A,0x10C3A},{0x10C3B,0x10C3B}, /* 10C3A */ + {0x10C3C,0x10C3C},{0x10C3D,0x10C3D}, /* 10C3C */ + {0x10C3E,0x10C3E},{0x10C3F,0x10C3F}, /* 10C3E */ + {0x10C40,0x10C40},{0x10C41,0x10C41}, /* 10C40 */ + {0x10C42,0x10C42},{0x10C43,0x10C43}, /* 10C42 */ + {0x10C44,0x10C44},{0x10C45,0x10C45}, /* 10C44 */ + {0x10C46,0x10C46},{0x10C47,0x10C47}, /* 10C46 */ + {0x10C48,0x10C48},{0x10C49,0x10C49}, /* 10C48 */ + {0x10C4A,0x10C4A},{0x10C4B,0x10C4B}, /* 10C4A */ + {0x10C4C,0x10C4C},{0x10C4D,0x10C4D}, /* 10C4C */ + {0x10C4E,0x10C4E},{0x10C4F,0x10C4F}, /* 10C4E */ + {0x10C50,0x10C50},{0x10C51,0x10C51}, /* 10C50 */ + {0x10C52,0x10C52},{0x10C53,0x10C53}, /* 10C52 */ + {0x10C54,0x10C54},{0x10C55,0x10C55}, /* 10C54 */ + {0x10C56,0x10C56},{0x10C57,0x10C57}, /* 10C56 */ + {0x10C58,0x10C58},{0x10C59,0x10C59}, /* 10C58 */ + {0x10C5A,0x10C5A},{0x10C5B,0x10C5B}, /* 10C5A */ + {0x10C5C,0x10C5C},{0x10C5D,0x10C5D}, /* 10C5C */ + {0x10C5E,0x10C5E},{0x10C5F,0x10C5F}, /* 10C5E */ + {0x10C60,0x10C60},{0x10C61,0x10C61}, /* 10C60 */ + {0x10C62,0x10C62},{0x10C63,0x10C63}, /* 10C62 */ + {0x10C64,0x10C64},{0x10C65,0x10C65}, /* 10C64 */ + {0x10C66,0x10C66},{0x10C67,0x10C67}, /* 10C66 */ + {0x10C68,0x10C68},{0x10C69,0x10C69}, /* 10C68 */ + {0x10C6A,0x10C6A},{0x10C6B,0x10C6B}, /* 10C6A */ + {0x10C6C,0x10C6C},{0x10C6D,0x10C6D}, /* 10C6C */ + {0x10C6E,0x10C6E},{0x10C6F,0x10C6F}, /* 10C6E */ + {0x10C70,0x10C70},{0x10C71,0x10C71}, /* 10C70 */ + {0x10C72,0x10C72},{0x10C73,0x10C73}, /* 10C72 */ + {0x10C74,0x10C74},{0x10C75,0x10C75}, /* 10C74 */ + {0x10C76,0x10C76},{0x10C77,0x10C77}, /* 10C76 */ + {0x10C78,0x10C78},{0x10C79,0x10C79}, /* 10C78 */ + {0x10C7A,0x10C7A},{0x10C7B,0x10C7B}, /* 10C7A */ + {0x10C7C,0x10C7C},{0x10C7D,0x10C7D}, /* 10C7C */ + {0x10C7E,0x10C7E},{0x10C7F,0x10C7F}, /* 10C7E */ + {0x10C80,0x10CC0},{0x10C81,0x10CC1}, /* 10C80 */ + {0x10C82,0x10CC2},{0x10C83,0x10CC3}, /* 10C82 */ + {0x10C84,0x10CC4},{0x10C85,0x10CC5}, /* 10C84 */ + {0x10C86,0x10CC6},{0x10C87,0x10CC7}, /* 10C86 */ + {0x10C88,0x10CC8},{0x10C89,0x10CC9}, /* 10C88 */ + {0x10C8A,0x10CCA},{0x10C8B,0x10CCB}, /* 10C8A */ + {0x10C8C,0x10CCC},{0x10C8D,0x10CCD}, /* 10C8C */ + {0x10C8E,0x10CCE},{0x10C8F,0x10CCF}, /* 10C8E */ + {0x10C90,0x10CD0},{0x10C91,0x10CD1}, /* 10C90 */ + {0x10C92,0x10CD2},{0x10C93,0x10CD3}, /* 10C92 */ + {0x10C94,0x10CD4},{0x10C95,0x10CD5}, /* 10C94 */ + {0x10C96,0x10CD6},{0x10C97,0x10CD7}, /* 10C96 */ + {0x10C98,0x10CD8},{0x10C99,0x10CD9}, /* 10C98 */ + {0x10C9A,0x10CDA},{0x10C9B,0x10CDB}, /* 10C9A */ + {0x10C9C,0x10CDC},{0x10C9D,0x10CDD}, /* 10C9C */ + {0x10C9E,0x10CDE},{0x10C9F,0x10CDF}, /* 10C9E */ + {0x10CA0,0x10CE0},{0x10CA1,0x10CE1}, /* 10CA0 */ + {0x10CA2,0x10CE2},{0x10CA3,0x10CE3}, /* 10CA2 */ + {0x10CA4,0x10CE4},{0x10CA5,0x10CE5}, /* 10CA4 */ + {0x10CA6,0x10CE6},{0x10CA7,0x10CE7}, /* 10CA6 */ + {0x10CA8,0x10CE8},{0x10CA9,0x10CE9}, /* 10CA8 */ + {0x10CAA,0x10CEA},{0x10CAB,0x10CEB}, /* 10CAA */ + {0x10CAC,0x10CEC},{0x10CAD,0x10CED}, /* 10CAC */ + {0x10CAE,0x10CEE},{0x10CAF,0x10CEF}, /* 10CAE */ + {0x10CB0,0x10CF0},{0x10CB1,0x10CF1}, /* 10CB0 */ + {0x10CB2,0x10CF2},{0x10CB3,0x10CB3}, /* 10CB2 */ + {0x10CB4,0x10CB4},{0x10CB5,0x10CB5}, /* 10CB4 */ + {0x10CB6,0x10CB6},{0x10CB7,0x10CB7}, /* 10CB6 */ + {0x10CB8,0x10CB8},{0x10CB9,0x10CB9}, /* 10CB8 */ + {0x10CBA,0x10CBA},{0x10CBB,0x10CBB}, /* 10CBA */ + {0x10CBC,0x10CBC},{0x10CBD,0x10CBD}, /* 10CBC */ + {0x10CBE,0x10CBE},{0x10CBF,0x10CBF}, /* 10CBE */ + {0x10C80,0x10CC0},{0x10C81,0x10CC1}, /* 10CC0 */ + {0x10C82,0x10CC2},{0x10C83,0x10CC3}, /* 10CC2 */ + {0x10C84,0x10CC4},{0x10C85,0x10CC5}, /* 10CC4 */ + {0x10C86,0x10CC6},{0x10C87,0x10CC7}, /* 10CC6 */ + {0x10C88,0x10CC8},{0x10C89,0x10CC9}, /* 10CC8 */ + {0x10C8A,0x10CCA},{0x10C8B,0x10CCB}, /* 10CCA */ + {0x10C8C,0x10CCC},{0x10C8D,0x10CCD}, /* 10CCC */ + {0x10C8E,0x10CCE},{0x10C8F,0x10CCF}, /* 10CCE */ + {0x10C90,0x10CD0},{0x10C91,0x10CD1}, /* 10CD0 */ + {0x10C92,0x10CD2},{0x10C93,0x10CD3}, /* 10CD2 */ + {0x10C94,0x10CD4},{0x10C95,0x10CD5}, /* 10CD4 */ + {0x10C96,0x10CD6},{0x10C97,0x10CD7}, /* 10CD6 */ + {0x10C98,0x10CD8},{0x10C99,0x10CD9}, /* 10CD8 */ + {0x10C9A,0x10CDA},{0x10C9B,0x10CDB}, /* 10CDA */ + {0x10C9C,0x10CDC},{0x10C9D,0x10CDD}, /* 10CDC */ + {0x10C9E,0x10CDE},{0x10C9F,0x10CDF}, /* 10CDE */ + {0x10CA0,0x10CE0},{0x10CA1,0x10CE1}, /* 10CE0 */ + {0x10CA2,0x10CE2},{0x10CA3,0x10CE3}, /* 10CE2 */ + {0x10CA4,0x10CE4},{0x10CA5,0x10CE5}, /* 10CE4 */ + {0x10CA6,0x10CE6},{0x10CA7,0x10CE7}, /* 10CE6 */ + {0x10CA8,0x10CE8},{0x10CA9,0x10CE9}, /* 10CE8 */ + {0x10CAA,0x10CEA},{0x10CAB,0x10CEB}, /* 10CEA */ + {0x10CAC,0x10CEC},{0x10CAD,0x10CED}, /* 10CEC */ + {0x10CAE,0x10CEE},{0x10CAF,0x10CEF}, /* 10CEE */ + {0x10CB0,0x10CF0},{0x10CB1,0x10CF1}, /* 10CF0 */ + {0x10CB2,0x10CF2},{0x10CF3,0x10CF3}, /* 10CF2 */ + {0x10CF4,0x10CF4},{0x10CF5,0x10CF5}, /* 10CF4 */ + {0x10CF6,0x10CF6},{0x10CF7,0x10CF7}, /* 10CF6 */ + {0x10CF8,0x10CF8},{0x10CF9,0x10CF9}, /* 10CF8 */ + {0x10CFA,0x10CFA},{0x10CFB,0x10CFB}, /* 10CFA */ + {0x10CFC,0x10CFC},{0x10CFD,0x10CFD}, /* 10CFC */ + {0x10CFE,0x10CFE},{0x10CFF,0x10CFF} /* 10CFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page118[256]={ + {0x11800,0x11800},{0x11801,0x11801}, /* 11800 */ + {0x11802,0x11802},{0x11803,0x11803}, /* 11802 */ + {0x11804,0x11804},{0x11805,0x11805}, /* 11804 */ + {0x11806,0x11806},{0x11807,0x11807}, /* 11806 */ + {0x11808,0x11808},{0x11809,0x11809}, /* 11808 */ + {0x1180A,0x1180A},{0x1180B,0x1180B}, /* 1180A */ + {0x1180C,0x1180C},{0x1180D,0x1180D}, /* 1180C */ + {0x1180E,0x1180E},{0x1180F,0x1180F}, /* 1180E */ + {0x11810,0x11810},{0x11811,0x11811}, /* 11810 */ + {0x11812,0x11812},{0x11813,0x11813}, /* 11812 */ + {0x11814,0x11814},{0x11815,0x11815}, /* 11814 */ + {0x11816,0x11816},{0x11817,0x11817}, /* 11816 */ + {0x11818,0x11818},{0x11819,0x11819}, /* 11818 */ + {0x1181A,0x1181A},{0x1181B,0x1181B}, /* 1181A */ + {0x1181C,0x1181C},{0x1181D,0x1181D}, /* 1181C */ + {0x1181E,0x1181E},{0x1181F,0x1181F}, /* 1181E */ + {0x11820,0x11820},{0x11821,0x11821}, /* 11820 */ + {0x11822,0x11822},{0x11823,0x11823}, /* 11822 */ + {0x11824,0x11824},{0x11825,0x11825}, /* 11824 */ + {0x11826,0x11826},{0x11827,0x11827}, /* 11826 */ + {0x11828,0x11828},{0x11829,0x11829}, /* 11828 */ + {0x1182A,0x1182A},{0x1182B,0x1182B}, /* 1182A */ + {0x1182C,0x1182C},{0x1182D,0x1182D}, /* 1182C */ + {0x1182E,0x1182E},{0x1182F,0x1182F}, /* 1182E */ + {0x11830,0x11830},{0x11831,0x11831}, /* 11830 */ + {0x11832,0x11832},{0x11833,0x11833}, /* 11832 */ + {0x11834,0x11834},{0x11835,0x11835}, /* 11834 */ + {0x11836,0x11836},{0x11837,0x11837}, /* 11836 */ + {0x11838,0x11838},{0x11839,0x11839}, /* 11838 */ + {0x1183A,0x1183A},{0x1183B,0x1183B}, /* 1183A */ + {0x1183C,0x1183C},{0x1183D,0x1183D}, /* 1183C */ + {0x1183E,0x1183E},{0x1183F,0x1183F}, /* 1183E */ + {0x11840,0x11840},{0x11841,0x11841}, /* 11840 */ + {0x11842,0x11842},{0x11843,0x11843}, /* 11842 */ + {0x11844,0x11844},{0x11845,0x11845}, /* 11844 */ + {0x11846,0x11846},{0x11847,0x11847}, /* 11846 */ + {0x11848,0x11848},{0x11849,0x11849}, /* 11848 */ + {0x1184A,0x1184A},{0x1184B,0x1184B}, /* 1184A */ + {0x1184C,0x1184C},{0x1184D,0x1184D}, /* 1184C */ + {0x1184E,0x1184E},{0x1184F,0x1184F}, /* 1184E */ + {0x11850,0x11850},{0x11851,0x11851}, /* 11850 */ + {0x11852,0x11852},{0x11853,0x11853}, /* 11852 */ + {0x11854,0x11854},{0x11855,0x11855}, /* 11854 */ + {0x11856,0x11856},{0x11857,0x11857}, /* 11856 */ + {0x11858,0x11858},{0x11859,0x11859}, /* 11858 */ + {0x1185A,0x1185A},{0x1185B,0x1185B}, /* 1185A */ + {0x1185C,0x1185C},{0x1185D,0x1185D}, /* 1185C */ + {0x1185E,0x1185E},{0x1185F,0x1185F}, /* 1185E */ + {0x11860,0x11860},{0x11861,0x11861}, /* 11860 */ + {0x11862,0x11862},{0x11863,0x11863}, /* 11862 */ + {0x11864,0x11864},{0x11865,0x11865}, /* 11864 */ + {0x11866,0x11866},{0x11867,0x11867}, /* 11866 */ + {0x11868,0x11868},{0x11869,0x11869}, /* 11868 */ + {0x1186A,0x1186A},{0x1186B,0x1186B}, /* 1186A */ + {0x1186C,0x1186C},{0x1186D,0x1186D}, /* 1186C */ + {0x1186E,0x1186E},{0x1186F,0x1186F}, /* 1186E */ + {0x11870,0x11870},{0x11871,0x11871}, /* 11870 */ + {0x11872,0x11872},{0x11873,0x11873}, /* 11872 */ + {0x11874,0x11874},{0x11875,0x11875}, /* 11874 */ + {0x11876,0x11876},{0x11877,0x11877}, /* 11876 */ + {0x11878,0x11878},{0x11879,0x11879}, /* 11878 */ + {0x1187A,0x1187A},{0x1187B,0x1187B}, /* 1187A */ + {0x1187C,0x1187C},{0x1187D,0x1187D}, /* 1187C */ + {0x1187E,0x1187E},{0x1187F,0x1187F}, /* 1187E */ + {0x11880,0x11880},{0x11881,0x11881}, /* 11880 */ + {0x11882,0x11882},{0x11883,0x11883}, /* 11882 */ + {0x11884,0x11884},{0x11885,0x11885}, /* 11884 */ + {0x11886,0x11886},{0x11887,0x11887}, /* 11886 */ + {0x11888,0x11888},{0x11889,0x11889}, /* 11888 */ + {0x1188A,0x1188A},{0x1188B,0x1188B}, /* 1188A */ + {0x1188C,0x1188C},{0x1188D,0x1188D}, /* 1188C */ + {0x1188E,0x1188E},{0x1188F,0x1188F}, /* 1188E */ + {0x11890,0x11890},{0x11891,0x11891}, /* 11890 */ + {0x11892,0x11892},{0x11893,0x11893}, /* 11892 */ + {0x11894,0x11894},{0x11895,0x11895}, /* 11894 */ + {0x11896,0x11896},{0x11897,0x11897}, /* 11896 */ + {0x11898,0x11898},{0x11899,0x11899}, /* 11898 */ + {0x1189A,0x1189A},{0x1189B,0x1189B}, /* 1189A */ + {0x1189C,0x1189C},{0x1189D,0x1189D}, /* 1189C */ + {0x1189E,0x1189E},{0x1189F,0x1189F}, /* 1189E */ + {0x118A0,0x118C0},{0x118A1,0x118C1}, /* 118A0 */ + {0x118A2,0x118C2},{0x118A3,0x118C3}, /* 118A2 */ + {0x118A4,0x118C4},{0x118A5,0x118C5}, /* 118A4 */ + {0x118A6,0x118C6},{0x118A7,0x118C7}, /* 118A6 */ + {0x118A8,0x118C8},{0x118A9,0x118C9}, /* 118A8 */ + {0x118AA,0x118CA},{0x118AB,0x118CB}, /* 118AA */ + {0x118AC,0x118CC},{0x118AD,0x118CD}, /* 118AC */ + {0x118AE,0x118CE},{0x118AF,0x118CF}, /* 118AE */ + {0x118B0,0x118D0},{0x118B1,0x118D1}, /* 118B0 */ + {0x118B2,0x118D2},{0x118B3,0x118D3}, /* 118B2 */ + {0x118B4,0x118D4},{0x118B5,0x118D5}, /* 118B4 */ + {0x118B6,0x118D6},{0x118B7,0x118D7}, /* 118B6 */ + {0x118B8,0x118D8},{0x118B9,0x118D9}, /* 118B8 */ + {0x118BA,0x118DA},{0x118BB,0x118DB}, /* 118BA */ + {0x118BC,0x118DC},{0x118BD,0x118DD}, /* 118BC */ + {0x118BE,0x118DE},{0x118BF,0x118DF}, /* 118BE */ + {0x118A0,0x118C0},{0x118A1,0x118C1}, /* 118C0 */ + {0x118A2,0x118C2},{0x118A3,0x118C3}, /* 118C2 */ + {0x118A4,0x118C4},{0x118A5,0x118C5}, /* 118C4 */ + {0x118A6,0x118C6},{0x118A7,0x118C7}, /* 118C6 */ + {0x118A8,0x118C8},{0x118A9,0x118C9}, /* 118C8 */ + {0x118AA,0x118CA},{0x118AB,0x118CB}, /* 118CA */ + {0x118AC,0x118CC},{0x118AD,0x118CD}, /* 118CC */ + {0x118AE,0x118CE},{0x118AF,0x118CF}, /* 118CE */ + {0x118B0,0x118D0},{0x118B1,0x118D1}, /* 118D0 */ + {0x118B2,0x118D2},{0x118B3,0x118D3}, /* 118D2 */ + {0x118B4,0x118D4},{0x118B5,0x118D5}, /* 118D4 */ + {0x118B6,0x118D6},{0x118B7,0x118D7}, /* 118D6 */ + {0x118B8,0x118D8},{0x118B9,0x118D9}, /* 118D8 */ + {0x118BA,0x118DA},{0x118BB,0x118DB}, /* 118DA */ + {0x118BC,0x118DC},{0x118BD,0x118DD}, /* 118DC */ + {0x118BE,0x118DE},{0x118BF,0x118DF}, /* 118DE */ + {0x118E0,0x118E0},{0x118E1,0x118E1}, /* 118E0 */ + {0x118E2,0x118E2},{0x118E3,0x118E3}, /* 118E2 */ + {0x118E4,0x118E4},{0x118E5,0x118E5}, /* 118E4 */ + {0x118E6,0x118E6},{0x118E7,0x118E7}, /* 118E6 */ + {0x118E8,0x118E8},{0x118E9,0x118E9}, /* 118E8 */ + {0x118EA,0x118EA},{0x118EB,0x118EB}, /* 118EA */ + {0x118EC,0x118EC},{0x118ED,0x118ED}, /* 118EC */ + {0x118EE,0x118EE},{0x118EF,0x118EF}, /* 118EE */ + {0x118F0,0x118F0},{0x118F1,0x118F1}, /* 118F0 */ + {0x118F2,0x118F2},{0x118F3,0x118F3}, /* 118F2 */ + {0x118F4,0x118F4},{0x118F5,0x118F5}, /* 118F4 */ + {0x118F6,0x118F6},{0x118F7,0x118F7}, /* 118F6 */ + {0x118F8,0x118F8},{0x118F9,0x118F9}, /* 118F8 */ + {0x118FA,0x118FA},{0x118FB,0x118FB}, /* 118FA */ + {0x118FC,0x118FC},{0x118FD,0x118FD}, /* 118FC */ + {0x118FE,0x118FE},{0x118FF,0x118FF} /* 118FE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page16E[256]={ + {0x16E00,0x16E00},{0x16E01,0x16E01}, /* 16E00 */ + {0x16E02,0x16E02},{0x16E03,0x16E03}, /* 16E02 */ + {0x16E04,0x16E04},{0x16E05,0x16E05}, /* 16E04 */ + {0x16E06,0x16E06},{0x16E07,0x16E07}, /* 16E06 */ + {0x16E08,0x16E08},{0x16E09,0x16E09}, /* 16E08 */ + {0x16E0A,0x16E0A},{0x16E0B,0x16E0B}, /* 16E0A */ + {0x16E0C,0x16E0C},{0x16E0D,0x16E0D}, /* 16E0C */ + {0x16E0E,0x16E0E},{0x16E0F,0x16E0F}, /* 16E0E */ + {0x16E10,0x16E10},{0x16E11,0x16E11}, /* 16E10 */ + {0x16E12,0x16E12},{0x16E13,0x16E13}, /* 16E12 */ + {0x16E14,0x16E14},{0x16E15,0x16E15}, /* 16E14 */ + {0x16E16,0x16E16},{0x16E17,0x16E17}, /* 16E16 */ + {0x16E18,0x16E18},{0x16E19,0x16E19}, /* 16E18 */ + {0x16E1A,0x16E1A},{0x16E1B,0x16E1B}, /* 16E1A */ + {0x16E1C,0x16E1C},{0x16E1D,0x16E1D}, /* 16E1C */ + {0x16E1E,0x16E1E},{0x16E1F,0x16E1F}, /* 16E1E */ + {0x16E20,0x16E20},{0x16E21,0x16E21}, /* 16E20 */ + {0x16E22,0x16E22},{0x16E23,0x16E23}, /* 16E22 */ + {0x16E24,0x16E24},{0x16E25,0x16E25}, /* 16E24 */ + {0x16E26,0x16E26},{0x16E27,0x16E27}, /* 16E26 */ + {0x16E28,0x16E28},{0x16E29,0x16E29}, /* 16E28 */ + {0x16E2A,0x16E2A},{0x16E2B,0x16E2B}, /* 16E2A */ + {0x16E2C,0x16E2C},{0x16E2D,0x16E2D}, /* 16E2C */ + {0x16E2E,0x16E2E},{0x16E2F,0x16E2F}, /* 16E2E */ + {0x16E30,0x16E30},{0x16E31,0x16E31}, /* 16E30 */ + {0x16E32,0x16E32},{0x16E33,0x16E33}, /* 16E32 */ + {0x16E34,0x16E34},{0x16E35,0x16E35}, /* 16E34 */ + {0x16E36,0x16E36},{0x16E37,0x16E37}, /* 16E36 */ + {0x16E38,0x16E38},{0x16E39,0x16E39}, /* 16E38 */ + {0x16E3A,0x16E3A},{0x16E3B,0x16E3B}, /* 16E3A */ + {0x16E3C,0x16E3C},{0x16E3D,0x16E3D}, /* 16E3C */ + {0x16E3E,0x16E3E},{0x16E3F,0x16E3F}, /* 16E3E */ + {0x16E40,0x16E60},{0x16E41,0x16E61}, /* 16E40 */ + {0x16E42,0x16E62},{0x16E43,0x16E63}, /* 16E42 */ + {0x16E44,0x16E64},{0x16E45,0x16E65}, /* 16E44 */ + {0x16E46,0x16E66},{0x16E47,0x16E67}, /* 16E46 */ + {0x16E48,0x16E68},{0x16E49,0x16E69}, /* 16E48 */ + {0x16E4A,0x16E6A},{0x16E4B,0x16E6B}, /* 16E4A */ + {0x16E4C,0x16E6C},{0x16E4D,0x16E6D}, /* 16E4C */ + {0x16E4E,0x16E6E},{0x16E4F,0x16E6F}, /* 16E4E */ + {0x16E50,0x16E70},{0x16E51,0x16E71}, /* 16E50 */ + {0x16E52,0x16E72},{0x16E53,0x16E73}, /* 16E52 */ + {0x16E54,0x16E74},{0x16E55,0x16E75}, /* 16E54 */ + {0x16E56,0x16E76},{0x16E57,0x16E77}, /* 16E56 */ + {0x16E58,0x16E78},{0x16E59,0x16E79}, /* 16E58 */ + {0x16E5A,0x16E7A},{0x16E5B,0x16E7B}, /* 16E5A */ + {0x16E5C,0x16E7C},{0x16E5D,0x16E7D}, /* 16E5C */ + {0x16E5E,0x16E7E},{0x16E5F,0x16E7F}, /* 16E5E */ + {0x16E40,0x16E60},{0x16E41,0x16E61}, /* 16E60 */ + {0x16E42,0x16E62},{0x16E43,0x16E63}, /* 16E62 */ + {0x16E44,0x16E64},{0x16E45,0x16E65}, /* 16E64 */ + {0x16E46,0x16E66},{0x16E47,0x16E67}, /* 16E66 */ + {0x16E48,0x16E68},{0x16E49,0x16E69}, /* 16E68 */ + {0x16E4A,0x16E6A},{0x16E4B,0x16E6B}, /* 16E6A */ + {0x16E4C,0x16E6C},{0x16E4D,0x16E6D}, /* 16E6C */ + {0x16E4E,0x16E6E},{0x16E4F,0x16E6F}, /* 16E6E */ + {0x16E50,0x16E70},{0x16E51,0x16E71}, /* 16E70 */ + {0x16E52,0x16E72},{0x16E53,0x16E73}, /* 16E72 */ + {0x16E54,0x16E74},{0x16E55,0x16E75}, /* 16E74 */ + {0x16E56,0x16E76},{0x16E57,0x16E77}, /* 16E76 */ + {0x16E58,0x16E78},{0x16E59,0x16E79}, /* 16E78 */ + {0x16E5A,0x16E7A},{0x16E5B,0x16E7B}, /* 16E7A */ + {0x16E5C,0x16E7C},{0x16E5D,0x16E7D}, /* 16E7C */ + {0x16E5E,0x16E7E},{0x16E5F,0x16E7F}, /* 16E7E */ + {0x16E80,0x16E80},{0x16E81,0x16E81}, /* 16E80 */ + {0x16E82,0x16E82},{0x16E83,0x16E83}, /* 16E82 */ + {0x16E84,0x16E84},{0x16E85,0x16E85}, /* 16E84 */ + {0x16E86,0x16E86},{0x16E87,0x16E87}, /* 16E86 */ + {0x16E88,0x16E88},{0x16E89,0x16E89}, /* 16E88 */ + {0x16E8A,0x16E8A},{0x16E8B,0x16E8B}, /* 16E8A */ + {0x16E8C,0x16E8C},{0x16E8D,0x16E8D}, /* 16E8C */ + {0x16E8E,0x16E8E},{0x16E8F,0x16E8F}, /* 16E8E */ + {0x16E90,0x16E90},{0x16E91,0x16E91}, /* 16E90 */ + {0x16E92,0x16E92},{0x16E93,0x16E93}, /* 16E92 */ + {0x16E94,0x16E94},{0x16E95,0x16E95}, /* 16E94 */ + {0x16E96,0x16E96},{0x16E97,0x16E97}, /* 16E96 */ + {0x16E98,0x16E98},{0x16E99,0x16E99}, /* 16E98 */ + {0x16E9A,0x16E9A},{0x16E9B,0x16E9B}, /* 16E9A */ + {0x16E9C,0x16E9C},{0x16E9D,0x16E9D}, /* 16E9C */ + {0x16E9E,0x16E9E},{0x16E9F,0x16E9F}, /* 16E9E */ + {0x16EA0,0x16EA0},{0x16EA1,0x16EA1}, /* 16EA0 */ + {0x16EA2,0x16EA2},{0x16EA3,0x16EA3}, /* 16EA2 */ + {0x16EA4,0x16EA4},{0x16EA5,0x16EA5}, /* 16EA4 */ + {0x16EA6,0x16EA6},{0x16EA7,0x16EA7}, /* 16EA6 */ + {0x16EA8,0x16EA8},{0x16EA9,0x16EA9}, /* 16EA8 */ + {0x16EAA,0x16EAA},{0x16EAB,0x16EAB}, /* 16EAA */ + {0x16EAC,0x16EAC},{0x16EAD,0x16EAD}, /* 16EAC */ + {0x16EAE,0x16EAE},{0x16EAF,0x16EAF}, /* 16EAE */ + {0x16EB0,0x16EB0},{0x16EB1,0x16EB1}, /* 16EB0 */ + {0x16EB2,0x16EB2},{0x16EB3,0x16EB3}, /* 16EB2 */ + {0x16EB4,0x16EB4},{0x16EB5,0x16EB5}, /* 16EB4 */ + {0x16EB6,0x16EB6},{0x16EB7,0x16EB7}, /* 16EB6 */ + {0x16EB8,0x16EB8},{0x16EB9,0x16EB9}, /* 16EB8 */ + {0x16EBA,0x16EBA},{0x16EBB,0x16EBB}, /* 16EBA */ + {0x16EBC,0x16EBC},{0x16EBD,0x16EBD}, /* 16EBC */ + {0x16EBE,0x16EBE},{0x16EBF,0x16EBF}, /* 16EBE */ + {0x16EC0,0x16EC0},{0x16EC1,0x16EC1}, /* 16EC0 */ + {0x16EC2,0x16EC2},{0x16EC3,0x16EC3}, /* 16EC2 */ + {0x16EC4,0x16EC4},{0x16EC5,0x16EC5}, /* 16EC4 */ + {0x16EC6,0x16EC6},{0x16EC7,0x16EC7}, /* 16EC6 */ + {0x16EC8,0x16EC8},{0x16EC9,0x16EC9}, /* 16EC8 */ + {0x16ECA,0x16ECA},{0x16ECB,0x16ECB}, /* 16ECA */ + {0x16ECC,0x16ECC},{0x16ECD,0x16ECD}, /* 16ECC */ + {0x16ECE,0x16ECE},{0x16ECF,0x16ECF}, /* 16ECE */ + {0x16ED0,0x16ED0},{0x16ED1,0x16ED1}, /* 16ED0 */ + {0x16ED2,0x16ED2},{0x16ED3,0x16ED3}, /* 16ED2 */ + {0x16ED4,0x16ED4},{0x16ED5,0x16ED5}, /* 16ED4 */ + {0x16ED6,0x16ED6},{0x16ED7,0x16ED7}, /* 16ED6 */ + {0x16ED8,0x16ED8},{0x16ED9,0x16ED9}, /* 16ED8 */ + {0x16EDA,0x16EDA},{0x16EDB,0x16EDB}, /* 16EDA */ + {0x16EDC,0x16EDC},{0x16EDD,0x16EDD}, /* 16EDC */ + {0x16EDE,0x16EDE},{0x16EDF,0x16EDF}, /* 16EDE */ + {0x16EE0,0x16EE0},{0x16EE1,0x16EE1}, /* 16EE0 */ + {0x16EE2,0x16EE2},{0x16EE3,0x16EE3}, /* 16EE2 */ + {0x16EE4,0x16EE4},{0x16EE5,0x16EE5}, /* 16EE4 */ + {0x16EE6,0x16EE6},{0x16EE7,0x16EE7}, /* 16EE6 */ + {0x16EE8,0x16EE8},{0x16EE9,0x16EE9}, /* 16EE8 */ + {0x16EEA,0x16EEA},{0x16EEB,0x16EEB}, /* 16EEA */ + {0x16EEC,0x16EEC},{0x16EED,0x16EED}, /* 16EEC */ + {0x16EEE,0x16EEE},{0x16EEF,0x16EEF}, /* 16EEE */ + {0x16EF0,0x16EF0},{0x16EF1,0x16EF1}, /* 16EF0 */ + {0x16EF2,0x16EF2},{0x16EF3,0x16EF3}, /* 16EF2 */ + {0x16EF4,0x16EF4},{0x16EF5,0x16EF5}, /* 16EF4 */ + {0x16EF6,0x16EF6},{0x16EF7,0x16EF7}, /* 16EF6 */ + {0x16EF8,0x16EF8},{0x16EF9,0x16EF9}, /* 16EF8 */ + {0x16EFA,0x16EFA},{0x16EFB,0x16EFB}, /* 16EFA */ + {0x16EFC,0x16EFC},{0x16EFD,0x16EFD}, /* 16EFC */ + {0x16EFE,0x16EFE},{0x16EFF,0x16EFF} /* 16EFE */ +}; + +static const MY_CASEFOLD_CHARACTER u1400_casefold_page1E9[256]={ + {0x1E900,0x1E922},{0x1E901,0x1E923}, /* 1E900 */ + {0x1E902,0x1E924},{0x1E903,0x1E925}, /* 1E902 */ + {0x1E904,0x1E926},{0x1E905,0x1E927}, /* 1E904 */ + {0x1E906,0x1E928},{0x1E907,0x1E929}, /* 1E906 */ + {0x1E908,0x1E92A},{0x1E909,0x1E92B}, /* 1E908 */ + {0x1E90A,0x1E92C},{0x1E90B,0x1E92D}, /* 1E90A */ + {0x1E90C,0x1E92E},{0x1E90D,0x1E92F}, /* 1E90C */ + {0x1E90E,0x1E930},{0x1E90F,0x1E931}, /* 1E90E */ + {0x1E910,0x1E932},{0x1E911,0x1E933}, /* 1E910 */ + {0x1E912,0x1E934},{0x1E913,0x1E935}, /* 1E912 */ + {0x1E914,0x1E936},{0x1E915,0x1E937}, /* 1E914 */ + {0x1E916,0x1E938},{0x1E917,0x1E939}, /* 1E916 */ + {0x1E918,0x1E93A},{0x1E919,0x1E93B}, /* 1E918 */ + {0x1E91A,0x1E93C},{0x1E91B,0x1E93D}, /* 1E91A */ + {0x1E91C,0x1E93E},{0x1E91D,0x1E93F}, /* 1E91C */ + {0x1E91E,0x1E940},{0x1E91F,0x1E941}, /* 1E91E */ + {0x1E920,0x1E942},{0x1E921,0x1E943}, /* 1E920 */ + {0x1E900,0x1E922},{0x1E901,0x1E923}, /* 1E922 */ + {0x1E902,0x1E924},{0x1E903,0x1E925}, /* 1E924 */ + {0x1E904,0x1E926},{0x1E905,0x1E927}, /* 1E926 */ + {0x1E906,0x1E928},{0x1E907,0x1E929}, /* 1E928 */ + {0x1E908,0x1E92A},{0x1E909,0x1E92B}, /* 1E92A */ + {0x1E90A,0x1E92C},{0x1E90B,0x1E92D}, /* 1E92C */ + {0x1E90C,0x1E92E},{0x1E90D,0x1E92F}, /* 1E92E */ + {0x1E90E,0x1E930},{0x1E90F,0x1E931}, /* 1E930 */ + {0x1E910,0x1E932},{0x1E911,0x1E933}, /* 1E932 */ + {0x1E912,0x1E934},{0x1E913,0x1E935}, /* 1E934 */ + {0x1E914,0x1E936},{0x1E915,0x1E937}, /* 1E936 */ + {0x1E916,0x1E938},{0x1E917,0x1E939}, /* 1E938 */ + {0x1E918,0x1E93A},{0x1E919,0x1E93B}, /* 1E93A */ + {0x1E91A,0x1E93C},{0x1E91B,0x1E93D}, /* 1E93C */ + {0x1E91C,0x1E93E},{0x1E91D,0x1E93F}, /* 1E93E */ + {0x1E91E,0x1E940},{0x1E91F,0x1E941}, /* 1E940 */ + {0x1E920,0x1E942},{0x1E921,0x1E943}, /* 1E942 */ + {0x1E944,0x1E944},{0x1E945,0x1E945}, /* 1E944 */ + {0x1E946,0x1E946},{0x1E947,0x1E947}, /* 1E946 */ + {0x1E948,0x1E948},{0x1E949,0x1E949}, /* 1E948 */ + {0x1E94A,0x1E94A},{0x1E94B,0x1E94B}, /* 1E94A */ + {0x1E94C,0x1E94C},{0x1E94D,0x1E94D}, /* 1E94C */ + {0x1E94E,0x1E94E},{0x1E94F,0x1E94F}, /* 1E94E */ + {0x1E950,0x1E950},{0x1E951,0x1E951}, /* 1E950 */ + {0x1E952,0x1E952},{0x1E953,0x1E953}, /* 1E952 */ + {0x1E954,0x1E954},{0x1E955,0x1E955}, /* 1E954 */ + {0x1E956,0x1E956},{0x1E957,0x1E957}, /* 1E956 */ + {0x1E958,0x1E958},{0x1E959,0x1E959}, /* 1E958 */ + {0x1E95A,0x1E95A},{0x1E95B,0x1E95B}, /* 1E95A */ + {0x1E95C,0x1E95C},{0x1E95D,0x1E95D}, /* 1E95C */ + {0x1E95E,0x1E95E},{0x1E95F,0x1E95F}, /* 1E95E */ + {0x1E960,0x1E960},{0x1E961,0x1E961}, /* 1E960 */ + {0x1E962,0x1E962},{0x1E963,0x1E963}, /* 1E962 */ + {0x1E964,0x1E964},{0x1E965,0x1E965}, /* 1E964 */ + {0x1E966,0x1E966},{0x1E967,0x1E967}, /* 1E966 */ + {0x1E968,0x1E968},{0x1E969,0x1E969}, /* 1E968 */ + {0x1E96A,0x1E96A},{0x1E96B,0x1E96B}, /* 1E96A */ + {0x1E96C,0x1E96C},{0x1E96D,0x1E96D}, /* 1E96C */ + {0x1E96E,0x1E96E},{0x1E96F,0x1E96F}, /* 1E96E */ + {0x1E970,0x1E970},{0x1E971,0x1E971}, /* 1E970 */ + {0x1E972,0x1E972},{0x1E973,0x1E973}, /* 1E972 */ + {0x1E974,0x1E974},{0x1E975,0x1E975}, /* 1E974 */ + {0x1E976,0x1E976},{0x1E977,0x1E977}, /* 1E976 */ + {0x1E978,0x1E978},{0x1E979,0x1E979}, /* 1E978 */ + {0x1E97A,0x1E97A},{0x1E97B,0x1E97B}, /* 1E97A */ + {0x1E97C,0x1E97C},{0x1E97D,0x1E97D}, /* 1E97C */ + {0x1E97E,0x1E97E},{0x1E97F,0x1E97F}, /* 1E97E */ + {0x1E980,0x1E980},{0x1E981,0x1E981}, /* 1E980 */ + {0x1E982,0x1E982},{0x1E983,0x1E983}, /* 1E982 */ + {0x1E984,0x1E984},{0x1E985,0x1E985}, /* 1E984 */ + {0x1E986,0x1E986},{0x1E987,0x1E987}, /* 1E986 */ + {0x1E988,0x1E988},{0x1E989,0x1E989}, /* 1E988 */ + {0x1E98A,0x1E98A},{0x1E98B,0x1E98B}, /* 1E98A */ + {0x1E98C,0x1E98C},{0x1E98D,0x1E98D}, /* 1E98C */ + {0x1E98E,0x1E98E},{0x1E98F,0x1E98F}, /* 1E98E */ + {0x1E990,0x1E990},{0x1E991,0x1E991}, /* 1E990 */ + {0x1E992,0x1E992},{0x1E993,0x1E993}, /* 1E992 */ + {0x1E994,0x1E994},{0x1E995,0x1E995}, /* 1E994 */ + {0x1E996,0x1E996},{0x1E997,0x1E997}, /* 1E996 */ + {0x1E998,0x1E998},{0x1E999,0x1E999}, /* 1E998 */ + {0x1E99A,0x1E99A},{0x1E99B,0x1E99B}, /* 1E99A */ + {0x1E99C,0x1E99C},{0x1E99D,0x1E99D}, /* 1E99C */ + {0x1E99E,0x1E99E},{0x1E99F,0x1E99F}, /* 1E99E */ + {0x1E9A0,0x1E9A0},{0x1E9A1,0x1E9A1}, /* 1E9A0 */ + {0x1E9A2,0x1E9A2},{0x1E9A3,0x1E9A3}, /* 1E9A2 */ + {0x1E9A4,0x1E9A4},{0x1E9A5,0x1E9A5}, /* 1E9A4 */ + {0x1E9A6,0x1E9A6},{0x1E9A7,0x1E9A7}, /* 1E9A6 */ + {0x1E9A8,0x1E9A8},{0x1E9A9,0x1E9A9}, /* 1E9A8 */ + {0x1E9AA,0x1E9AA},{0x1E9AB,0x1E9AB}, /* 1E9AA */ + {0x1E9AC,0x1E9AC},{0x1E9AD,0x1E9AD}, /* 1E9AC */ + {0x1E9AE,0x1E9AE},{0x1E9AF,0x1E9AF}, /* 1E9AE */ + {0x1E9B0,0x1E9B0},{0x1E9B1,0x1E9B1}, /* 1E9B0 */ + {0x1E9B2,0x1E9B2},{0x1E9B3,0x1E9B3}, /* 1E9B2 */ + {0x1E9B4,0x1E9B4},{0x1E9B5,0x1E9B5}, /* 1E9B4 */ + {0x1E9B6,0x1E9B6},{0x1E9B7,0x1E9B7}, /* 1E9B6 */ + {0x1E9B8,0x1E9B8},{0x1E9B9,0x1E9B9}, /* 1E9B8 */ + {0x1E9BA,0x1E9BA},{0x1E9BB,0x1E9BB}, /* 1E9BA */ + {0x1E9BC,0x1E9BC},{0x1E9BD,0x1E9BD}, /* 1E9BC */ + {0x1E9BE,0x1E9BE},{0x1E9BF,0x1E9BF}, /* 1E9BE */ + {0x1E9C0,0x1E9C0},{0x1E9C1,0x1E9C1}, /* 1E9C0 */ + {0x1E9C2,0x1E9C2},{0x1E9C3,0x1E9C3}, /* 1E9C2 */ + {0x1E9C4,0x1E9C4},{0x1E9C5,0x1E9C5}, /* 1E9C4 */ + {0x1E9C6,0x1E9C6},{0x1E9C7,0x1E9C7}, /* 1E9C6 */ + {0x1E9C8,0x1E9C8},{0x1E9C9,0x1E9C9}, /* 1E9C8 */ + {0x1E9CA,0x1E9CA},{0x1E9CB,0x1E9CB}, /* 1E9CA */ + {0x1E9CC,0x1E9CC},{0x1E9CD,0x1E9CD}, /* 1E9CC */ + {0x1E9CE,0x1E9CE},{0x1E9CF,0x1E9CF}, /* 1E9CE */ + {0x1E9D0,0x1E9D0},{0x1E9D1,0x1E9D1}, /* 1E9D0 */ + {0x1E9D2,0x1E9D2},{0x1E9D3,0x1E9D3}, /* 1E9D2 */ + {0x1E9D4,0x1E9D4},{0x1E9D5,0x1E9D5}, /* 1E9D4 */ + {0x1E9D6,0x1E9D6},{0x1E9D7,0x1E9D7}, /* 1E9D6 */ + {0x1E9D8,0x1E9D8},{0x1E9D9,0x1E9D9}, /* 1E9D8 */ + {0x1E9DA,0x1E9DA},{0x1E9DB,0x1E9DB}, /* 1E9DA */ + {0x1E9DC,0x1E9DC},{0x1E9DD,0x1E9DD}, /* 1E9DC */ + {0x1E9DE,0x1E9DE},{0x1E9DF,0x1E9DF}, /* 1E9DE */ + {0x1E9E0,0x1E9E0},{0x1E9E1,0x1E9E1}, /* 1E9E0 */ + {0x1E9E2,0x1E9E2},{0x1E9E3,0x1E9E3}, /* 1E9E2 */ + {0x1E9E4,0x1E9E4},{0x1E9E5,0x1E9E5}, /* 1E9E4 */ + {0x1E9E6,0x1E9E6},{0x1E9E7,0x1E9E7}, /* 1E9E6 */ + {0x1E9E8,0x1E9E8},{0x1E9E9,0x1E9E9}, /* 1E9E8 */ + {0x1E9EA,0x1E9EA},{0x1E9EB,0x1E9EB}, /* 1E9EA */ + {0x1E9EC,0x1E9EC},{0x1E9ED,0x1E9ED}, /* 1E9EC */ + {0x1E9EE,0x1E9EE},{0x1E9EF,0x1E9EF}, /* 1E9EE */ + {0x1E9F0,0x1E9F0},{0x1E9F1,0x1E9F1}, /* 1E9F0 */ + {0x1E9F2,0x1E9F2},{0x1E9F3,0x1E9F3}, /* 1E9F2 */ + {0x1E9F4,0x1E9F4},{0x1E9F5,0x1E9F5}, /* 1E9F4 */ + {0x1E9F6,0x1E9F6},{0x1E9F7,0x1E9F7}, /* 1E9F6 */ + {0x1E9F8,0x1E9F8},{0x1E9F9,0x1E9F9}, /* 1E9F8 */ + {0x1E9FA,0x1E9FA},{0x1E9FB,0x1E9FB}, /* 1E9FA */ + {0x1E9FC,0x1E9FC},{0x1E9FD,0x1E9FD}, /* 1E9FC */ + {0x1E9FE,0x1E9FE},{0x1E9FF,0x1E9FF} /* 1E9FE */ +}; + +const MY_CASEFOLD_CHARACTER * my_u1400_casefold_index[4352]={ + u1400_casefold_page00, u1400_casefold_page01, u1400_casefold_page02, u1400_casefold_page03, u1400_casefold_page04, u1400_casefold_page05, u1400_casefold_page06, u1400_casefold_page07, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u1400_casefold_page10, NULL, NULL, u1400_casefold_page13, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page1C, u1400_casefold_page1D, u1400_casefold_page1E, u1400_casefold_page1F, + NULL, u1400_casefold_page21, NULL, NULL, u1400_casefold_page24, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page2C, u1400_casefold_page2D, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageA6, u1400_casefold_pageA7, + NULL, NULL, NULL, u1400_casefold_pageAB, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageFF, + NULL, NULL, NULL, NULL, u1400_casefold_page104, u1400_casefold_page105, NULL, NULL, + NULL, NULL, NULL, NULL, u1400_casefold_page10C, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u1400_casefold_page118, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_page16E, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u1400_casefold_page1E9, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; diff --git a/strings/ctype-unicode300-casefold-tr.h b/strings/ctype-unicode300-casefold-tr.h new file mode 100644 index 00000000000..ff428112382 --- /dev/null +++ b/strings/ctype-unicode300-casefold-tr.h @@ -0,0 +1,193 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=casefold-tr \ + --page-name=u300tr_casefold_page \ + --page-name-derived=u300_casefold_page \ + --index-name=my_u300tr_casefold_index \ + --max-char=0xFFFF \ + UnicodeData-3.0.0.txt + +*/ +const MY_CASEFOLD_CHARACTER u300tr_casefold_page00[256]={ + {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */ + {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */ + {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */ + {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */ + {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */ + {0x000A,0x000A},{0x000B,0x000B}, /* 000A */ + {0x000C,0x000C},{0x000D,0x000D}, /* 000C */ + {0x000E,0x000E},{0x000F,0x000F}, /* 000E */ + {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */ + {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */ + {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */ + {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */ + {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */ + {0x001A,0x001A},{0x001B,0x001B}, /* 001A */ + {0x001C,0x001C},{0x001D,0x001D}, /* 001C */ + {0x001E,0x001E},{0x001F,0x001F}, /* 001E */ + {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */ + {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */ + {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */ + {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */ + {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */ + {0x002A,0x002A},{0x002B,0x002B}, /* 002A */ + {0x002C,0x002C},{0x002D,0x002D}, /* 002C */ + {0x002E,0x002E},{0x002F,0x002F}, /* 002E */ + {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */ + {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */ + {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */ + {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */ + {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */ + {0x003A,0x003A},{0x003B,0x003B}, /* 003A */ + {0x003C,0x003C},{0x003D,0x003D}, /* 003C */ + {0x003E,0x003E},{0x003F,0x003F}, /* 003E */ + {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */ + {0x0048,0x0068},{0x0049,0x0131}, /* 0048 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 004A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 004C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 004E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */ + {0x005A,0x007A},{0x005B,0x005B}, /* 005A */ + {0x005C,0x005C},{0x005D,0x005D}, /* 005C */ + {0x005E,0x005E},{0x005F,0x005F}, /* 005E */ + {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */ + {0x0048,0x0068},{0x0130,0x0069}, /* 0068 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 006A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 006C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 006E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */ + {0x005A,0x007A},{0x007B,0x007B}, /* 007A */ + {0x007C,0x007C},{0x007D,0x007D}, /* 007C */ + {0x007E,0x007E},{0x007F,0x007F}, /* 007E */ + {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */ + {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */ + {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */ + {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */ + {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */ + {0x008A,0x008A},{0x008B,0x008B}, /* 008A */ + {0x008C,0x008C},{0x008D,0x008D}, /* 008C */ + {0x008E,0x008E},{0x008F,0x008F}, /* 008E */ + {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */ + {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */ + {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */ + {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */ + {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */ + {0x009A,0x009A},{0x009B,0x009B}, /* 009A */ + {0x009C,0x009C},{0x009D,0x009D}, /* 009C */ + {0x009E,0x009E},{0x009F,0x009F}, /* 009E */ + {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */ + {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */ + {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */ + {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */ + {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */ + {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */ + {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */ + {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */ + {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */ + {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */ + {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */ + {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */ + {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */ + {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */ + {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */ + {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */ + {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */ + {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */ + {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */ + {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */ +}; + +const MY_CASEFOLD_CHARACTER * my_u300tr_casefold_index[256]={ + u300tr_casefold_page00, u300_casefold_page01, u300_casefold_page02, u300_casefold_page03, u300_casefold_page04, u300_casefold_page05, u300_casefold_page06, u300_casefold_page07, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_page1E, u300_casefold_page1F, + NULL, u300_casefold_page21, NULL, NULL, u300_casefold_page24, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_pageFF +}; diff --git a/strings/ctype-unicode300-casefold.h b/strings/ctype-unicode300-casefold.h new file mode 100644 index 00000000000..353cba0846a --- /dev/null +++ b/strings/ctype-unicode300-casefold.h @@ -0,0 +1,1764 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=casefold \ + --page-name=u300_casefold_page \ + --index-name=my_u300_casefold_index \ + --max-char=0xFFFF \ + UnicodeData-3.0.0.txt + +*/ +const MY_CASEFOLD_CHARACTER u300_casefold_page00[256]={ + {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */ + {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */ + {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */ + {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */ + {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */ + {0x000A,0x000A},{0x000B,0x000B}, /* 000A */ + {0x000C,0x000C},{0x000D,0x000D}, /* 000C */ + {0x000E,0x000E},{0x000F,0x000F}, /* 000E */ + {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */ + {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */ + {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */ + {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */ + {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */ + {0x001A,0x001A},{0x001B,0x001B}, /* 001A */ + {0x001C,0x001C},{0x001D,0x001D}, /* 001C */ + {0x001E,0x001E},{0x001F,0x001F}, /* 001E */ + {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */ + {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */ + {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */ + {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */ + {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */ + {0x002A,0x002A},{0x002B,0x002B}, /* 002A */ + {0x002C,0x002C},{0x002D,0x002D}, /* 002C */ + {0x002E,0x002E},{0x002F,0x002F}, /* 002E */ + {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */ + {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */ + {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */ + {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */ + {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */ + {0x003A,0x003A},{0x003B,0x003B}, /* 003A */ + {0x003C,0x003C},{0x003D,0x003D}, /* 003C */ + {0x003E,0x003E},{0x003F,0x003F}, /* 003E */ + {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 004A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 004C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 004E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */ + {0x005A,0x007A},{0x005B,0x005B}, /* 005A */ + {0x005C,0x005C},{0x005D,0x005D}, /* 005C */ + {0x005E,0x005E},{0x005F,0x005F}, /* 005E */ + {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 006A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 006C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 006E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */ + {0x005A,0x007A},{0x007B,0x007B}, /* 007A */ + {0x007C,0x007C},{0x007D,0x007D}, /* 007C */ + {0x007E,0x007E},{0x007F,0x007F}, /* 007E */ + {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */ + {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */ + {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */ + {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */ + {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */ + {0x008A,0x008A},{0x008B,0x008B}, /* 008A */ + {0x008C,0x008C},{0x008D,0x008D}, /* 008C */ + {0x008E,0x008E},{0x008F,0x008F}, /* 008E */ + {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */ + {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */ + {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */ + {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */ + {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */ + {0x009A,0x009A},{0x009B,0x009B}, /* 009A */ + {0x009C,0x009C},{0x009D,0x009D}, /* 009C */ + {0x009E,0x009E},{0x009F,0x009F}, /* 009E */ + {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */ + {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */ + {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */ + {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */ + {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */ + {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */ + {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */ + {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */ + {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */ + {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */ + {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */ + {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */ + {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */ + {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */ + {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */ + {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */ + {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */ + {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */ + {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */ + {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page01[256]={ + {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */ + {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */ + {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */ + {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */ + {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */ + {0x010A,0x010B},{0x010A,0x010B}, /* 010A */ + {0x010C,0x010D},{0x010C,0x010D}, /* 010C */ + {0x010E,0x010F},{0x010E,0x010F}, /* 010E */ + {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */ + {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */ + {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */ + {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */ + {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */ + {0x011A,0x011B},{0x011A,0x011B}, /* 011A */ + {0x011C,0x011D},{0x011C,0x011D}, /* 011C */ + {0x011E,0x011F},{0x011E,0x011F}, /* 011E */ + {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */ + {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */ + {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */ + {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */ + {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */ + {0x012A,0x012B},{0x012A,0x012B}, /* 012A */ + {0x012C,0x012D},{0x012C,0x012D}, /* 012C */ + {0x012E,0x012F},{0x012E,0x012F}, /* 012E */ + {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */ + {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */ + {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */ + {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */ + {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */ + {0x0139,0x013A},{0x013B,0x013C}, /* 013A */ + {0x013B,0x013C},{0x013D,0x013E}, /* 013C */ + {0x013D,0x013E},{0x013F,0x0140}, /* 013E */ + {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */ + {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */ + {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */ + {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */ + {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */ + {0x014A,0x014B},{0x014A,0x014B}, /* 014A */ + {0x014C,0x014D},{0x014C,0x014D}, /* 014C */ + {0x014E,0x014F},{0x014E,0x014F}, /* 014E */ + {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */ + {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */ + {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */ + {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */ + {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */ + {0x015A,0x015B},{0x015A,0x015B}, /* 015A */ + {0x015C,0x015D},{0x015C,0x015D}, /* 015C */ + {0x015E,0x015F},{0x015E,0x015F}, /* 015E */ + {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */ + {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */ + {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */ + {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */ + {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */ + {0x016A,0x016B},{0x016A,0x016B}, /* 016A */ + {0x016C,0x016D},{0x016C,0x016D}, /* 016C */ + {0x016E,0x016F},{0x016E,0x016F}, /* 016E */ + {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */ + {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */ + {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */ + {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */ + {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */ + {0x0179,0x017A},{0x017B,0x017C}, /* 017A */ + {0x017B,0x017C},{0x017D,0x017E}, /* 017C */ + {0x017D,0x017E},{0x0053,0x017F}, /* 017E */ + {0x0180,0x0180},{0x0181,0x0253}, /* 0180 */ + {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */ + {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */ + {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */ + {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */ + {0x018A,0x0257},{0x018B,0x018C}, /* 018A */ + {0x018B,0x018C},{0x018D,0x018D}, /* 018C */ + {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */ + {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */ + {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */ + {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */ + {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */ + {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */ + {0x019A,0x019A},{0x019B,0x019B}, /* 019A */ + {0x019C,0x026F},{0x019D,0x0272}, /* 019C */ + {0x019E,0x019E},{0x019F,0x0275}, /* 019E */ + {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */ + {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */ + {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */ + {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */ + {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */ + {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */ + {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */ + {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */ + {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */ + {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */ + {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */ + {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */ + {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */ + {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */ + {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */ + {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */ + {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */ + {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */ + {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */ + {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */ + {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */ + {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */ + {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */ + {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */ + {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */ + {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */ + {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */ + {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */ + {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */ + {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */ + {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */ + {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */ + {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */ + {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */ + {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */ + {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */ + {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */ + {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */ + {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */ + {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */ + {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */ + {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */ + {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */ + {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */ + {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */ + {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */ + {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */ + {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page02[256]={ + {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */ + {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */ + {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */ + {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */ + {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */ + {0x020A,0x020B},{0x020A,0x020B}, /* 020A */ + {0x020C,0x020D},{0x020C,0x020D}, /* 020C */ + {0x020E,0x020F},{0x020E,0x020F}, /* 020E */ + {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */ + {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */ + {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */ + {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */ + {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */ + {0x021A,0x021B},{0x021A,0x021B}, /* 021A */ + {0x021C,0x021D},{0x021C,0x021D}, /* 021C */ + {0x021E,0x021F},{0x021E,0x021F}, /* 021E */ + {0x0220,0x0220},{0x0221,0x0221}, /* 0220 */ + {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */ + {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */ + {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */ + {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */ + {0x022A,0x022B},{0x022A,0x022B}, /* 022A */ + {0x022C,0x022D},{0x022C,0x022D}, /* 022C */ + {0x022E,0x022F},{0x022E,0x022F}, /* 022E */ + {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */ + {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */ + {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */ + {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */ + {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */ + {0x023A,0x023A},{0x023B,0x023B}, /* 023A */ + {0x023C,0x023C},{0x023D,0x023D}, /* 023C */ + {0x023E,0x023E},{0x023F,0x023F}, /* 023E */ + {0x0240,0x0240},{0x0241,0x0241}, /* 0240 */ + {0x0242,0x0242},{0x0243,0x0243}, /* 0242 */ + {0x0244,0x0244},{0x0245,0x0245}, /* 0244 */ + {0x0246,0x0246},{0x0247,0x0247}, /* 0246 */ + {0x0248,0x0248},{0x0249,0x0249}, /* 0248 */ + {0x024A,0x024A},{0x024B,0x024B}, /* 024A */ + {0x024C,0x024C},{0x024D,0x024D}, /* 024C */ + {0x024E,0x024E},{0x024F,0x024F}, /* 024E */ + {0x0250,0x0250},{0x0251,0x0251}, /* 0250 */ + {0x0252,0x0252},{0x0181,0x0253}, /* 0252 */ + {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */ + {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */ + {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */ + {0x025A,0x025A},{0x0190,0x025B}, /* 025A */ + {0x025C,0x025C},{0x025D,0x025D}, /* 025C */ + {0x025E,0x025E},{0x025F,0x025F}, /* 025E */ + {0x0193,0x0260},{0x0261,0x0261}, /* 0260 */ + {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */ + {0x0264,0x0264},{0x0265,0x0265}, /* 0264 */ + {0x0266,0x0266},{0x0267,0x0267}, /* 0266 */ + {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */ + {0x026A,0x026A},{0x026B,0x026B}, /* 026A */ + {0x026C,0x026C},{0x026D,0x026D}, /* 026C */ + {0x026E,0x026E},{0x019C,0x026F}, /* 026E */ + {0x0270,0x0270},{0x0271,0x0271}, /* 0270 */ + {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */ + {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */ + {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */ + {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */ + {0x027A,0x027A},{0x027B,0x027B}, /* 027A */ + {0x027C,0x027C},{0x027D,0x027D}, /* 027C */ + {0x027E,0x027E},{0x027F,0x027F}, /* 027E */ + {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */ + {0x0282,0x0282},{0x01A9,0x0283}, /* 0282 */ + {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */ + {0x0286,0x0286},{0x0287,0x0287}, /* 0286 */ + {0x01AE,0x0288},{0x0289,0x0289}, /* 0288 */ + {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */ + {0x028C,0x028C},{0x028D,0x028D}, /* 028C */ + {0x028E,0x028E},{0x028F,0x028F}, /* 028E */ + {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */ + {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */ + {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */ + {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */ + {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */ + {0x029A,0x029A},{0x029B,0x029B}, /* 029A */ + {0x029C,0x029C},{0x029D,0x029D}, /* 029C */ + {0x029E,0x029E},{0x029F,0x029F}, /* 029E */ + {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */ + {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */ + {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */ + {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */ + {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */ + {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */ + {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */ + {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */ + {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */ + {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */ + {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */ + {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */ + {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */ + {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */ + {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */ + {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */ + {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */ + {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */ + {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */ + {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */ + {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */ + {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */ + {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */ + {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */ + {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */ + {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */ + {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */ + {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */ + {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */ + {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */ + {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */ + {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */ + {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */ + {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */ + {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */ + {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */ + {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */ + {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */ + {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */ + {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */ + {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */ + {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */ + {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */ + {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */ + {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */ + {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */ + {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */ + {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page03[256]={ + {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */ + {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */ + {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */ + {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */ + {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */ + {0x030A,0x030A},{0x030B,0x030B}, /* 030A */ + {0x030C,0x030C},{0x030D,0x030D}, /* 030C */ + {0x030E,0x030E},{0x030F,0x030F}, /* 030E */ + {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */ + {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */ + {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */ + {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */ + {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */ + {0x031A,0x031A},{0x031B,0x031B}, /* 031A */ + {0x031C,0x031C},{0x031D,0x031D}, /* 031C */ + {0x031E,0x031E},{0x031F,0x031F}, /* 031E */ + {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */ + {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */ + {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */ + {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */ + {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */ + {0x032A,0x032A},{0x032B,0x032B}, /* 032A */ + {0x032C,0x032C},{0x032D,0x032D}, /* 032C */ + {0x032E,0x032E},{0x032F,0x032F}, /* 032E */ + {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */ + {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */ + {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */ + {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */ + {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */ + {0x033A,0x033A},{0x033B,0x033B}, /* 033A */ + {0x033C,0x033C},{0x033D,0x033D}, /* 033C */ + {0x033E,0x033E},{0x033F,0x033F}, /* 033E */ + {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */ + {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */ + {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */ + {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */ + {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */ + {0x034A,0x034A},{0x034B,0x034B}, /* 034A */ + {0x034C,0x034C},{0x034D,0x034D}, /* 034C */ + {0x034E,0x034E},{0x034F,0x034F}, /* 034E */ + {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */ + {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */ + {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */ + {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */ + {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */ + {0x035A,0x035A},{0x035B,0x035B}, /* 035A */ + {0x035C,0x035C},{0x035D,0x035D}, /* 035C */ + {0x035E,0x035E},{0x035F,0x035F}, /* 035E */ + {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */ + {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */ + {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */ + {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */ + {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */ + {0x036A,0x036A},{0x036B,0x036B}, /* 036A */ + {0x036C,0x036C},{0x036D,0x036D}, /* 036C */ + {0x036E,0x036E},{0x036F,0x036F}, /* 036E */ + {0x0370,0x0370},{0x0371,0x0371}, /* 0370 */ + {0x0372,0x0372},{0x0373,0x0373}, /* 0372 */ + {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */ + {0x0376,0x0376},{0x0377,0x0377}, /* 0376 */ + {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */ + {0x037A,0x037A},{0x037B,0x037B}, /* 037A */ + {0x037C,0x037C},{0x037D,0x037D}, /* 037C */ + {0x037E,0x037E},{0x037F,0x037F}, /* 037E */ + {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */ + {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */ + {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */ + {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */ + {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */ + {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */ + {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */ + {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */ + {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */ + {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */ + {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */ + {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */ + {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */ + {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */ + {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */ + {0x038F,0x03CE},{0x03CF,0x03CF}, /* 03CE */ + {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */ + {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */ + {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */ + {0x03A0,0x03D6},{0x03D7,0x03D7}, /* 03D6 */ + {0x03D8,0x03D8},{0x03D9,0x03D9}, /* 03D8 */ + {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */ + {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */ + {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */ + {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */ + {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */ + {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */ + {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */ + {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */ + {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */ + {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */ + {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */ + {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */ + {0x03A3,0x03F2},{0x03F3,0x03F3}, /* 03F2 */ + {0x03F4,0x03F4},{0x03F5,0x03F5}, /* 03F4 */ + {0x03F6,0x03F6},{0x03F7,0x03F7}, /* 03F6 */ + {0x03F8,0x03F8},{0x03F9,0x03F9}, /* 03F8 */ + {0x03FA,0x03FA},{0x03FB,0x03FB}, /* 03FA */ + {0x03FC,0x03FC},{0x03FD,0x03FD}, /* 03FC */ + {0x03FE,0x03FE},{0x03FF,0x03FF} /* 03FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page04[256]={ + {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 040A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 040C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 040E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 041A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 041C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 041E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 042A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 042C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 042E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 043A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 043C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 043E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 044A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 044C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 044E */ + {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 045A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 045C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 045E */ + {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */ + {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */ + {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */ + {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */ + {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */ + {0x046A,0x046B},{0x046A,0x046B}, /* 046A */ + {0x046C,0x046D},{0x046C,0x046D}, /* 046C */ + {0x046E,0x046F},{0x046E,0x046F}, /* 046E */ + {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */ + {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */ + {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */ + {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */ + {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */ + {0x047A,0x047B},{0x047A,0x047B}, /* 047A */ + {0x047C,0x047D},{0x047C,0x047D}, /* 047C */ + {0x047E,0x047F},{0x047E,0x047F}, /* 047E */ + {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */ + {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */ + {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */ + {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */ + {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */ + {0x048A,0x048A},{0x048B,0x048B}, /* 048A */ + {0x048C,0x048D},{0x048C,0x048D}, /* 048C */ + {0x048E,0x048F},{0x048E,0x048F}, /* 048E */ + {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */ + {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */ + {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */ + {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */ + {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */ + {0x049A,0x049B},{0x049A,0x049B}, /* 049A */ + {0x049C,0x049D},{0x049C,0x049D}, /* 049C */ + {0x049E,0x049F},{0x049E,0x049F}, /* 049E */ + {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */ + {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */ + {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */ + {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */ + {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */ + {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */ + {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */ + {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */ + {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */ + {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */ + {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */ + {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */ + {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */ + {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */ + {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */ + {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */ + {0x04C0,0x04C0},{0x04C1,0x04C2}, /* 04C0 */ + {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */ + {0x04C3,0x04C4},{0x04C5,0x04C5}, /* 04C4 */ + {0x04C6,0x04C6},{0x04C7,0x04C8}, /* 04C6 */ + {0x04C7,0x04C8},{0x04C9,0x04C9}, /* 04C8 */ + {0x04CA,0x04CA},{0x04CB,0x04CC}, /* 04CA */ + {0x04CB,0x04CC},{0x04CD,0x04CD}, /* 04CC */ + {0x04CE,0x04CE},{0x04CF,0x04CF}, /* 04CE */ + {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */ + {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */ + {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */ + {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */ + {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */ + {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */ + {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */ + {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */ + {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */ + {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */ + {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */ + {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */ + {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */ + {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */ + {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */ + {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */ + {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */ + {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */ + {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */ + {0x04F6,0x04F6},{0x04F7,0x04F7}, /* 04F6 */ + {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */ + {0x04FA,0x04FA},{0x04FB,0x04FB}, /* 04FA */ + {0x04FC,0x04FC},{0x04FD,0x04FD}, /* 04FC */ + {0x04FE,0x04FE},{0x04FF,0x04FF} /* 04FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page05[256]={ + {0x0500,0x0500},{0x0501,0x0501}, /* 0500 */ + {0x0502,0x0502},{0x0503,0x0503}, /* 0502 */ + {0x0504,0x0504},{0x0505,0x0505}, /* 0504 */ + {0x0506,0x0506},{0x0507,0x0507}, /* 0506 */ + {0x0508,0x0508},{0x0509,0x0509}, /* 0508 */ + {0x050A,0x050A},{0x050B,0x050B}, /* 050A */ + {0x050C,0x050C},{0x050D,0x050D}, /* 050C */ + {0x050E,0x050E},{0x050F,0x050F}, /* 050E */ + {0x0510,0x0510},{0x0511,0x0511}, /* 0510 */ + {0x0512,0x0512},{0x0513,0x0513}, /* 0512 */ + {0x0514,0x0514},{0x0515,0x0515}, /* 0514 */ + {0x0516,0x0516},{0x0517,0x0517}, /* 0516 */ + {0x0518,0x0518},{0x0519,0x0519}, /* 0518 */ + {0x051A,0x051A},{0x051B,0x051B}, /* 051A */ + {0x051C,0x051C},{0x051D,0x051D}, /* 051C */ + {0x051E,0x051E},{0x051F,0x051F}, /* 051E */ + {0x0520,0x0520},{0x0521,0x0521}, /* 0520 */ + {0x0522,0x0522},{0x0523,0x0523}, /* 0522 */ + {0x0524,0x0524},{0x0525,0x0525}, /* 0524 */ + {0x0526,0x0526},{0x0527,0x0527}, /* 0526 */ + {0x0528,0x0528},{0x0529,0x0529}, /* 0528 */ + {0x052A,0x052A},{0x052B,0x052B}, /* 052A */ + {0x052C,0x052C},{0x052D,0x052D}, /* 052C */ + {0x052E,0x052E},{0x052F,0x052F}, /* 052E */ + {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 053A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 053C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 053E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 054A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 054C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 054E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */ + {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */ + {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */ + {0x055A,0x055A},{0x055B,0x055B}, /* 055A */ + {0x055C,0x055C},{0x055D,0x055D}, /* 055C */ + {0x055E,0x055E},{0x055F,0x055F}, /* 055E */ + {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 056A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 056C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 056E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 057A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 057C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 057E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */ + {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */ + {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */ + {0x058A,0x058A},{0x058B,0x058B}, /* 058A */ + {0x058C,0x058C},{0x058D,0x058D}, /* 058C */ + {0x058E,0x058E},{0x058F,0x058F}, /* 058E */ + {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */ + {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */ + {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */ + {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */ + {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */ + {0x059A,0x059A},{0x059B,0x059B}, /* 059A */ + {0x059C,0x059C},{0x059D,0x059D}, /* 059C */ + {0x059E,0x059E},{0x059F,0x059F}, /* 059E */ + {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */ + {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */ + {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */ + {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */ + {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */ + {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */ + {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */ + {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */ + {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */ + {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */ + {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */ + {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */ + {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */ + {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */ + {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */ + {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */ + {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */ + {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */ + {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */ + {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */ + {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */ + {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */ + {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */ + {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */ + {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */ + {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */ + {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */ + {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */ + {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */ + {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */ + {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */ + {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */ + {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */ + {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */ + {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */ + {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */ + {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */ + {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */ + {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */ + {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */ + {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */ + {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */ + {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */ + {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */ + {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */ + {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */ + {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */ + {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page06[256]={ /* This page is dummy */ + {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */ + {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */ + {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */ + {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */ + {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */ + {0x060A,0x060A},{0x060B,0x060B}, /* 060A */ + {0x060C,0x060C},{0x060D,0x060D}, /* 060C */ + {0x060E,0x060E},{0x060F,0x060F}, /* 060E */ + {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */ + {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */ + {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */ + {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */ + {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */ + {0x061A,0x061A},{0x061B,0x061B}, /* 061A */ + {0x061C,0x061C},{0x061D,0x061D}, /* 061C */ + {0x061E,0x061E},{0x061F,0x061F}, /* 061E */ + {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */ + {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */ + {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */ + {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */ + {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */ + {0x062A,0x062A},{0x062B,0x062B}, /* 062A */ + {0x062C,0x062C},{0x062D,0x062D}, /* 062C */ + {0x062E,0x062E},{0x062F,0x062F}, /* 062E */ + {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */ + {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */ + {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */ + {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */ + {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */ + {0x063A,0x063A},{0x063B,0x063B}, /* 063A */ + {0x063C,0x063C},{0x063D,0x063D}, /* 063C */ + {0x063E,0x063E},{0x063F,0x063F}, /* 063E */ + {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */ + {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */ + {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */ + {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */ + {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */ + {0x064A,0x064A},{0x064B,0x064B}, /* 064A */ + {0x064C,0x064C},{0x064D,0x064D}, /* 064C */ + {0x064E,0x064E},{0x064F,0x064F}, /* 064E */ + {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */ + {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */ + {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */ + {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */ + {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */ + {0x065A,0x065A},{0x065B,0x065B}, /* 065A */ + {0x065C,0x065C},{0x065D,0x065D}, /* 065C */ + {0x065E,0x065E},{0x065F,0x065F}, /* 065E */ + {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */ + {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */ + {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */ + {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */ + {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */ + {0x066A,0x066A},{0x066B,0x066B}, /* 066A */ + {0x066C,0x066C},{0x066D,0x066D}, /* 066C */ + {0x066E,0x066E},{0x066F,0x066F}, /* 066E */ + {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */ + {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */ + {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */ + {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */ + {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */ + {0x067A,0x067A},{0x067B,0x067B}, /* 067A */ + {0x067C,0x067C},{0x067D,0x067D}, /* 067C */ + {0x067E,0x067E},{0x067F,0x067F}, /* 067E */ + {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */ + {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */ + {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */ + {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */ + {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */ + {0x068A,0x068A},{0x068B,0x068B}, /* 068A */ + {0x068C,0x068C},{0x068D,0x068D}, /* 068C */ + {0x068E,0x068E},{0x068F,0x068F}, /* 068E */ + {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */ + {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */ + {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */ + {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */ + {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */ + {0x069A,0x069A},{0x069B,0x069B}, /* 069A */ + {0x069C,0x069C},{0x069D,0x069D}, /* 069C */ + {0x069E,0x069E},{0x069F,0x069F}, /* 069E */ + {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */ + {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */ + {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */ + {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */ + {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */ + {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */ + {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */ + {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */ + {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */ + {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */ + {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */ + {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */ + {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */ + {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */ + {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */ + {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */ + {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */ + {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */ + {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */ + {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */ + {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */ + {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */ + {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */ + {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */ + {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */ + {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */ + {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */ + {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */ + {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */ + {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */ + {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */ + {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */ + {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */ + {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */ + {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */ + {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */ + {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */ + {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */ + {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */ + {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */ + {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */ + {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */ + {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */ + {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */ + {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */ + {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */ + {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */ + {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page07[256]={ /* This page is dummy */ + {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */ + {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */ + {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */ + {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */ + {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */ + {0x070A,0x070A},{0x070B,0x070B}, /* 070A */ + {0x070C,0x070C},{0x070D,0x070D}, /* 070C */ + {0x070E,0x070E},{0x070F,0x070F}, /* 070E */ + {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */ + {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */ + {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */ + {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */ + {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */ + {0x071A,0x071A},{0x071B,0x071B}, /* 071A */ + {0x071C,0x071C},{0x071D,0x071D}, /* 071C */ + {0x071E,0x071E},{0x071F,0x071F}, /* 071E */ + {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */ + {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */ + {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */ + {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */ + {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */ + {0x072A,0x072A},{0x072B,0x072B}, /* 072A */ + {0x072C,0x072C},{0x072D,0x072D}, /* 072C */ + {0x072E,0x072E},{0x072F,0x072F}, /* 072E */ + {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */ + {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */ + {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */ + {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */ + {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */ + {0x073A,0x073A},{0x073B,0x073B}, /* 073A */ + {0x073C,0x073C},{0x073D,0x073D}, /* 073C */ + {0x073E,0x073E},{0x073F,0x073F}, /* 073E */ + {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */ + {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */ + {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */ + {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */ + {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */ + {0x074A,0x074A},{0x074B,0x074B}, /* 074A */ + {0x074C,0x074C},{0x074D,0x074D}, /* 074C */ + {0x074E,0x074E},{0x074F,0x074F}, /* 074E */ + {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */ + {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */ + {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */ + {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */ + {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */ + {0x075A,0x075A},{0x075B,0x075B}, /* 075A */ + {0x075C,0x075C},{0x075D,0x075D}, /* 075C */ + {0x075E,0x075E},{0x075F,0x075F}, /* 075E */ + {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */ + {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */ + {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */ + {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */ + {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */ + {0x076A,0x076A},{0x076B,0x076B}, /* 076A */ + {0x076C,0x076C},{0x076D,0x076D}, /* 076C */ + {0x076E,0x076E},{0x076F,0x076F}, /* 076E */ + {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */ + {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */ + {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */ + {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */ + {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */ + {0x077A,0x077A},{0x077B,0x077B}, /* 077A */ + {0x077C,0x077C},{0x077D,0x077D}, /* 077C */ + {0x077E,0x077E},{0x077F,0x077F}, /* 077E */ + {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */ + {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */ + {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */ + {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */ + {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */ + {0x078A,0x078A},{0x078B,0x078B}, /* 078A */ + {0x078C,0x078C},{0x078D,0x078D}, /* 078C */ + {0x078E,0x078E},{0x078F,0x078F}, /* 078E */ + {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */ + {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */ + {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */ + {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */ + {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */ + {0x079A,0x079A},{0x079B,0x079B}, /* 079A */ + {0x079C,0x079C},{0x079D,0x079D}, /* 079C */ + {0x079E,0x079E},{0x079F,0x079F}, /* 079E */ + {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */ + {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */ + {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */ + {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */ + {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */ + {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */ + {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */ + {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */ + {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */ + {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */ + {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */ + {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */ + {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */ + {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */ + {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */ + {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */ + {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */ + {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */ + {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */ + {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */ + {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */ + {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */ + {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */ + {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */ + {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */ + {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */ + {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */ + {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */ + {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */ + {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */ + {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */ + {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */ + {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */ + {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */ + {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */ + {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */ + {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */ + {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */ + {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */ + {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */ + {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */ + {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */ + {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */ + {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */ + {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */ + {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */ + {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */ + {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page1E[256]={ + {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */ + {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */ + {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */ + {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */ + {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */ + {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */ + {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */ + {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */ + {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */ + {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */ + {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */ + {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */ + {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */ + {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */ + {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */ + {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */ + {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */ + {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */ + {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */ + {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */ + {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */ + {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */ + {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */ + {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */ + {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */ + {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */ + {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */ + {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */ + {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */ + {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */ + {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */ + {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */ + {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */ + {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */ + {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */ + {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */ + {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */ + {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */ + {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */ + {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */ + {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */ + {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */ + {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */ + {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */ + {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */ + {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */ + {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */ + {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */ + {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */ + {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */ + {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */ + {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */ + {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */ + {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */ + {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */ + {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */ + {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */ + {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */ + {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */ + {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */ + {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */ + {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */ + {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */ + {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */ + {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */ + {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */ + {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */ + {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */ + {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */ + {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */ + {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */ + {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */ + {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */ + {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */ + {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */ + {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */ + {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */ + {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */ + {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */ + {0x1E9E,0x1E9E},{0x1E9F,0x1E9F}, /* 1E9E */ + {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */ + {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */ + {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */ + {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */ + {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */ + {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */ + {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */ + {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */ + {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */ + {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */ + {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */ + {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */ + {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */ + {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */ + {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */ + {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */ + {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */ + {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */ + {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */ + {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */ + {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */ + {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */ + {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */ + {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */ + {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */ + {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */ + {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */ + {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */ + {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */ + {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */ + {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */ + {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */ + {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */ + {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */ + {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */ + {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */ + {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */ + {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */ + {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */ + {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */ + {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */ + {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */ + {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */ + {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */ + {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */ + {0x1EFA,0x1EFA},{0x1EFB,0x1EFB}, /* 1EFA */ + {0x1EFC,0x1EFC},{0x1EFD,0x1EFD}, /* 1EFC */ + {0x1EFE,0x1EFE},{0x1EFF,0x1EFF} /* 1EFE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page1F[256]={ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */ + {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */ + {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */ + {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */ + {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */ + {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */ + {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */ + {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */ + {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */ + {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */ + {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */ + {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */ + {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */ + {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */ + {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */ + {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */ + {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */ + {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */ + {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */ + {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */ + {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */ + {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */ + {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */ + {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */ + {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */ + {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */ + {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */ + {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */ + {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */ + {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */ + {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */ + {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */ + {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */ + {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */ + {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */ + {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */ + {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */ + {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */ + {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */ + {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */ + {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page21[256]={ + {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */ + {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */ + {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */ + {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */ + {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */ + {0x210A,0x210A},{0x210B,0x210B}, /* 210A */ + {0x210C,0x210C},{0x210D,0x210D}, /* 210C */ + {0x210E,0x210E},{0x210F,0x210F}, /* 210E */ + {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */ + {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */ + {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */ + {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */ + {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */ + {0x211A,0x211A},{0x211B,0x211B}, /* 211A */ + {0x211C,0x211C},{0x211D,0x211D}, /* 211C */ + {0x211E,0x211E},{0x211F,0x211F}, /* 211E */ + {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */ + {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */ + {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */ + {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */ + {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */ + {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */ + {0x212C,0x212C},{0x212D,0x212D}, /* 212C */ + {0x212E,0x212E},{0x212F,0x212F}, /* 212E */ + {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */ + {0x2132,0x2132},{0x2133,0x2133}, /* 2132 */ + {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */ + {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */ + {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */ + {0x213A,0x213A},{0x213B,0x213B}, /* 213A */ + {0x213C,0x213C},{0x213D,0x213D}, /* 213C */ + {0x213E,0x213E},{0x213F,0x213F}, /* 213E */ + {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */ + {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */ + {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */ + {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */ + {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */ + {0x214A,0x214A},{0x214B,0x214B}, /* 214A */ + {0x214C,0x214C},{0x214D,0x214D}, /* 214C */ + {0x214E,0x214E},{0x214F,0x214F}, /* 214E */ + {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */ + {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */ + {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */ + {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */ + {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */ + {0x215A,0x215A},{0x215B,0x215B}, /* 215A */ + {0x215C,0x215C},{0x215D,0x215D}, /* 215C */ + {0x215E,0x215E},{0x215F,0x215F}, /* 215E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 216A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 216C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 216E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 217A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 217C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 217E */ + {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */ + {0x2182,0x2182},{0x2183,0x2183}, /* 2182 */ + {0x2184,0x2184},{0x2185,0x2185}, /* 2184 */ + {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */ + {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */ + {0x218A,0x218A},{0x218B,0x218B}, /* 218A */ + {0x218C,0x218C},{0x218D,0x218D}, /* 218C */ + {0x218E,0x218E},{0x218F,0x218F}, /* 218E */ + {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */ + {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */ + {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */ + {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */ + {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */ + {0x219A,0x219A},{0x219B,0x219B}, /* 219A */ + {0x219C,0x219C},{0x219D,0x219D}, /* 219C */ + {0x219E,0x219E},{0x219F,0x219F}, /* 219E */ + {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */ + {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */ + {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */ + {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */ + {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */ + {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */ + {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */ + {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */ + {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */ + {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */ + {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */ + {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */ + {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */ + {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */ + {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */ + {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */ + {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */ + {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */ + {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */ + {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */ + {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */ + {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */ + {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */ + {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */ + {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */ + {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */ + {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */ + {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */ + {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */ + {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */ + {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */ + {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */ + {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */ + {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */ + {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */ + {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */ + {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */ + {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */ + {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */ + {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */ + {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */ + {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */ + {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */ + {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */ + {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */ + {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */ + {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */ + {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_page24[256]={ + {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */ + {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */ + {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */ + {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */ + {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */ + {0x240A,0x240A},{0x240B,0x240B}, /* 240A */ + {0x240C,0x240C},{0x240D,0x240D}, /* 240C */ + {0x240E,0x240E},{0x240F,0x240F}, /* 240E */ + {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */ + {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */ + {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */ + {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */ + {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */ + {0x241A,0x241A},{0x241B,0x241B}, /* 241A */ + {0x241C,0x241C},{0x241D,0x241D}, /* 241C */ + {0x241E,0x241E},{0x241F,0x241F}, /* 241E */ + {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */ + {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */ + {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */ + {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */ + {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */ + {0x242A,0x242A},{0x242B,0x242B}, /* 242A */ + {0x242C,0x242C},{0x242D,0x242D}, /* 242C */ + {0x242E,0x242E},{0x242F,0x242F}, /* 242E */ + {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */ + {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */ + {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */ + {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */ + {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */ + {0x243A,0x243A},{0x243B,0x243B}, /* 243A */ + {0x243C,0x243C},{0x243D,0x243D}, /* 243C */ + {0x243E,0x243E},{0x243F,0x243F}, /* 243E */ + {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */ + {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */ + {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */ + {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */ + {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */ + {0x244A,0x244A},{0x244B,0x244B}, /* 244A */ + {0x244C,0x244C},{0x244D,0x244D}, /* 244C */ + {0x244E,0x244E},{0x244F,0x244F}, /* 244E */ + {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */ + {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */ + {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */ + {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */ + {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */ + {0x245A,0x245A},{0x245B,0x245B}, /* 245A */ + {0x245C,0x245C},{0x245D,0x245D}, /* 245C */ + {0x245E,0x245E},{0x245F,0x245F}, /* 245E */ + {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */ + {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */ + {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */ + {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */ + {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */ + {0x246A,0x246A},{0x246B,0x246B}, /* 246A */ + {0x246C,0x246C},{0x246D,0x246D}, /* 246C */ + {0x246E,0x246E},{0x246F,0x246F}, /* 246E */ + {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */ + {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */ + {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */ + {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */ + {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */ + {0x247A,0x247A},{0x247B,0x247B}, /* 247A */ + {0x247C,0x247C},{0x247D,0x247D}, /* 247C */ + {0x247E,0x247E},{0x247F,0x247F}, /* 247E */ + {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */ + {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */ + {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */ + {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */ + {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */ + {0x248A,0x248A},{0x248B,0x248B}, /* 248A */ + {0x248C,0x248C},{0x248D,0x248D}, /* 248C */ + {0x248E,0x248E},{0x248F,0x248F}, /* 248E */ + {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */ + {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */ + {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */ + {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */ + {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */ + {0x249A,0x249A},{0x249B,0x249B}, /* 249A */ + {0x249C,0x249C},{0x249D,0x249D}, /* 249C */ + {0x249E,0x249E},{0x249F,0x249F}, /* 249E */ + {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */ + {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */ + {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */ + {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */ + {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */ + {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */ + {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */ + {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */ + {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */ + {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */ + {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */ + {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */ + {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */ + {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */ + {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */ + {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */ + {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */ + {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */ + {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */ + {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */ + {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */ + {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */ +}; + +static const MY_CASEFOLD_CHARACTER u300_casefold_pageFF[256]={ + {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */ + {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */ + {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */ + {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */ + {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */ + {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */ + {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */ + {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */ + {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */ + {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */ + {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */ + {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */ + {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */ + {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */ + {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */ + {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */ + {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */ + {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */ + {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */ + {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */ + {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */ + {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */ + {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */ + {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */ + {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */ + {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */ + {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */ + {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */ + {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */ + {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */ + {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */ + {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */ + {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */ + {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */ + {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */ + {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */ + {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */ + {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */ + {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */ + {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */ + {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */ + {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */ + {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */ + {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */ + {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */ + {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */ + {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */ + {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */ + {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */ + {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */ + {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */ + {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */ + {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */ + {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */ + {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */ + {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */ + {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */ + {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */ + {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */ + {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */ + {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */ + {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */ + {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */ + {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */ + {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */ + {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */ + {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */ + {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */ + {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */ + {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */ + {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */ + {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */ + {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */ + {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */ + {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */ + {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */ + {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */ + {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */ + {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */ + {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */ + {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */ + {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */ + {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */ + {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */ + {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */ + {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */ + {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */ + {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */ + {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */ + {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */ + {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */ + {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */ + {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */ + {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */ + {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */ + {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */ + {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */ + {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */ + {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */ + {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */ + {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */ + {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */ + {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */ + {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */ +}; + +const MY_CASEFOLD_CHARACTER * my_u300_casefold_index[256]={ + u300_casefold_page00, u300_casefold_page01, u300_casefold_page02, u300_casefold_page03, u300_casefold_page04, u300_casefold_page05, u300_casefold_page06, u300_casefold_page07, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_page1E, u300_casefold_page1F, + NULL, u300_casefold_page21, NULL, NULL, u300_casefold_page24, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_pageFF +}; diff --git a/strings/ctype-unicode300-general_ci.h b/strings/ctype-unicode300-general_ci.h new file mode 100644 index 00000000000..fd8cd71bf1a --- /dev/null +++ b/strings/ctype-unicode300-general_ci.h @@ -0,0 +1,610 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=weight_general_ci \ + --max-char=0xFFFF \ + UnicodeData-3.0.0.txt + +*/ +const uint16 weight_general_ci_page00[256]={ + 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, /* 0000 */ + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, /* 0008 */ + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, /* 0010 */ + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, /* 0018 */ + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, /* 0020 */ + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, /* 0028 */ + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, /* 0030 */ + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, /* 0038 */ + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0040 */ + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0048 */ + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0050 */ + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, /* 0058 */ + 0x0060,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0060 */ + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0068 */ + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0070 */ + 0x0058,0x0059,0x005A,0x007B,0x007C,0x007D,0x007E,0x007F, /* 0078 */ + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, /* 0080 */ + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, /* 0088 */ + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, /* 0090 */ + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, /* 0098 */ + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, /* 00A0 */ + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, /* 00A8 */ + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x039C,0x00B6,0x00B7, /* 00B0 */ + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, /* 00B8 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00C0 */ + 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00C8 */ + 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00D7, /* 00D0 */ + 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0053, /* 00D8 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00E0 */ + 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00E8 */ + 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00F7, /* 00F0 */ + 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0059 /* 00F8 */ +}; + +static const uint16 weight_general_ci_page01[256]={ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0043,0x0043, /* 0100 */ + 0x0043,0x0043,0x0043,0x0043,0x0043,0x0043,0x0044,0x0044, /* 0108 */ + 0x0110,0x0110,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 0110 */ + 0x0045,0x0045,0x0045,0x0045,0x0047,0x0047,0x0047,0x0047, /* 0118 */ + 0x0047,0x0047,0x0047,0x0047,0x0048,0x0048,0x0126,0x0126, /* 0120 */ + 0x0049,0x0049,0x0049,0x0049,0x0049,0x0049,0x0049,0x0049, /* 0128 */ + 0x0049,0x0049,0x0132,0x0132,0x004A,0x004A,0x004B,0x004B, /* 0130 */ + 0x0138,0x004C,0x004C,0x004C,0x004C,0x004C,0x004C,0x013F, /* 0138 */ + 0x013F,0x0141,0x0141,0x004E,0x004E,0x004E,0x004E,0x004E, /* 0140 */ + 0x004E,0x0149,0x014A,0x014A,0x004F,0x004F,0x004F,0x004F, /* 0148 */ + 0x004F,0x004F,0x0152,0x0152,0x0052,0x0052,0x0052,0x0052, /* 0150 */ + 0x0052,0x0052,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053, /* 0158 */ + 0x0053,0x0053,0x0054,0x0054,0x0054,0x0054,0x0166,0x0166, /* 0160 */ + 0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 0168 */ + 0x0055,0x0055,0x0055,0x0055,0x0057,0x0057,0x0059,0x0059, /* 0170 */ + 0x0059,0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x0053, /* 0178 */ + 0x0180,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187, /* 0180 */ + 0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F, /* 0188 */ + 0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197, /* 0190 */ + 0x0198,0x0198,0x019A,0x019B,0x019C,0x019D,0x019E,0x019F, /* 0198 */ + 0x004F,0x004F,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7, /* 01A0 */ + 0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x0055, /* 01A8 */ + 0x0055,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7, /* 01B0 */ + 0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7, /* 01B8 */ + 0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C4,0x01C4,0x01C7, /* 01C0 */ + 0x01C7,0x01C7,0x01CA,0x01CA,0x01CA,0x0041,0x0041,0x0049, /* 01C8 */ + 0x0049,0x004F,0x004F,0x0055,0x0055,0x0055,0x0055,0x0055, /* 01D0 */ + 0x0055,0x0055,0x0055,0x0055,0x0055,0x018E,0x0041,0x0041, /* 01D8 */ + 0x0041,0x0041,0x00C6,0x00C6,0x01E4,0x01E4,0x0047,0x0047, /* 01E0 */ + 0x004B,0x004B,0x004F,0x004F,0x004F,0x004F,0x01B7,0x01B7, /* 01E8 */ + 0x004A,0x01F1,0x01F1,0x01F1,0x0047,0x0047,0x01F6,0x01F7, /* 01F0 */ + 0x004E,0x004E,0x0041,0x0041,0x00C6,0x00C6,0x00D8,0x00D8 /* 01F8 */ +}; + +static const uint16 weight_general_ci_page02[256]={ + 0x0041,0x0041,0x0041,0x0041,0x0045,0x0045,0x0045,0x0045, /* 0200 */ + 0x0049,0x0049,0x0049,0x0049,0x004F,0x004F,0x004F,0x004F, /* 0208 */ + 0x0052,0x0052,0x0052,0x0052,0x0055,0x0055,0x0055,0x0055, /* 0210 */ + 0x0053,0x0053,0x0054,0x0054,0x021C,0x021C,0x0048,0x0048, /* 0218 */ + 0x0220,0x0221,0x0222,0x0222,0x0224,0x0224,0x0041,0x0041, /* 0220 */ + 0x0045,0x0045,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 0228 */ + 0x004F,0x004F,0x0059,0x0059,0x0234,0x0235,0x0236,0x0237, /* 0230 */ + 0x0238,0x0239,0x023A,0x023B,0x023C,0x023D,0x023E,0x023F, /* 0238 */ + 0x0240,0x0241,0x0242,0x0243,0x0244,0x0245,0x0246,0x0247, /* 0240 */ + 0x0248,0x0249,0x024A,0x024B,0x024C,0x024D,0x024E,0x024F, /* 0248 */ + 0x0250,0x0251,0x0252,0x0181,0x0186,0x0255,0x0189,0x018A, /* 0250 */ + 0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F, /* 0258 */ + 0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267, /* 0260 */ + 0x0197,0x0196,0x026A,0x026B,0x026C,0x026D,0x026E,0x019C, /* 0268 */ + 0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277, /* 0270 */ + 0x0278,0x0279,0x027A,0x027B,0x027C,0x027D,0x027E,0x027F, /* 0278 */ + 0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287, /* 0280 */ + 0x01AE,0x0289,0x01B1,0x01B2,0x028C,0x028D,0x028E,0x028F, /* 0288 */ + 0x0290,0x0291,0x01B7,0x0293,0x0294,0x0295,0x0296,0x0297, /* 0290 */ + 0x0298,0x0299,0x029A,0x029B,0x029C,0x029D,0x029E,0x029F, /* 0298 */ + 0x02A0,0x02A1,0x02A2,0x02A3,0x02A4,0x02A5,0x02A6,0x02A7, /* 02A0 */ + 0x02A8,0x02A9,0x02AA,0x02AB,0x02AC,0x02AD,0x02AE,0x02AF, /* 02A8 */ + 0x02B0,0x02B1,0x02B2,0x02B3,0x02B4,0x02B5,0x02B6,0x02B7, /* 02B0 */ + 0x02B8,0x02B9,0x02BA,0x02BB,0x02BC,0x02BD,0x02BE,0x02BF, /* 02B8 */ + 0x02C0,0x02C1,0x02C2,0x02C3,0x02C4,0x02C5,0x02C6,0x02C7, /* 02C0 */ + 0x02C8,0x02C9,0x02CA,0x02CB,0x02CC,0x02CD,0x02CE,0x02CF, /* 02C8 */ + 0x02D0,0x02D1,0x02D2,0x02D3,0x02D4,0x02D5,0x02D6,0x02D7, /* 02D0 */ + 0x02D8,0x02D9,0x02DA,0x02DB,0x02DC,0x02DD,0x02DE,0x02DF, /* 02D8 */ + 0x02E0,0x02E1,0x02E2,0x02E3,0x02E4,0x02E5,0x02E6,0x02E7, /* 02E0 */ + 0x02E8,0x02E9,0x02EA,0x02EB,0x02EC,0x02ED,0x02EE,0x02EF, /* 02E8 */ + 0x02F0,0x02F1,0x02F2,0x02F3,0x02F4,0x02F5,0x02F6,0x02F7, /* 02F0 */ + 0x02F8,0x02F9,0x02FA,0x02FB,0x02FC,0x02FD,0x02FE,0x02FF /* 02F8 */ +}; + +static const uint16 weight_general_ci_page03[256]={ + 0x0300,0x0301,0x0302,0x0303,0x0304,0x0305,0x0306,0x0307, /* 0300 */ + 0x0308,0x0309,0x030A,0x030B,0x030C,0x030D,0x030E,0x030F, /* 0308 */ + 0x0310,0x0311,0x0312,0x0313,0x0314,0x0315,0x0316,0x0317, /* 0310 */ + 0x0318,0x0319,0x031A,0x031B,0x031C,0x031D,0x031E,0x031F, /* 0318 */ + 0x0320,0x0321,0x0322,0x0323,0x0324,0x0325,0x0326,0x0327, /* 0320 */ + 0x0328,0x0329,0x032A,0x032B,0x032C,0x032D,0x032E,0x032F, /* 0328 */ + 0x0330,0x0331,0x0332,0x0333,0x0334,0x0335,0x0336,0x0337, /* 0330 */ + 0x0338,0x0339,0x033A,0x033B,0x033C,0x033D,0x033E,0x033F, /* 0338 */ + 0x0340,0x0341,0x0342,0x0343,0x0344,0x0399,0x0346,0x0347, /* 0340 */ + 0x0348,0x0349,0x034A,0x034B,0x034C,0x034D,0x034E,0x034F, /* 0348 */ + 0x0350,0x0351,0x0352,0x0353,0x0354,0x0355,0x0356,0x0357, /* 0350 */ + 0x0358,0x0359,0x035A,0x035B,0x035C,0x035D,0x035E,0x035F, /* 0358 */ + 0x0360,0x0361,0x0362,0x0363,0x0364,0x0365,0x0366,0x0367, /* 0360 */ + 0x0368,0x0369,0x036A,0x036B,0x036C,0x036D,0x036E,0x036F, /* 0368 */ + 0x0370,0x0371,0x0372,0x0373,0x0374,0x0375,0x0376,0x0377, /* 0370 */ + 0x0378,0x0379,0x037A,0x037B,0x037C,0x037D,0x037E,0x037F, /* 0378 */ + 0x0380,0x0381,0x0382,0x0383,0x0384,0x0385,0x0391,0x0387, /* 0380 */ + 0x0395,0x0397,0x0399,0x038B,0x039F,0x038D,0x03A5,0x03A9, /* 0388 */ + 0x0399,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, /* 0390 */ + 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, /* 0398 */ + 0x03A0,0x03A1,0x03A2,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, /* 03A0 */ + 0x03A8,0x03A9,0x0399,0x03A5,0x0391,0x0395,0x0397,0x0399, /* 03A8 */ + 0x03A5,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, /* 03B0 */ + 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, /* 03B8 */ + 0x03A0,0x03A1,0x03A3,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, /* 03C0 */ + 0x03A8,0x03A9,0x0399,0x03A5,0x039F,0x03A5,0x03A9,0x03CF, /* 03C8 */ + 0x0392,0x0398,0x03D2,0x03D2,0x03D2,0x03A6,0x03A0,0x03D7, /* 03D0 */ + 0x03D8,0x03D9,0x03DA,0x03DA,0x03DC,0x03DC,0x03DE,0x03DE, /* 03D8 */ + 0x03E0,0x03E0,0x03E2,0x03E2,0x03E4,0x03E4,0x03E6,0x03E6, /* 03E0 */ + 0x03E8,0x03E8,0x03EA,0x03EA,0x03EC,0x03EC,0x03EE,0x03EE, /* 03E8 */ + 0x039A,0x03A1,0x03A3,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7, /* 03F0 */ + 0x03F8,0x03F9,0x03FA,0x03FB,0x03FC,0x03FD,0x03FE,0x03FF /* 03F8 */ +}; + +static const uint16 weight_general_ci_page04[256]={ + 0x0415,0x0415,0x0402,0x0413,0x0404,0x0405,0x0406,0x0406, /* 0400 */ + 0x0408,0x0409,0x040A,0x040B,0x041A,0x0418,0x0423,0x040F, /* 0408 */ + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, /* 0410 */ + 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, /* 0418 */ + 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, /* 0420 */ + 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, /* 0428 */ + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, /* 0430 */ + 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, /* 0438 */ + 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, /* 0440 */ + 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, /* 0448 */ + 0x0415,0x0415,0x0402,0x0413,0x0404,0x0405,0x0406,0x0406, /* 0450 */ + 0x0408,0x0409,0x040A,0x040B,0x041A,0x0418,0x0423,0x040F, /* 0458 */ + 0x0460,0x0460,0x0462,0x0462,0x0464,0x0464,0x0466,0x0466, /* 0460 */ + 0x0468,0x0468,0x046A,0x046A,0x046C,0x046C,0x046E,0x046E, /* 0468 */ + 0x0470,0x0470,0x0472,0x0472,0x0474,0x0474,0x0474,0x0474, /* 0470 */ + 0x0478,0x0478,0x047A,0x047A,0x047C,0x047C,0x047E,0x047E, /* 0478 */ + 0x0480,0x0480,0x0482,0x0483,0x0484,0x0485,0x0486,0x0487, /* 0480 */ + 0x0488,0x0489,0x048A,0x048B,0x048C,0x048C,0x048E,0x048E, /* 0488 */ + 0x0490,0x0490,0x0492,0x0492,0x0494,0x0494,0x0496,0x0496, /* 0490 */ + 0x0498,0x0498,0x049A,0x049A,0x049C,0x049C,0x049E,0x049E, /* 0498 */ + 0x04A0,0x04A0,0x04A2,0x04A2,0x04A4,0x04A4,0x04A6,0x04A6, /* 04A0 */ + 0x04A8,0x04A8,0x04AA,0x04AA,0x04AC,0x04AC,0x04AE,0x04AE, /* 04A8 */ + 0x04B0,0x04B0,0x04B2,0x04B2,0x04B4,0x04B4,0x04B6,0x04B6, /* 04B0 */ + 0x04B8,0x04B8,0x04BA,0x04BA,0x04BC,0x04BC,0x04BE,0x04BE, /* 04B8 */ + 0x04C0,0x0416,0x0416,0x04C3,0x04C3,0x04C5,0x04C6,0x04C7, /* 04C0 */ + 0x04C7,0x04C9,0x04CA,0x04CB,0x04CB,0x04CD,0x04CE,0x04CF, /* 04C8 */ + 0x0410,0x0410,0x0410,0x0410,0x04D4,0x04D4,0x0415,0x0415, /* 04D0 */ + 0x04D8,0x04D8,0x04D8,0x04D8,0x0416,0x0416,0x0417,0x0417, /* 04D8 */ + 0x04E0,0x04E0,0x0418,0x0418,0x0418,0x0418,0x041E,0x041E, /* 04E0 */ + 0x04E8,0x04E8,0x04E8,0x04E8,0x042D,0x042D,0x0423,0x0423, /* 04E8 */ + 0x0423,0x0423,0x0423,0x0423,0x0427,0x0427,0x04F6,0x04F7, /* 04F0 */ + 0x042B,0x042B,0x04FA,0x04FB,0x04FC,0x04FD,0x04FE,0x04FF /* 04F8 */ +}; + +static const uint16 weight_general_ci_page05[256]={ + 0x0500,0x0501,0x0502,0x0503,0x0504,0x0505,0x0506,0x0507, /* 0500 */ + 0x0508,0x0509,0x050A,0x050B,0x050C,0x050D,0x050E,0x050F, /* 0508 */ + 0x0510,0x0511,0x0512,0x0513,0x0514,0x0515,0x0516,0x0517, /* 0510 */ + 0x0518,0x0519,0x051A,0x051B,0x051C,0x051D,0x051E,0x051F, /* 0518 */ + 0x0520,0x0521,0x0522,0x0523,0x0524,0x0525,0x0526,0x0527, /* 0520 */ + 0x0528,0x0529,0x052A,0x052B,0x052C,0x052D,0x052E,0x052F, /* 0528 */ + 0x0530,0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537, /* 0530 */ + 0x0538,0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F, /* 0538 */ + 0x0540,0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547, /* 0540 */ + 0x0548,0x0549,0x054A,0x054B,0x054C,0x054D,0x054E,0x054F, /* 0548 */ + 0x0550,0x0551,0x0552,0x0553,0x0554,0x0555,0x0556,0x0557, /* 0550 */ + 0x0558,0x0559,0x055A,0x055B,0x055C,0x055D,0x055E,0x055F, /* 0558 */ + 0x0560,0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537, /* 0560 */ + 0x0538,0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F, /* 0568 */ + 0x0540,0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547, /* 0570 */ + 0x0548,0x0549,0x054A,0x054B,0x054C,0x054D,0x054E,0x054F, /* 0578 */ + 0x0550,0x0551,0x0552,0x0553,0x0554,0x0555,0x0556,0x0587, /* 0580 */ + 0x0588,0x0589,0x058A,0x058B,0x058C,0x058D,0x058E,0x058F, /* 0588 */ + 0x0590,0x0591,0x0592,0x0593,0x0594,0x0595,0x0596,0x0597, /* 0590 */ + 0x0598,0x0599,0x059A,0x059B,0x059C,0x059D,0x059E,0x059F, /* 0598 */ + 0x05A0,0x05A1,0x05A2,0x05A3,0x05A4,0x05A5,0x05A6,0x05A7, /* 05A0 */ + 0x05A8,0x05A9,0x05AA,0x05AB,0x05AC,0x05AD,0x05AE,0x05AF, /* 05A8 */ + 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7, /* 05B0 */ + 0x05B8,0x05B9,0x05BA,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF, /* 05B8 */ + 0x05C0,0x05C1,0x05C2,0x05C3,0x05C4,0x05C5,0x05C6,0x05C7, /* 05C0 */ + 0x05C8,0x05C9,0x05CA,0x05CB,0x05CC,0x05CD,0x05CE,0x05CF, /* 05C8 */ + 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, /* 05D0 */ + 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, /* 05D8 */ + 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, /* 05E0 */ + 0x05E8,0x05E9,0x05EA,0x05EB,0x05EC,0x05ED,0x05EE,0x05EF, /* 05E8 */ + 0x05F0,0x05F1,0x05F2,0x05F3,0x05F4,0x05F5,0x05F6,0x05F7, /* 05F0 */ + 0x05F8,0x05F9,0x05FA,0x05FB,0x05FC,0x05FD,0x05FE,0x05FF /* 05F8 */ +}; + +static const uint16 weight_general_ci_page06[256]={ /* This page is dummy */ + 0x0600,0x0601,0x0602,0x0603,0x0604,0x0605,0x0606,0x0607, /* 0600 */ + 0x0608,0x0609,0x060A,0x060B,0x060C,0x060D,0x060E,0x060F, /* 0608 */ + 0x0610,0x0611,0x0612,0x0613,0x0614,0x0615,0x0616,0x0617, /* 0610 */ + 0x0618,0x0619,0x061A,0x061B,0x061C,0x061D,0x061E,0x061F, /* 0618 */ + 0x0620,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, /* 0620 */ + 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, /* 0628 */ + 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637, /* 0630 */ + 0x0638,0x0639,0x063A,0x063B,0x063C,0x063D,0x063E,0x063F, /* 0638 */ + 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647, /* 0640 */ + 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F, /* 0648 */ + 0x0650,0x0651,0x0652,0x0653,0x0654,0x0655,0x0656,0x0657, /* 0650 */ + 0x0658,0x0659,0x065A,0x065B,0x065C,0x065D,0x065E,0x065F, /* 0658 */ + 0x0660,0x0661,0x0662,0x0663,0x0664,0x0665,0x0666,0x0667, /* 0660 */ + 0x0668,0x0669,0x066A,0x066B,0x066C,0x066D,0x066E,0x066F, /* 0668 */ + 0x0670,0x0671,0x0672,0x0673,0x0674,0x0675,0x0676,0x0677, /* 0670 */ + 0x0678,0x0679,0x067A,0x067B,0x067C,0x067D,0x067E,0x067F, /* 0678 */ + 0x0680,0x0681,0x0682,0x0683,0x0684,0x0685,0x0686,0x0687, /* 0680 */ + 0x0688,0x0689,0x068A,0x068B,0x068C,0x068D,0x068E,0x068F, /* 0688 */ + 0x0690,0x0691,0x0692,0x0693,0x0694,0x0695,0x0696,0x0697, /* 0690 */ + 0x0698,0x0699,0x069A,0x069B,0x069C,0x069D,0x069E,0x069F, /* 0698 */ + 0x06A0,0x06A1,0x06A2,0x06A3,0x06A4,0x06A5,0x06A6,0x06A7, /* 06A0 */ + 0x06A8,0x06A9,0x06AA,0x06AB,0x06AC,0x06AD,0x06AE,0x06AF, /* 06A8 */ + 0x06B0,0x06B1,0x06B2,0x06B3,0x06B4,0x06B5,0x06B6,0x06B7, /* 06B0 */ + 0x06B8,0x06B9,0x06BA,0x06BB,0x06BC,0x06BD,0x06BE,0x06BF, /* 06B8 */ + 0x06C0,0x06C1,0x06C2,0x06C3,0x06C4,0x06C5,0x06C6,0x06C7, /* 06C0 */ + 0x06C8,0x06C9,0x06CA,0x06CB,0x06CC,0x06CD,0x06CE,0x06CF, /* 06C8 */ + 0x06D0,0x06D1,0x06D2,0x06D3,0x06D4,0x06D5,0x06D6,0x06D7, /* 06D0 */ + 0x06D8,0x06D9,0x06DA,0x06DB,0x06DC,0x06DD,0x06DE,0x06DF, /* 06D8 */ + 0x06E0,0x06E1,0x06E2,0x06E3,0x06E4,0x06E5,0x06E6,0x06E7, /* 06E0 */ + 0x06E8,0x06E9,0x06EA,0x06EB,0x06EC,0x06ED,0x06EE,0x06EF, /* 06E8 */ + 0x06F0,0x06F1,0x06F2,0x06F3,0x06F4,0x06F5,0x06F6,0x06F7, /* 06F0 */ + 0x06F8,0x06F9,0x06FA,0x06FB,0x06FC,0x06FD,0x06FE,0x06FF /* 06F8 */ +}; + +static const uint16 weight_general_ci_page07[256]={ /* This page is dummy */ + 0x0700,0x0701,0x0702,0x0703,0x0704,0x0705,0x0706,0x0707, /* 0700 */ + 0x0708,0x0709,0x070A,0x070B,0x070C,0x070D,0x070E,0x070F, /* 0708 */ + 0x0710,0x0711,0x0712,0x0713,0x0714,0x0715,0x0716,0x0717, /* 0710 */ + 0x0718,0x0719,0x071A,0x071B,0x071C,0x071D,0x071E,0x071F, /* 0718 */ + 0x0720,0x0721,0x0722,0x0723,0x0724,0x0725,0x0726,0x0727, /* 0720 */ + 0x0728,0x0729,0x072A,0x072B,0x072C,0x072D,0x072E,0x072F, /* 0728 */ + 0x0730,0x0731,0x0732,0x0733,0x0734,0x0735,0x0736,0x0737, /* 0730 */ + 0x0738,0x0739,0x073A,0x073B,0x073C,0x073D,0x073E,0x073F, /* 0738 */ + 0x0740,0x0741,0x0742,0x0743,0x0744,0x0745,0x0746,0x0747, /* 0740 */ + 0x0748,0x0749,0x074A,0x074B,0x074C,0x074D,0x074E,0x074F, /* 0748 */ + 0x0750,0x0751,0x0752,0x0753,0x0754,0x0755,0x0756,0x0757, /* 0750 */ + 0x0758,0x0759,0x075A,0x075B,0x075C,0x075D,0x075E,0x075F, /* 0758 */ + 0x0760,0x0761,0x0762,0x0763,0x0764,0x0765,0x0766,0x0767, /* 0760 */ + 0x0768,0x0769,0x076A,0x076B,0x076C,0x076D,0x076E,0x076F, /* 0768 */ + 0x0770,0x0771,0x0772,0x0773,0x0774,0x0775,0x0776,0x0777, /* 0770 */ + 0x0778,0x0779,0x077A,0x077B,0x077C,0x077D,0x077E,0x077F, /* 0778 */ + 0x0780,0x0781,0x0782,0x0783,0x0784,0x0785,0x0786,0x0787, /* 0780 */ + 0x0788,0x0789,0x078A,0x078B,0x078C,0x078D,0x078E,0x078F, /* 0788 */ + 0x0790,0x0791,0x0792,0x0793,0x0794,0x0795,0x0796,0x0797, /* 0790 */ + 0x0798,0x0799,0x079A,0x079B,0x079C,0x079D,0x079E,0x079F, /* 0798 */ + 0x07A0,0x07A1,0x07A2,0x07A3,0x07A4,0x07A5,0x07A6,0x07A7, /* 07A0 */ + 0x07A8,0x07A9,0x07AA,0x07AB,0x07AC,0x07AD,0x07AE,0x07AF, /* 07A8 */ + 0x07B0,0x07B1,0x07B2,0x07B3,0x07B4,0x07B5,0x07B6,0x07B7, /* 07B0 */ + 0x07B8,0x07B9,0x07BA,0x07BB,0x07BC,0x07BD,0x07BE,0x07BF, /* 07B8 */ + 0x07C0,0x07C1,0x07C2,0x07C3,0x07C4,0x07C5,0x07C6,0x07C7, /* 07C0 */ + 0x07C8,0x07C9,0x07CA,0x07CB,0x07CC,0x07CD,0x07CE,0x07CF, /* 07C8 */ + 0x07D0,0x07D1,0x07D2,0x07D3,0x07D4,0x07D5,0x07D6,0x07D7, /* 07D0 */ + 0x07D8,0x07D9,0x07DA,0x07DB,0x07DC,0x07DD,0x07DE,0x07DF, /* 07D8 */ + 0x07E0,0x07E1,0x07E2,0x07E3,0x07E4,0x07E5,0x07E6,0x07E7, /* 07E0 */ + 0x07E8,0x07E9,0x07EA,0x07EB,0x07EC,0x07ED,0x07EE,0x07EF, /* 07E8 */ + 0x07F0,0x07F1,0x07F2,0x07F3,0x07F4,0x07F5,0x07F6,0x07F7, /* 07F0 */ + 0x07F8,0x07F9,0x07FA,0x07FB,0x07FC,0x07FD,0x07FE,0x07FF /* 07F8 */ +}; + +static const uint16 weight_general_ci_page1E[256]={ + 0x0041,0x0041,0x0042,0x0042,0x0042,0x0042,0x0042,0x0042, /* 1E00 */ + 0x0043,0x0043,0x0044,0x0044,0x0044,0x0044,0x0044,0x0044, /* 1E08 */ + 0x0044,0x0044,0x0044,0x0044,0x0045,0x0045,0x0045,0x0045, /* 1E10 */ + 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0046,0x0046, /* 1E18 */ + 0x0047,0x0047,0x0048,0x0048,0x0048,0x0048,0x0048,0x0048, /* 1E20 */ + 0x0048,0x0048,0x0048,0x0048,0x0049,0x0049,0x0049,0x0049, /* 1E28 */ + 0x004B,0x004B,0x004B,0x004B,0x004B,0x004B,0x004C,0x004C, /* 1E30 */ + 0x004C,0x004C,0x004C,0x004C,0x004C,0x004C,0x004D,0x004D, /* 1E38 */ + 0x004D,0x004D,0x004D,0x004D,0x004E,0x004E,0x004E,0x004E, /* 1E40 */ + 0x004E,0x004E,0x004E,0x004E,0x004F,0x004F,0x004F,0x004F, /* 1E48 */ + 0x004F,0x004F,0x004F,0x004F,0x0050,0x0050,0x0050,0x0050, /* 1E50 */ + 0x0052,0x0052,0x0052,0x0052,0x0052,0x0052,0x0052,0x0052, /* 1E58 */ + 0x0053,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053, /* 1E60 */ + 0x0053,0x0053,0x0054,0x0054,0x0054,0x0054,0x0054,0x0054, /* 1E68 */ + 0x0054,0x0054,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 1E70 */ + 0x0055,0x0055,0x0055,0x0055,0x0056,0x0056,0x0056,0x0056, /* 1E78 */ + 0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057, /* 1E80 */ + 0x0057,0x0057,0x0058,0x0058,0x0058,0x0058,0x0059,0x0059, /* 1E88 */ + 0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x0048,0x0054, /* 1E90 */ + 0x0057,0x0059,0x1E9A,0x0053,0x1E9C,0x1E9D,0x1E9E,0x1E9F, /* 1E98 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EA0 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EA8 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EB0 */ + 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 1EB8 */ + 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 1EC0 */ + 0x0049,0x0049,0x0049,0x0049,0x004F,0x004F,0x004F,0x004F, /* 1EC8 */ + 0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 1ED0 */ + 0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 1ED8 */ + 0x004F,0x004F,0x004F,0x004F,0x0055,0x0055,0x0055,0x0055, /* 1EE0 */ + 0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 1EE8 */ + 0x0055,0x0055,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059, /* 1EF0 */ + 0x0059,0x0059,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF /* 1EF8 */ +}; + +static const uint16 weight_general_ci_page1F[256]={ + 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F00 */ + 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F08 */ + 0x0395,0x0395,0x0395,0x0395,0x0395,0x0395,0x1F16,0x1F17, /* 1F10 */ + 0x0395,0x0395,0x0395,0x0395,0x0395,0x0395,0x1F1E,0x1F1F, /* 1F18 */ + 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F20 */ + 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F28 */ + 0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399, /* 1F30 */ + 0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399, /* 1F38 */ + 0x039F,0x039F,0x039F,0x039F,0x039F,0x039F,0x1F46,0x1F47, /* 1F40 */ + 0x039F,0x039F,0x039F,0x039F,0x039F,0x039F,0x1F4E,0x1F4F, /* 1F48 */ + 0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5, /* 1F50 */ + 0x1F58,0x03A5,0x1F5A,0x03A5,0x1F5C,0x03A5,0x1F5E,0x03A5, /* 1F58 */ + 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1F60 */ + 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1F68 */ + 0x0391,0x1FBB,0x0395,0x1FC9,0x0397,0x1FCB,0x0399,0x1FDB, /* 1F70 */ + 0x039F,0x1FF9,0x03A5,0x1FEB,0x03A9,0x1FFB,0x1F7E,0x1F7F, /* 1F78 */ + 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F80 */ + 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F88 */ + 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F90 */ + 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F98 */ + 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1FA0 */ + 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1FA8 */ + 0x0391,0x0391,0x0391,0x0391,0x0391,0x1FB5,0x0391,0x0391, /* 1FB0 */ + 0x0391,0x0391,0x0391,0x1FBB,0x0391,0x1FBD,0x0399,0x1FBF, /* 1FB8 */ + 0x1FC0,0x1FC1,0x0397,0x0397,0x0397,0x1FC5,0x0397,0x0397, /* 1FC0 */ + 0x0395,0x1FC9,0x0397,0x1FCB,0x0397,0x1FCD,0x1FCE,0x1FCF, /* 1FC8 */ + 0x0399,0x0399,0x0399,0x1FD3,0x1FD4,0x1FD5,0x0399,0x0399, /* 1FD0 */ + 0x0399,0x0399,0x0399,0x1FDB,0x1FDC,0x1FDD,0x1FDE,0x1FDF, /* 1FD8 */ + 0x03A5,0x03A5,0x03A5,0x1FE3,0x03A1,0x03A1,0x03A5,0x03A5, /* 1FE0 */ + 0x03A5,0x03A5,0x03A5,0x1FEB,0x03A1,0x1FED,0x1FEE,0x1FEF, /* 1FE8 */ + 0x1FF0,0x1FF1,0x03A9,0x03A9,0x03A9,0x1FF5,0x03A9,0x03A9, /* 1FF0 */ + 0x039F,0x1FF9,0x03A9,0x1FFB,0x03A9,0x1FFD,0x1FFE,0x1FFF /* 1FF8 */ +}; + +static const uint16 weight_general_ci_page21[256]={ + 0x2100,0x2101,0x2102,0x2103,0x2104,0x2105,0x2106,0x2107, /* 2100 */ + 0x2108,0x2109,0x210A,0x210B,0x210C,0x210D,0x210E,0x210F, /* 2108 */ + 0x2110,0x2111,0x2112,0x2113,0x2114,0x2115,0x2116,0x2117, /* 2110 */ + 0x2118,0x2119,0x211A,0x211B,0x211C,0x211D,0x211E,0x211F, /* 2118 */ + 0x2120,0x2121,0x2122,0x2123,0x2124,0x2125,0x2126,0x2127, /* 2120 */ + 0x2128,0x2129,0x212A,0x212B,0x212C,0x212D,0x212E,0x212F, /* 2128 */ + 0x2130,0x2131,0x2132,0x2133,0x2134,0x2135,0x2136,0x2137, /* 2130 */ + 0x2138,0x2139,0x213A,0x213B,0x213C,0x213D,0x213E,0x213F, /* 2138 */ + 0x2140,0x2141,0x2142,0x2143,0x2144,0x2145,0x2146,0x2147, /* 2140 */ + 0x2148,0x2149,0x214A,0x214B,0x214C,0x214D,0x214E,0x214F, /* 2148 */ + 0x2150,0x2151,0x2152,0x2153,0x2154,0x2155,0x2156,0x2157, /* 2150 */ + 0x2158,0x2159,0x215A,0x215B,0x215C,0x215D,0x215E,0x215F, /* 2158 */ + 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167, /* 2160 */ + 0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, /* 2168 */ + 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167, /* 2170 */ + 0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, /* 2178 */ + 0x2180,0x2181,0x2182,0x2183,0x2184,0x2185,0x2186,0x2187, /* 2180 */ + 0x2188,0x2189,0x218A,0x218B,0x218C,0x218D,0x218E,0x218F, /* 2188 */ + 0x2190,0x2191,0x2192,0x2193,0x2194,0x2195,0x2196,0x2197, /* 2190 */ + 0x2198,0x2199,0x219A,0x219B,0x219C,0x219D,0x219E,0x219F, /* 2198 */ + 0x21A0,0x21A1,0x21A2,0x21A3,0x21A4,0x21A5,0x21A6,0x21A7, /* 21A0 */ + 0x21A8,0x21A9,0x21AA,0x21AB,0x21AC,0x21AD,0x21AE,0x21AF, /* 21A8 */ + 0x21B0,0x21B1,0x21B2,0x21B3,0x21B4,0x21B5,0x21B6,0x21B7, /* 21B0 */ + 0x21B8,0x21B9,0x21BA,0x21BB,0x21BC,0x21BD,0x21BE,0x21BF, /* 21B8 */ + 0x21C0,0x21C1,0x21C2,0x21C3,0x21C4,0x21C5,0x21C6,0x21C7, /* 21C0 */ + 0x21C8,0x21C9,0x21CA,0x21CB,0x21CC,0x21CD,0x21CE,0x21CF, /* 21C8 */ + 0x21D0,0x21D1,0x21D2,0x21D3,0x21D4,0x21D5,0x21D6,0x21D7, /* 21D0 */ + 0x21D8,0x21D9,0x21DA,0x21DB,0x21DC,0x21DD,0x21DE,0x21DF, /* 21D8 */ + 0x21E0,0x21E1,0x21E2,0x21E3,0x21E4,0x21E5,0x21E6,0x21E7, /* 21E0 */ + 0x21E8,0x21E9,0x21EA,0x21EB,0x21EC,0x21ED,0x21EE,0x21EF, /* 21E8 */ + 0x21F0,0x21F1,0x21F2,0x21F3,0x21F4,0x21F5,0x21F6,0x21F7, /* 21F0 */ + 0x21F8,0x21F9,0x21FA,0x21FB,0x21FC,0x21FD,0x21FE,0x21FF /* 21F8 */ +}; + +static const uint16 weight_general_ci_page24[256]={ + 0x2400,0x2401,0x2402,0x2403,0x2404,0x2405,0x2406,0x2407, /* 2400 */ + 0x2408,0x2409,0x240A,0x240B,0x240C,0x240D,0x240E,0x240F, /* 2408 */ + 0x2410,0x2411,0x2412,0x2413,0x2414,0x2415,0x2416,0x2417, /* 2410 */ + 0x2418,0x2419,0x241A,0x241B,0x241C,0x241D,0x241E,0x241F, /* 2418 */ + 0x2420,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, /* 2420 */ + 0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, /* 2428 */ + 0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, /* 2430 */ + 0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, /* 2438 */ + 0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, /* 2440 */ + 0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, /* 2448 */ + 0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, /* 2450 */ + 0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, /* 2458 */ + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, /* 2460 */ + 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, /* 2468 */ + 0x2470,0x2471,0x2472,0x2473,0x2474,0x2475,0x2476,0x2477, /* 2470 */ + 0x2478,0x2479,0x247A,0x247B,0x247C,0x247D,0x247E,0x247F, /* 2478 */ + 0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,0x2487, /* 2480 */ + 0x2488,0x2489,0x248A,0x248B,0x248C,0x248D,0x248E,0x248F, /* 2488 */ + 0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,0x2497, /* 2490 */ + 0x2498,0x2499,0x249A,0x249B,0x249C,0x249D,0x249E,0x249F, /* 2498 */ + 0x24A0,0x24A1,0x24A2,0x24A3,0x24A4,0x24A5,0x24A6,0x24A7, /* 24A0 */ + 0x24A8,0x24A9,0x24AA,0x24AB,0x24AC,0x24AD,0x24AE,0x24AF, /* 24A8 */ + 0x24B0,0x24B1,0x24B2,0x24B3,0x24B4,0x24B5,0x24B6,0x24B7, /* 24B0 */ + 0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,0x24BD,0x24BE,0x24BF, /* 24B8 */ + 0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,0x24C5,0x24C6,0x24C7, /* 24C0 */ + 0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,0x24CD,0x24CE,0x24CF, /* 24C8 */ + 0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,0x24BD, /* 24D0 */ + 0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,0x24C5, /* 24D8 */ + 0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,0x24CD, /* 24E0 */ + 0x24CE,0x24CF,0x24EA,0x24EB,0x24EC,0x24ED,0x24EE,0x24EF, /* 24E8 */ + 0x24F0,0x24F1,0x24F2,0x24F3,0x24F4,0x24F5,0x24F6,0x24F7, /* 24F0 */ + 0x24F8,0x24F9,0x24FA,0x24FB,0x24FC,0x24FD,0x24FE,0x24FF /* 24F8 */ +}; + +static const uint16 weight_general_ci_pageFF[256]={ + 0xFF00,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06,0xFF07, /* FF00 */ + 0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F, /* FF08 */ + 0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17, /* FF10 */ + 0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F, /* FF18 */ + 0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, /* FF20 */ + 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, /* FF28 */ + 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37, /* FF30 */ + 0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F, /* FF38 */ + 0xFF40,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, /* FF40 */ + 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, /* FF48 */ + 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37, /* FF50 */ + 0xFF38,0xFF39,0xFF3A,0xFF5B,0xFF5C,0xFF5D,0xFF5E,0xFF5F, /* FF58 */ + 0xFF60,0xFF61,0xFF62,0xFF63,0xFF64,0xFF65,0xFF66,0xFF67, /* FF60 */ + 0xFF68,0xFF69,0xFF6A,0xFF6B,0xFF6C,0xFF6D,0xFF6E,0xFF6F, /* FF68 */ + 0xFF70,0xFF71,0xFF72,0xFF73,0xFF74,0xFF75,0xFF76,0xFF77, /* FF70 */ + 0xFF78,0xFF79,0xFF7A,0xFF7B,0xFF7C,0xFF7D,0xFF7E,0xFF7F, /* FF78 */ + 0xFF80,0xFF81,0xFF82,0xFF83,0xFF84,0xFF85,0xFF86,0xFF87, /* FF80 */ + 0xFF88,0xFF89,0xFF8A,0xFF8B,0xFF8C,0xFF8D,0xFF8E,0xFF8F, /* FF88 */ + 0xFF90,0xFF91,0xFF92,0xFF93,0xFF94,0xFF95,0xFF96,0xFF97, /* FF90 */ + 0xFF98,0xFF99,0xFF9A,0xFF9B,0xFF9C,0xFF9D,0xFF9E,0xFF9F, /* FF98 */ + 0xFFA0,0xFFA1,0xFFA2,0xFFA3,0xFFA4,0xFFA5,0xFFA6,0xFFA7, /* FFA0 */ + 0xFFA8,0xFFA9,0xFFAA,0xFFAB,0xFFAC,0xFFAD,0xFFAE,0xFFAF, /* FFA8 */ + 0xFFB0,0xFFB1,0xFFB2,0xFFB3,0xFFB4,0xFFB5,0xFFB6,0xFFB7, /* FFB0 */ + 0xFFB8,0xFFB9,0xFFBA,0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFBF, /* FFB8 */ + 0xFFC0,0xFFC1,0xFFC2,0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7, /* FFC0 */ + 0xFFC8,0xFFC9,0xFFCA,0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF, /* FFC8 */ + 0xFFD0,0xFFD1,0xFFD2,0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7, /* FFD0 */ + 0xFFD8,0xFFD9,0xFFDA,0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF, /* FFD8 */ + 0xFFE0,0xFFE1,0xFFE2,0xFFE3,0xFFE4,0xFFE5,0xFFE6,0xFFE7, /* FFE0 */ + 0xFFE8,0xFFE9,0xFFEA,0xFFEB,0xFFEC,0xFFED,0xFFEE,0xFFEF, /* FFE8 */ + 0xFFF0,0xFFF1,0xFFF2,0xFFF3,0xFFF4,0xFFF5,0xFFF6,0xFFF7, /* FFF0 */ + 0xFFF8,0xFFF9,0xFFFA,0xFFFB,0xFFFC,0xFFFD,0xFFFE,0xFFFF /* FFF8 */ +}; + +const uint16 * weight_general_ci_index[256]={ + weight_general_ci_page00, weight_general_ci_page01, + weight_general_ci_page02, weight_general_ci_page03, + weight_general_ci_page04, weight_general_ci_page05, + weight_general_ci_page06, weight_general_ci_page07, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + weight_general_ci_page1E, weight_general_ci_page1F, + NULL, weight_general_ci_page21, + NULL, NULL, + weight_general_ci_page24, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, weight_general_ci_pageFF +}; diff --git a/strings/ctype-unicode300-general_mysql500_ci.h b/strings/ctype-unicode300-general_mysql500_ci.h new file mode 100644 index 00000000000..3366c391380 --- /dev/null +++ b/strings/ctype-unicode300-general_mysql500_ci.h @@ -0,0 +1,190 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=weight_general_mysql500_ci \ + --max-char=0xFFFF \ + UnicodeData-3.0.0.txt + +*/ +const uint16 weight_general_mysql500_ci_page00[256]={ + 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, /* 0000 */ + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, /* 0008 */ + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, /* 0010 */ + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, /* 0018 */ + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, /* 0020 */ + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, /* 0028 */ + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, /* 0030 */ + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, /* 0038 */ + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0040 */ + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0048 */ + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0050 */ + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, /* 0058 */ + 0x0060,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0060 */ + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0068 */ + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0070 */ + 0x0058,0x0059,0x005A,0x007B,0x007C,0x007D,0x007E,0x007F, /* 0078 */ + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, /* 0080 */ + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, /* 0088 */ + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, /* 0090 */ + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, /* 0098 */ + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, /* 00A0 */ + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, /* 00A8 */ + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x039C,0x00B6,0x00B7, /* 00B0 */ + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, /* 00B8 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00C0 */ + 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00C8 */ + 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00D7, /* 00D0 */ + 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x00DF, /* 00D8 */ + 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00E0 */ + 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00E8 */ + 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00F7, /* 00F0 */ + 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0059 /* 00F8 */ +}; + +const uint16 * weight_general_mysql500_ci_index[256]={ + weight_general_mysql500_ci_page00, weight_general_ci_page01, + weight_general_ci_page02, weight_general_ci_page03, + weight_general_ci_page04, weight_general_ci_page05, + weight_general_ci_page06, weight_general_ci_page07, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + weight_general_ci_page1E, weight_general_ci_page1F, + NULL, weight_general_ci_page21, + NULL, NULL, + weight_general_ci_page24, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, weight_general_ci_pageFF +}; diff --git a/strings/ctype-unicode520-casefold.h b/strings/ctype-unicode520-casefold.h new file mode 100644 index 00000000000..bcd0ff355be --- /dev/null +++ b/strings/ctype-unicode520-casefold.h @@ -0,0 +1,3192 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2023, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/* + Generated by: + ./unidata-dump \ + --mode=casefold \ + --page-name=u520_casefold_page \ + --index-name=my_u520_casefold_index \ + UnicodeData-5.2.0.txt + +*/ +const MY_CASEFOLD_CHARACTER u520_casefold_page00[256]={ + {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */ + {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */ + {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */ + {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */ + {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */ + {0x000A,0x000A},{0x000B,0x000B}, /* 000A */ + {0x000C,0x000C},{0x000D,0x000D}, /* 000C */ + {0x000E,0x000E},{0x000F,0x000F}, /* 000E */ + {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */ + {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */ + {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */ + {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */ + {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */ + {0x001A,0x001A},{0x001B,0x001B}, /* 001A */ + {0x001C,0x001C},{0x001D,0x001D}, /* 001C */ + {0x001E,0x001E},{0x001F,0x001F}, /* 001E */ + {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */ + {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */ + {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */ + {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */ + {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */ + {0x002A,0x002A},{0x002B,0x002B}, /* 002A */ + {0x002C,0x002C},{0x002D,0x002D}, /* 002C */ + {0x002E,0x002E},{0x002F,0x002F}, /* 002E */ + {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */ + {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */ + {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */ + {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */ + {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */ + {0x003A,0x003A},{0x003B,0x003B}, /* 003A */ + {0x003C,0x003C},{0x003D,0x003D}, /* 003C */ + {0x003E,0x003E},{0x003F,0x003F}, /* 003E */ + {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 004A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 004C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 004E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */ + {0x005A,0x007A},{0x005B,0x005B}, /* 005A */ + {0x005C,0x005C},{0x005D,0x005D}, /* 005C */ + {0x005E,0x005E},{0x005F,0x005F}, /* 005E */ + {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */ + {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */ + {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */ + {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */ + {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */ + {0x004A,0x006A},{0x004B,0x006B}, /* 006A */ + {0x004C,0x006C},{0x004D,0x006D}, /* 006C */ + {0x004E,0x006E},{0x004F,0x006F}, /* 006E */ + {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */ + {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */ + {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */ + {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */ + {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */ + {0x005A,0x007A},{0x007B,0x007B}, /* 007A */ + {0x007C,0x007C},{0x007D,0x007D}, /* 007C */ + {0x007E,0x007E},{0x007F,0x007F}, /* 007E */ + {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */ + {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */ + {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */ + {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */ + {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */ + {0x008A,0x008A},{0x008B,0x008B}, /* 008A */ + {0x008C,0x008C},{0x008D,0x008D}, /* 008C */ + {0x008E,0x008E},{0x008F,0x008F}, /* 008E */ + {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */ + {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */ + {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */ + {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */ + {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */ + {0x009A,0x009A},{0x009B,0x009B}, /* 009A */ + {0x009C,0x009C},{0x009D,0x009D}, /* 009C */ + {0x009E,0x009E},{0x009F,0x009F}, /* 009E */ + {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */ + {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */ + {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */ + {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */ + {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */ + {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */ + {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */ + {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */ + {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */ + {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */ + {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */ + {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */ + {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */ + {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */ + {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */ + {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */ + {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */ + {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */ + {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */ + {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */ + {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */ + {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */ + {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */ + {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */ + {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */ + {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */ + {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */ + {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */ + {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */ + {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */ + {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */ + {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */ + {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */ + {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page01[256]={ + {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */ + {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */ + {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */ + {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */ + {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */ + {0x010A,0x010B},{0x010A,0x010B}, /* 010A */ + {0x010C,0x010D},{0x010C,0x010D}, /* 010C */ + {0x010E,0x010F},{0x010E,0x010F}, /* 010E */ + {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */ + {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */ + {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */ + {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */ + {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */ + {0x011A,0x011B},{0x011A,0x011B}, /* 011A */ + {0x011C,0x011D},{0x011C,0x011D}, /* 011C */ + {0x011E,0x011F},{0x011E,0x011F}, /* 011E */ + {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */ + {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */ + {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */ + {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */ + {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */ + {0x012A,0x012B},{0x012A,0x012B}, /* 012A */ + {0x012C,0x012D},{0x012C,0x012D}, /* 012C */ + {0x012E,0x012F},{0x012E,0x012F}, /* 012E */ + {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */ + {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */ + {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */ + {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */ + {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */ + {0x0139,0x013A},{0x013B,0x013C}, /* 013A */ + {0x013B,0x013C},{0x013D,0x013E}, /* 013C */ + {0x013D,0x013E},{0x013F,0x0140}, /* 013E */ + {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */ + {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */ + {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */ + {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */ + {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */ + {0x014A,0x014B},{0x014A,0x014B}, /* 014A */ + {0x014C,0x014D},{0x014C,0x014D}, /* 014C */ + {0x014E,0x014F},{0x014E,0x014F}, /* 014E */ + {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */ + {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */ + {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */ + {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */ + {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */ + {0x015A,0x015B},{0x015A,0x015B}, /* 015A */ + {0x015C,0x015D},{0x015C,0x015D}, /* 015C */ + {0x015E,0x015F},{0x015E,0x015F}, /* 015E */ + {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */ + {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */ + {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */ + {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */ + {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */ + {0x016A,0x016B},{0x016A,0x016B}, /* 016A */ + {0x016C,0x016D},{0x016C,0x016D}, /* 016C */ + {0x016E,0x016F},{0x016E,0x016F}, /* 016E */ + {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */ + {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */ + {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */ + {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */ + {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */ + {0x0179,0x017A},{0x017B,0x017C}, /* 017A */ + {0x017B,0x017C},{0x017D,0x017E}, /* 017C */ + {0x017D,0x017E},{0x0053,0x017F}, /* 017E */ + {0x0243,0x0180},{0x0181,0x0253}, /* 0180 */ + {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */ + {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */ + {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */ + {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */ + {0x018A,0x0257},{0x018B,0x018C}, /* 018A */ + {0x018B,0x018C},{0x018D,0x018D}, /* 018C */ + {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */ + {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */ + {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */ + {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */ + {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */ + {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */ + {0x023D,0x019A},{0x019B,0x019B}, /* 019A */ + {0x019C,0x026F},{0x019D,0x0272}, /* 019C */ + {0x0220,0x019E},{0x019F,0x0275}, /* 019E */ + {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */ + {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */ + {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */ + {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */ + {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */ + {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */ + {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */ + {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */ + {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */ + {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */ + {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */ + {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */ + {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */ + {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */ + {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */ + {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */ + {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */ + {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */ + {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */ + {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */ + {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */ + {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */ + {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */ + {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */ + {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */ + {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */ + {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */ + {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */ + {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */ + {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */ + {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */ + {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */ + {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */ + {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */ + {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */ + {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */ + {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */ + {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */ + {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */ + {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */ + {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */ + {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */ + {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */ + {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */ + {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */ + {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */ + {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */ + {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page02[256]={ + {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */ + {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */ + {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */ + {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */ + {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */ + {0x020A,0x020B},{0x020A,0x020B}, /* 020A */ + {0x020C,0x020D},{0x020C,0x020D}, /* 020C */ + {0x020E,0x020F},{0x020E,0x020F}, /* 020E */ + {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */ + {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */ + {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */ + {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */ + {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */ + {0x021A,0x021B},{0x021A,0x021B}, /* 021A */ + {0x021C,0x021D},{0x021C,0x021D}, /* 021C */ + {0x021E,0x021F},{0x021E,0x021F}, /* 021E */ + {0x0220,0x019E},{0x0221,0x0221}, /* 0220 */ + {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */ + {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */ + {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */ + {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */ + {0x022A,0x022B},{0x022A,0x022B}, /* 022A */ + {0x022C,0x022D},{0x022C,0x022D}, /* 022C */ + {0x022E,0x022F},{0x022E,0x022F}, /* 022E */ + {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */ + {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */ + {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */ + {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */ + {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */ + {0x023A,0x2C65},{0x023B,0x023C}, /* 023A */ + {0x023B,0x023C},{0x023D,0x019A}, /* 023C */ + {0x023E,0x2C66},{0x2C7E,0x023F}, /* 023E */ + {0x2C7F,0x0240},{0x0241,0x0242}, /* 0240 */ + {0x0241,0x0242},{0x0243,0x0180}, /* 0242 */ + {0x0244,0x0289},{0x0245,0x028C}, /* 0244 */ + {0x0246,0x0247},{0x0246,0x0247}, /* 0246 */ + {0x0248,0x0249},{0x0248,0x0249}, /* 0248 */ + {0x024A,0x024B},{0x024A,0x024B}, /* 024A */ + {0x024C,0x024D},{0x024C,0x024D}, /* 024C */ + {0x024E,0x024F},{0x024E,0x024F}, /* 024E */ + {0x2C6F,0x0250},{0x2C6D,0x0251}, /* 0250 */ + {0x2C70,0x0252},{0x0181,0x0253}, /* 0252 */ + {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */ + {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */ + {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */ + {0x025A,0x025A},{0x0190,0x025B}, /* 025A */ + {0x025C,0x025C},{0x025D,0x025D}, /* 025C */ + {0x025E,0x025E},{0x025F,0x025F}, /* 025E */ + {0x0193,0x0260},{0x0261,0x0261}, /* 0260 */ + {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */ + {0x0264,0x0264},{0x0265,0x0265}, /* 0264 */ + {0x0266,0x0266},{0x0267,0x0267}, /* 0266 */ + {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */ + {0x026A,0x026A},{0x2C62,0x026B}, /* 026A */ + {0x026C,0x026C},{0x026D,0x026D}, /* 026C */ + {0x026E,0x026E},{0x019C,0x026F}, /* 026E */ + {0x0270,0x0270},{0x2C6E,0x0271}, /* 0270 */ + {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */ + {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */ + {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */ + {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */ + {0x027A,0x027A},{0x027B,0x027B}, /* 027A */ + {0x027C,0x027C},{0x2C64,0x027D}, /* 027C */ + {0x027E,0x027E},{0x027F,0x027F}, /* 027E */ + {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */ + {0x0282,0x0282},{0x01A9,0x0283}, /* 0282 */ + {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */ + {0x0286,0x0286},{0x0287,0x0287}, /* 0286 */ + {0x01AE,0x0288},{0x0244,0x0289}, /* 0288 */ + {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */ + {0x0245,0x028C},{0x028D,0x028D}, /* 028C */ + {0x028E,0x028E},{0x028F,0x028F}, /* 028E */ + {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */ + {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */ + {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */ + {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */ + {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */ + {0x029A,0x029A},{0x029B,0x029B}, /* 029A */ + {0x029C,0x029C},{0x029D,0x029D}, /* 029C */ + {0x029E,0x029E},{0x029F,0x029F}, /* 029E */ + {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */ + {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */ + {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */ + {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */ + {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */ + {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */ + {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */ + {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */ + {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */ + {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */ + {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */ + {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */ + {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */ + {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */ + {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */ + {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */ + {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */ + {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */ + {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */ + {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */ + {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */ + {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */ + {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */ + {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */ + {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */ + {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */ + {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */ + {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */ + {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */ + {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */ + {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */ + {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */ + {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */ + {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */ + {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */ + {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */ + {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */ + {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */ + {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */ + {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */ + {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */ + {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */ + {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */ + {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */ + {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */ + {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */ + {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */ + {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page03[256]={ + {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */ + {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */ + {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */ + {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */ + {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */ + {0x030A,0x030A},{0x030B,0x030B}, /* 030A */ + {0x030C,0x030C},{0x030D,0x030D}, /* 030C */ + {0x030E,0x030E},{0x030F,0x030F}, /* 030E */ + {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */ + {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */ + {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */ + {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */ + {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */ + {0x031A,0x031A},{0x031B,0x031B}, /* 031A */ + {0x031C,0x031C},{0x031D,0x031D}, /* 031C */ + {0x031E,0x031E},{0x031F,0x031F}, /* 031E */ + {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */ + {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */ + {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */ + {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */ + {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */ + {0x032A,0x032A},{0x032B,0x032B}, /* 032A */ + {0x032C,0x032C},{0x032D,0x032D}, /* 032C */ + {0x032E,0x032E},{0x032F,0x032F}, /* 032E */ + {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */ + {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */ + {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */ + {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */ + {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */ + {0x033A,0x033A},{0x033B,0x033B}, /* 033A */ + {0x033C,0x033C},{0x033D,0x033D}, /* 033C */ + {0x033E,0x033E},{0x033F,0x033F}, /* 033E */ + {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */ + {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */ + {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */ + {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */ + {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */ + {0x034A,0x034A},{0x034B,0x034B}, /* 034A */ + {0x034C,0x034C},{0x034D,0x034D}, /* 034C */ + {0x034E,0x034E},{0x034F,0x034F}, /* 034E */ + {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */ + {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */ + {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */ + {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */ + {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */ + {0x035A,0x035A},{0x035B,0x035B}, /* 035A */ + {0x035C,0x035C},{0x035D,0x035D}, /* 035C */ + {0x035E,0x035E},{0x035F,0x035F}, /* 035E */ + {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */ + {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */ + {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */ + {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */ + {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */ + {0x036A,0x036A},{0x036B,0x036B}, /* 036A */ + {0x036C,0x036C},{0x036D,0x036D}, /* 036C */ + {0x036E,0x036E},{0x036F,0x036F}, /* 036E */ + {0x0370,0x0371},{0x0370,0x0371}, /* 0370 */ + {0x0372,0x0373},{0x0372,0x0373}, /* 0372 */ + {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */ + {0x0376,0x0377},{0x0376,0x0377}, /* 0376 */ + {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */ + {0x037A,0x037A},{0x03FD,0x037B}, /* 037A */ + {0x03FE,0x037C},{0x03FF,0x037D}, /* 037C */ + {0x037E,0x037E},{0x037F,0x037F}, /* 037E */ + {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */ + {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */ + {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */ + {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */ + {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */ + {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */ + {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */ + {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */ + {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */ + {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */ + {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */ + {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */ + {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */ + {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */ + {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */ + {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */ + {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */ + {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */ + {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */ + {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */ + {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */ + {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */ + {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */ + {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */ + {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */ + {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */ + {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */ + {0x038F,0x03CE},{0x03CF,0x03D7}, /* 03CE */ + {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */ + {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */ + {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */ + {0x03A0,0x03D6},{0x03CF,0x03D7}, /* 03D6 */ + {0x03D8,0x03D9},{0x03D8,0x03D9}, /* 03D8 */ + {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */ + {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */ + {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */ + {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */ + {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */ + {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */ + {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */ + {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */ + {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */ + {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */ + {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */ + {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */ + {0x03F9,0x03F2},{0x03F3,0x03F3}, /* 03F2 */ + {0x03F4,0x03B8},{0x0395,0x03F5}, /* 03F4 */ + {0x03F6,0x03F6},{0x03F7,0x03F8}, /* 03F6 */ + {0x03F7,0x03F8},{0x03F9,0x03F2}, /* 03F8 */ + {0x03FA,0x03FB},{0x03FA,0x03FB}, /* 03FA */ + {0x03FC,0x03FC},{0x03FD,0x037B}, /* 03FC */ + {0x03FE,0x037C},{0x03FF,0x037D} /* 03FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page04[256]={ + {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 040A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 040C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 040E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 041A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 041C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 041E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 042A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 042C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 042E */ + {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */ + {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */ + {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */ + {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */ + {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */ + {0x041A,0x043A},{0x041B,0x043B}, /* 043A */ + {0x041C,0x043C},{0x041D,0x043D}, /* 043C */ + {0x041E,0x043E},{0x041F,0x043F}, /* 043E */ + {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */ + {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */ + {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */ + {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */ + {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */ + {0x042A,0x044A},{0x042B,0x044B}, /* 044A */ + {0x042C,0x044C},{0x042D,0x044D}, /* 044C */ + {0x042E,0x044E},{0x042F,0x044F}, /* 044E */ + {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */ + {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */ + {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */ + {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */ + {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */ + {0x040A,0x045A},{0x040B,0x045B}, /* 045A */ + {0x040C,0x045C},{0x040D,0x045D}, /* 045C */ + {0x040E,0x045E},{0x040F,0x045F}, /* 045E */ + {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */ + {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */ + {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */ + {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */ + {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */ + {0x046A,0x046B},{0x046A,0x046B}, /* 046A */ + {0x046C,0x046D},{0x046C,0x046D}, /* 046C */ + {0x046E,0x046F},{0x046E,0x046F}, /* 046E */ + {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */ + {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */ + {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */ + {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */ + {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */ + {0x047A,0x047B},{0x047A,0x047B}, /* 047A */ + {0x047C,0x047D},{0x047C,0x047D}, /* 047C */ + {0x047E,0x047F},{0x047E,0x047F}, /* 047E */ + {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */ + {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */ + {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */ + {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */ + {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */ + {0x048A,0x048B},{0x048A,0x048B}, /* 048A */ + {0x048C,0x048D},{0x048C,0x048D}, /* 048C */ + {0x048E,0x048F},{0x048E,0x048F}, /* 048E */ + {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */ + {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */ + {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */ + {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */ + {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */ + {0x049A,0x049B},{0x049A,0x049B}, /* 049A */ + {0x049C,0x049D},{0x049C,0x049D}, /* 049C */ + {0x049E,0x049F},{0x049E,0x049F}, /* 049E */ + {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */ + {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */ + {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */ + {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */ + {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */ + {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */ + {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */ + {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */ + {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */ + {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */ + {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */ + {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */ + {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */ + {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */ + {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */ + {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */ + {0x04C0,0x04CF},{0x04C1,0x04C2}, /* 04C0 */ + {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */ + {0x04C3,0x04C4},{0x04C5,0x04C6}, /* 04C4 */ + {0x04C5,0x04C6},{0x04C7,0x04C8}, /* 04C6 */ + {0x04C7,0x04C8},{0x04C9,0x04CA}, /* 04C8 */ + {0x04C9,0x04CA},{0x04CB,0x04CC}, /* 04CA */ + {0x04CB,0x04CC},{0x04CD,0x04CE}, /* 04CC */ + {0x04CD,0x04CE},{0x04C0,0x04CF}, /* 04CE */ + {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */ + {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */ + {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */ + {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */ + {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */ + {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */ + {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */ + {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */ + {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */ + {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */ + {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */ + {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */ + {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */ + {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */ + {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */ + {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */ + {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */ + {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */ + {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */ + {0x04F6,0x04F7},{0x04F6,0x04F7}, /* 04F6 */ + {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */ + {0x04FA,0x04FB},{0x04FA,0x04FB}, /* 04FA */ + {0x04FC,0x04FD},{0x04FC,0x04FD}, /* 04FC */ + {0x04FE,0x04FF},{0x04FE,0x04FF} /* 04FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page05[256]={ + {0x0500,0x0501},{0x0500,0x0501}, /* 0500 */ + {0x0502,0x0503},{0x0502,0x0503}, /* 0502 */ + {0x0504,0x0505},{0x0504,0x0505}, /* 0504 */ + {0x0506,0x0507},{0x0506,0x0507}, /* 0506 */ + {0x0508,0x0509},{0x0508,0x0509}, /* 0508 */ + {0x050A,0x050B},{0x050A,0x050B}, /* 050A */ + {0x050C,0x050D},{0x050C,0x050D}, /* 050C */ + {0x050E,0x050F},{0x050E,0x050F}, /* 050E */ + {0x0510,0x0511},{0x0510,0x0511}, /* 0510 */ + {0x0512,0x0513},{0x0512,0x0513}, /* 0512 */ + {0x0514,0x0515},{0x0514,0x0515}, /* 0514 */ + {0x0516,0x0517},{0x0516,0x0517}, /* 0516 */ + {0x0518,0x0519},{0x0518,0x0519}, /* 0518 */ + {0x051A,0x051B},{0x051A,0x051B}, /* 051A */ + {0x051C,0x051D},{0x051C,0x051D}, /* 051C */ + {0x051E,0x051F},{0x051E,0x051F}, /* 051E */ + {0x0520,0x0521},{0x0520,0x0521}, /* 0520 */ + {0x0522,0x0523},{0x0522,0x0523}, /* 0522 */ + {0x0524,0x0525},{0x0524,0x0525}, /* 0524 */ + {0x0526,0x0526},{0x0527,0x0527}, /* 0526 */ + {0x0528,0x0528},{0x0529,0x0529}, /* 0528 */ + {0x052A,0x052A},{0x052B,0x052B}, /* 052A */ + {0x052C,0x052C},{0x052D,0x052D}, /* 052C */ + {0x052E,0x052E},{0x052F,0x052F}, /* 052E */ + {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 053A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 053C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 053E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 054A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 054C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 054E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */ + {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */ + {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */ + {0x055A,0x055A},{0x055B,0x055B}, /* 055A */ + {0x055C,0x055C},{0x055D,0x055D}, /* 055C */ + {0x055E,0x055E},{0x055F,0x055F}, /* 055E */ + {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */ + {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */ + {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */ + {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */ + {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */ + {0x053A,0x056A},{0x053B,0x056B}, /* 056A */ + {0x053C,0x056C},{0x053D,0x056D}, /* 056C */ + {0x053E,0x056E},{0x053F,0x056F}, /* 056E */ + {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */ + {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */ + {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */ + {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */ + {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */ + {0x054A,0x057A},{0x054B,0x057B}, /* 057A */ + {0x054C,0x057C},{0x054D,0x057D}, /* 057C */ + {0x054E,0x057E},{0x054F,0x057F}, /* 057E */ + {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */ + {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */ + {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */ + {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */ + {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */ + {0x058A,0x058A},{0x058B,0x058B}, /* 058A */ + {0x058C,0x058C},{0x058D,0x058D}, /* 058C */ + {0x058E,0x058E},{0x058F,0x058F}, /* 058E */ + {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */ + {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */ + {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */ + {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */ + {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */ + {0x059A,0x059A},{0x059B,0x059B}, /* 059A */ + {0x059C,0x059C},{0x059D,0x059D}, /* 059C */ + {0x059E,0x059E},{0x059F,0x059F}, /* 059E */ + {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */ + {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */ + {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */ + {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */ + {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */ + {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */ + {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */ + {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */ + {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */ + {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */ + {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */ + {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */ + {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */ + {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */ + {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */ + {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */ + {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */ + {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */ + {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */ + {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */ + {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */ + {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */ + {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */ + {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */ + {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */ + {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */ + {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */ + {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */ + {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */ + {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */ + {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */ + {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */ + {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */ + {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */ + {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */ + {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */ + {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */ + {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */ + {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */ + {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */ + {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */ + {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */ + {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */ + {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */ + {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */ + {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */ + {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */ + {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page06[256]={ /* This page is dummy */ + {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */ + {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */ + {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */ + {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */ + {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */ + {0x060A,0x060A},{0x060B,0x060B}, /* 060A */ + {0x060C,0x060C},{0x060D,0x060D}, /* 060C */ + {0x060E,0x060E},{0x060F,0x060F}, /* 060E */ + {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */ + {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */ + {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */ + {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */ + {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */ + {0x061A,0x061A},{0x061B,0x061B}, /* 061A */ + {0x061C,0x061C},{0x061D,0x061D}, /* 061C */ + {0x061E,0x061E},{0x061F,0x061F}, /* 061E */ + {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */ + {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */ + {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */ + {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */ + {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */ + {0x062A,0x062A},{0x062B,0x062B}, /* 062A */ + {0x062C,0x062C},{0x062D,0x062D}, /* 062C */ + {0x062E,0x062E},{0x062F,0x062F}, /* 062E */ + {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */ + {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */ + {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */ + {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */ + {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */ + {0x063A,0x063A},{0x063B,0x063B}, /* 063A */ + {0x063C,0x063C},{0x063D,0x063D}, /* 063C */ + {0x063E,0x063E},{0x063F,0x063F}, /* 063E */ + {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */ + {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */ + {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */ + {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */ + {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */ + {0x064A,0x064A},{0x064B,0x064B}, /* 064A */ + {0x064C,0x064C},{0x064D,0x064D}, /* 064C */ + {0x064E,0x064E},{0x064F,0x064F}, /* 064E */ + {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */ + {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */ + {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */ + {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */ + {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */ + {0x065A,0x065A},{0x065B,0x065B}, /* 065A */ + {0x065C,0x065C},{0x065D,0x065D}, /* 065C */ + {0x065E,0x065E},{0x065F,0x065F}, /* 065E */ + {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */ + {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */ + {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */ + {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */ + {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */ + {0x066A,0x066A},{0x066B,0x066B}, /* 066A */ + {0x066C,0x066C},{0x066D,0x066D}, /* 066C */ + {0x066E,0x066E},{0x066F,0x066F}, /* 066E */ + {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */ + {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */ + {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */ + {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */ + {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */ + {0x067A,0x067A},{0x067B,0x067B}, /* 067A */ + {0x067C,0x067C},{0x067D,0x067D}, /* 067C */ + {0x067E,0x067E},{0x067F,0x067F}, /* 067E */ + {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */ + {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */ + {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */ + {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */ + {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */ + {0x068A,0x068A},{0x068B,0x068B}, /* 068A */ + {0x068C,0x068C},{0x068D,0x068D}, /* 068C */ + {0x068E,0x068E},{0x068F,0x068F}, /* 068E */ + {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */ + {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */ + {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */ + {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */ + {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */ + {0x069A,0x069A},{0x069B,0x069B}, /* 069A */ + {0x069C,0x069C},{0x069D,0x069D}, /* 069C */ + {0x069E,0x069E},{0x069F,0x069F}, /* 069E */ + {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */ + {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */ + {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */ + {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */ + {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */ + {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */ + {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */ + {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */ + {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */ + {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */ + {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */ + {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */ + {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */ + {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */ + {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */ + {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */ + {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */ + {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */ + {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */ + {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */ + {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */ + {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */ + {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */ + {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */ + {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */ + {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */ + {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */ + {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */ + {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */ + {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */ + {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */ + {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */ + {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */ + {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */ + {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */ + {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */ + {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */ + {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */ + {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */ + {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */ + {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */ + {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */ + {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */ + {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */ + {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */ + {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */ + {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */ + {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page07[256]={ /* This page is dummy */ + {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */ + {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */ + {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */ + {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */ + {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */ + {0x070A,0x070A},{0x070B,0x070B}, /* 070A */ + {0x070C,0x070C},{0x070D,0x070D}, /* 070C */ + {0x070E,0x070E},{0x070F,0x070F}, /* 070E */ + {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */ + {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */ + {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */ + {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */ + {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */ + {0x071A,0x071A},{0x071B,0x071B}, /* 071A */ + {0x071C,0x071C},{0x071D,0x071D}, /* 071C */ + {0x071E,0x071E},{0x071F,0x071F}, /* 071E */ + {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */ + {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */ + {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */ + {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */ + {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */ + {0x072A,0x072A},{0x072B,0x072B}, /* 072A */ + {0x072C,0x072C},{0x072D,0x072D}, /* 072C */ + {0x072E,0x072E},{0x072F,0x072F}, /* 072E */ + {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */ + {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */ + {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */ + {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */ + {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */ + {0x073A,0x073A},{0x073B,0x073B}, /* 073A */ + {0x073C,0x073C},{0x073D,0x073D}, /* 073C */ + {0x073E,0x073E},{0x073F,0x073F}, /* 073E */ + {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */ + {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */ + {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */ + {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */ + {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */ + {0x074A,0x074A},{0x074B,0x074B}, /* 074A */ + {0x074C,0x074C},{0x074D,0x074D}, /* 074C */ + {0x074E,0x074E},{0x074F,0x074F}, /* 074E */ + {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */ + {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */ + {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */ + {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */ + {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */ + {0x075A,0x075A},{0x075B,0x075B}, /* 075A */ + {0x075C,0x075C},{0x075D,0x075D}, /* 075C */ + {0x075E,0x075E},{0x075F,0x075F}, /* 075E */ + {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */ + {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */ + {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */ + {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */ + {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */ + {0x076A,0x076A},{0x076B,0x076B}, /* 076A */ + {0x076C,0x076C},{0x076D,0x076D}, /* 076C */ + {0x076E,0x076E},{0x076F,0x076F}, /* 076E */ + {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */ + {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */ + {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */ + {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */ + {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */ + {0x077A,0x077A},{0x077B,0x077B}, /* 077A */ + {0x077C,0x077C},{0x077D,0x077D}, /* 077C */ + {0x077E,0x077E},{0x077F,0x077F}, /* 077E */ + {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */ + {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */ + {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */ + {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */ + {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */ + {0x078A,0x078A},{0x078B,0x078B}, /* 078A */ + {0x078C,0x078C},{0x078D,0x078D}, /* 078C */ + {0x078E,0x078E},{0x078F,0x078F}, /* 078E */ + {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */ + {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */ + {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */ + {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */ + {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */ + {0x079A,0x079A},{0x079B,0x079B}, /* 079A */ + {0x079C,0x079C},{0x079D,0x079D}, /* 079C */ + {0x079E,0x079E},{0x079F,0x079F}, /* 079E */ + {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */ + {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */ + {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */ + {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */ + {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */ + {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */ + {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */ + {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */ + {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */ + {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */ + {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */ + {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */ + {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */ + {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */ + {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */ + {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */ + {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */ + {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */ + {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */ + {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */ + {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */ + {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */ + {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */ + {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */ + {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */ + {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */ + {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */ + {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */ + {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */ + {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */ + {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */ + {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */ + {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */ + {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */ + {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */ + {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */ + {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */ + {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */ + {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */ + {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */ + {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */ + {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */ + {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */ + {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */ + {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */ + {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */ + {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */ + {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page10[256]={ + {0x1000,0x1000},{0x1001,0x1001}, /* 1000 */ + {0x1002,0x1002},{0x1003,0x1003}, /* 1002 */ + {0x1004,0x1004},{0x1005,0x1005}, /* 1004 */ + {0x1006,0x1006},{0x1007,0x1007}, /* 1006 */ + {0x1008,0x1008},{0x1009,0x1009}, /* 1008 */ + {0x100A,0x100A},{0x100B,0x100B}, /* 100A */ + {0x100C,0x100C},{0x100D,0x100D}, /* 100C */ + {0x100E,0x100E},{0x100F,0x100F}, /* 100E */ + {0x1010,0x1010},{0x1011,0x1011}, /* 1010 */ + {0x1012,0x1012},{0x1013,0x1013}, /* 1012 */ + {0x1014,0x1014},{0x1015,0x1015}, /* 1014 */ + {0x1016,0x1016},{0x1017,0x1017}, /* 1016 */ + {0x1018,0x1018},{0x1019,0x1019}, /* 1018 */ + {0x101A,0x101A},{0x101B,0x101B}, /* 101A */ + {0x101C,0x101C},{0x101D,0x101D}, /* 101C */ + {0x101E,0x101E},{0x101F,0x101F}, /* 101E */ + {0x1020,0x1020},{0x1021,0x1021}, /* 1020 */ + {0x1022,0x1022},{0x1023,0x1023}, /* 1022 */ + {0x1024,0x1024},{0x1025,0x1025}, /* 1024 */ + {0x1026,0x1026},{0x1027,0x1027}, /* 1026 */ + {0x1028,0x1028},{0x1029,0x1029}, /* 1028 */ + {0x102A,0x102A},{0x102B,0x102B}, /* 102A */ + {0x102C,0x102C},{0x102D,0x102D}, /* 102C */ + {0x102E,0x102E},{0x102F,0x102F}, /* 102E */ + {0x1030,0x1030},{0x1031,0x1031}, /* 1030 */ + {0x1032,0x1032},{0x1033,0x1033}, /* 1032 */ + {0x1034,0x1034},{0x1035,0x1035}, /* 1034 */ + {0x1036,0x1036},{0x1037,0x1037}, /* 1036 */ + {0x1038,0x1038},{0x1039,0x1039}, /* 1038 */ + {0x103A,0x103A},{0x103B,0x103B}, /* 103A */ + {0x103C,0x103C},{0x103D,0x103D}, /* 103C */ + {0x103E,0x103E},{0x103F,0x103F}, /* 103E */ + {0x1040,0x1040},{0x1041,0x1041}, /* 1040 */ + {0x1042,0x1042},{0x1043,0x1043}, /* 1042 */ + {0x1044,0x1044},{0x1045,0x1045}, /* 1044 */ + {0x1046,0x1046},{0x1047,0x1047}, /* 1046 */ + {0x1048,0x1048},{0x1049,0x1049}, /* 1048 */ + {0x104A,0x104A},{0x104B,0x104B}, /* 104A */ + {0x104C,0x104C},{0x104D,0x104D}, /* 104C */ + {0x104E,0x104E},{0x104F,0x104F}, /* 104E */ + {0x1050,0x1050},{0x1051,0x1051}, /* 1050 */ + {0x1052,0x1052},{0x1053,0x1053}, /* 1052 */ + {0x1054,0x1054},{0x1055,0x1055}, /* 1054 */ + {0x1056,0x1056},{0x1057,0x1057}, /* 1056 */ + {0x1058,0x1058},{0x1059,0x1059}, /* 1058 */ + {0x105A,0x105A},{0x105B,0x105B}, /* 105A */ + {0x105C,0x105C},{0x105D,0x105D}, /* 105C */ + {0x105E,0x105E},{0x105F,0x105F}, /* 105E */ + {0x1060,0x1060},{0x1061,0x1061}, /* 1060 */ + {0x1062,0x1062},{0x1063,0x1063}, /* 1062 */ + {0x1064,0x1064},{0x1065,0x1065}, /* 1064 */ + {0x1066,0x1066},{0x1067,0x1067}, /* 1066 */ + {0x1068,0x1068},{0x1069,0x1069}, /* 1068 */ + {0x106A,0x106A},{0x106B,0x106B}, /* 106A */ + {0x106C,0x106C},{0x106D,0x106D}, /* 106C */ + {0x106E,0x106E},{0x106F,0x106F}, /* 106E */ + {0x1070,0x1070},{0x1071,0x1071}, /* 1070 */ + {0x1072,0x1072},{0x1073,0x1073}, /* 1072 */ + {0x1074,0x1074},{0x1075,0x1075}, /* 1074 */ + {0x1076,0x1076},{0x1077,0x1077}, /* 1076 */ + {0x1078,0x1078},{0x1079,0x1079}, /* 1078 */ + {0x107A,0x107A},{0x107B,0x107B}, /* 107A */ + {0x107C,0x107C},{0x107D,0x107D}, /* 107C */ + {0x107E,0x107E},{0x107F,0x107F}, /* 107E */ + {0x1080,0x1080},{0x1081,0x1081}, /* 1080 */ + {0x1082,0x1082},{0x1083,0x1083}, /* 1082 */ + {0x1084,0x1084},{0x1085,0x1085}, /* 1084 */ + {0x1086,0x1086},{0x1087,0x1087}, /* 1086 */ + {0x1088,0x1088},{0x1089,0x1089}, /* 1088 */ + {0x108A,0x108A},{0x108B,0x108B}, /* 108A */ + {0x108C,0x108C},{0x108D,0x108D}, /* 108C */ + {0x108E,0x108E},{0x108F,0x108F}, /* 108E */ + {0x1090,0x1090},{0x1091,0x1091}, /* 1090 */ + {0x1092,0x1092},{0x1093,0x1093}, /* 1092 */ + {0x1094,0x1094},{0x1095,0x1095}, /* 1094 */ + {0x1096,0x1096},{0x1097,0x1097}, /* 1096 */ + {0x1098,0x1098},{0x1099,0x1099}, /* 1098 */ + {0x109A,0x109A},{0x109B,0x109B}, /* 109A */ + {0x109C,0x109C},{0x109D,0x109D}, /* 109C */ + {0x109E,0x109E},{0x109F,0x109F}, /* 109E */ + {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 10A0 */ + {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 10A2 */ + {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 10A4 */ + {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 10A6 */ + {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 10A8 */ + {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 10AA */ + {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 10AC */ + {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 10AE */ + {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 10B0 */ + {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 10B2 */ + {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 10B4 */ + {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 10B6 */ + {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 10B8 */ + {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 10BA */ + {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 10BC */ + {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 10BE */ + {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 10C0 */ + {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 10C2 */ + {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 10C4 */ + {0x10C6,0x10C6},{0x10C7,0x10C7}, /* 10C6 */ + {0x10C8,0x10C8},{0x10C9,0x10C9}, /* 10C8 */ + {0x10CA,0x10CA},{0x10CB,0x10CB}, /* 10CA */ + {0x10CC,0x10CC},{0x10CD,0x10CD}, /* 10CC */ + {0x10CE,0x10CE},{0x10CF,0x10CF}, /* 10CE */ + {0x10D0,0x10D0},{0x10D1,0x10D1}, /* 10D0 */ + {0x10D2,0x10D2},{0x10D3,0x10D3}, /* 10D2 */ + {0x10D4,0x10D4},{0x10D5,0x10D5}, /* 10D4 */ + {0x10D6,0x10D6},{0x10D7,0x10D7}, /* 10D6 */ + {0x10D8,0x10D8},{0x10D9,0x10D9}, /* 10D8 */ + {0x10DA,0x10DA},{0x10DB,0x10DB}, /* 10DA */ + {0x10DC,0x10DC},{0x10DD,0x10DD}, /* 10DC */ + {0x10DE,0x10DE},{0x10DF,0x10DF}, /* 10DE */ + {0x10E0,0x10E0},{0x10E1,0x10E1}, /* 10E0 */ + {0x10E2,0x10E2},{0x10E3,0x10E3}, /* 10E2 */ + {0x10E4,0x10E4},{0x10E5,0x10E5}, /* 10E4 */ + {0x10E6,0x10E6},{0x10E7,0x10E7}, /* 10E6 */ + {0x10E8,0x10E8},{0x10E9,0x10E9}, /* 10E8 */ + {0x10EA,0x10EA},{0x10EB,0x10EB}, /* 10EA */ + {0x10EC,0x10EC},{0x10ED,0x10ED}, /* 10EC */ + {0x10EE,0x10EE},{0x10EF,0x10EF}, /* 10EE */ + {0x10F0,0x10F0},{0x10F1,0x10F1}, /* 10F0 */ + {0x10F2,0x10F2},{0x10F3,0x10F3}, /* 10F2 */ + {0x10F4,0x10F4},{0x10F5,0x10F5}, /* 10F4 */ + {0x10F6,0x10F6},{0x10F7,0x10F7}, /* 10F6 */ + {0x10F8,0x10F8},{0x10F9,0x10F9}, /* 10F8 */ + {0x10FA,0x10FA},{0x10FB,0x10FB}, /* 10FA */ + {0x10FC,0x10FC},{0x10FD,0x10FD}, /* 10FC */ + {0x10FE,0x10FE},{0x10FF,0x10FF} /* 10FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page1D[256]={ + {0x1D00,0x1D00},{0x1D01,0x1D01}, /* 1D00 */ + {0x1D02,0x1D02},{0x1D03,0x1D03}, /* 1D02 */ + {0x1D04,0x1D04},{0x1D05,0x1D05}, /* 1D04 */ + {0x1D06,0x1D06},{0x1D07,0x1D07}, /* 1D06 */ + {0x1D08,0x1D08},{0x1D09,0x1D09}, /* 1D08 */ + {0x1D0A,0x1D0A},{0x1D0B,0x1D0B}, /* 1D0A */ + {0x1D0C,0x1D0C},{0x1D0D,0x1D0D}, /* 1D0C */ + {0x1D0E,0x1D0E},{0x1D0F,0x1D0F}, /* 1D0E */ + {0x1D10,0x1D10},{0x1D11,0x1D11}, /* 1D10 */ + {0x1D12,0x1D12},{0x1D13,0x1D13}, /* 1D12 */ + {0x1D14,0x1D14},{0x1D15,0x1D15}, /* 1D14 */ + {0x1D16,0x1D16},{0x1D17,0x1D17}, /* 1D16 */ + {0x1D18,0x1D18},{0x1D19,0x1D19}, /* 1D18 */ + {0x1D1A,0x1D1A},{0x1D1B,0x1D1B}, /* 1D1A */ + {0x1D1C,0x1D1C},{0x1D1D,0x1D1D}, /* 1D1C */ + {0x1D1E,0x1D1E},{0x1D1F,0x1D1F}, /* 1D1E */ + {0x1D20,0x1D20},{0x1D21,0x1D21}, /* 1D20 */ + {0x1D22,0x1D22},{0x1D23,0x1D23}, /* 1D22 */ + {0x1D24,0x1D24},{0x1D25,0x1D25}, /* 1D24 */ + {0x1D26,0x1D26},{0x1D27,0x1D27}, /* 1D26 */ + {0x1D28,0x1D28},{0x1D29,0x1D29}, /* 1D28 */ + {0x1D2A,0x1D2A},{0x1D2B,0x1D2B}, /* 1D2A */ + {0x1D2C,0x1D2C},{0x1D2D,0x1D2D}, /* 1D2C */ + {0x1D2E,0x1D2E},{0x1D2F,0x1D2F}, /* 1D2E */ + {0x1D30,0x1D30},{0x1D31,0x1D31}, /* 1D30 */ + {0x1D32,0x1D32},{0x1D33,0x1D33}, /* 1D32 */ + {0x1D34,0x1D34},{0x1D35,0x1D35}, /* 1D34 */ + {0x1D36,0x1D36},{0x1D37,0x1D37}, /* 1D36 */ + {0x1D38,0x1D38},{0x1D39,0x1D39}, /* 1D38 */ + {0x1D3A,0x1D3A},{0x1D3B,0x1D3B}, /* 1D3A */ + {0x1D3C,0x1D3C},{0x1D3D,0x1D3D}, /* 1D3C */ + {0x1D3E,0x1D3E},{0x1D3F,0x1D3F}, /* 1D3E */ + {0x1D40,0x1D40},{0x1D41,0x1D41}, /* 1D40 */ + {0x1D42,0x1D42},{0x1D43,0x1D43}, /* 1D42 */ + {0x1D44,0x1D44},{0x1D45,0x1D45}, /* 1D44 */ + {0x1D46,0x1D46},{0x1D47,0x1D47}, /* 1D46 */ + {0x1D48,0x1D48},{0x1D49,0x1D49}, /* 1D48 */ + {0x1D4A,0x1D4A},{0x1D4B,0x1D4B}, /* 1D4A */ + {0x1D4C,0x1D4C},{0x1D4D,0x1D4D}, /* 1D4C */ + {0x1D4E,0x1D4E},{0x1D4F,0x1D4F}, /* 1D4E */ + {0x1D50,0x1D50},{0x1D51,0x1D51}, /* 1D50 */ + {0x1D52,0x1D52},{0x1D53,0x1D53}, /* 1D52 */ + {0x1D54,0x1D54},{0x1D55,0x1D55}, /* 1D54 */ + {0x1D56,0x1D56},{0x1D57,0x1D57}, /* 1D56 */ + {0x1D58,0x1D58},{0x1D59,0x1D59}, /* 1D58 */ + {0x1D5A,0x1D5A},{0x1D5B,0x1D5B}, /* 1D5A */ + {0x1D5C,0x1D5C},{0x1D5D,0x1D5D}, /* 1D5C */ + {0x1D5E,0x1D5E},{0x1D5F,0x1D5F}, /* 1D5E */ + {0x1D60,0x1D60},{0x1D61,0x1D61}, /* 1D60 */ + {0x1D62,0x1D62},{0x1D63,0x1D63}, /* 1D62 */ + {0x1D64,0x1D64},{0x1D65,0x1D65}, /* 1D64 */ + {0x1D66,0x1D66},{0x1D67,0x1D67}, /* 1D66 */ + {0x1D68,0x1D68},{0x1D69,0x1D69}, /* 1D68 */ + {0x1D6A,0x1D6A},{0x1D6B,0x1D6B}, /* 1D6A */ + {0x1D6C,0x1D6C},{0x1D6D,0x1D6D}, /* 1D6C */ + {0x1D6E,0x1D6E},{0x1D6F,0x1D6F}, /* 1D6E */ + {0x1D70,0x1D70},{0x1D71,0x1D71}, /* 1D70 */ + {0x1D72,0x1D72},{0x1D73,0x1D73}, /* 1D72 */ + {0x1D74,0x1D74},{0x1D75,0x1D75}, /* 1D74 */ + {0x1D76,0x1D76},{0x1D77,0x1D77}, /* 1D76 */ + {0x1D78,0x1D78},{0xA77D,0x1D79}, /* 1D78 */ + {0x1D7A,0x1D7A},{0x1D7B,0x1D7B}, /* 1D7A */ + {0x1D7C,0x1D7C},{0x2C63,0x1D7D}, /* 1D7C */ + {0x1D7E,0x1D7E},{0x1D7F,0x1D7F}, /* 1D7E */ + {0x1D80,0x1D80},{0x1D81,0x1D81}, /* 1D80 */ + {0x1D82,0x1D82},{0x1D83,0x1D83}, /* 1D82 */ + {0x1D84,0x1D84},{0x1D85,0x1D85}, /* 1D84 */ + {0x1D86,0x1D86},{0x1D87,0x1D87}, /* 1D86 */ + {0x1D88,0x1D88},{0x1D89,0x1D89}, /* 1D88 */ + {0x1D8A,0x1D8A},{0x1D8B,0x1D8B}, /* 1D8A */ + {0x1D8C,0x1D8C},{0x1D8D,0x1D8D}, /* 1D8C */ + {0x1D8E,0x1D8E},{0x1D8F,0x1D8F}, /* 1D8E */ + {0x1D90,0x1D90},{0x1D91,0x1D91}, /* 1D90 */ + {0x1D92,0x1D92},{0x1D93,0x1D93}, /* 1D92 */ + {0x1D94,0x1D94},{0x1D95,0x1D95}, /* 1D94 */ + {0x1D96,0x1D96},{0x1D97,0x1D97}, /* 1D96 */ + {0x1D98,0x1D98},{0x1D99,0x1D99}, /* 1D98 */ + {0x1D9A,0x1D9A},{0x1D9B,0x1D9B}, /* 1D9A */ + {0x1D9C,0x1D9C},{0x1D9D,0x1D9D}, /* 1D9C */ + {0x1D9E,0x1D9E},{0x1D9F,0x1D9F}, /* 1D9E */ + {0x1DA0,0x1DA0},{0x1DA1,0x1DA1}, /* 1DA0 */ + {0x1DA2,0x1DA2},{0x1DA3,0x1DA3}, /* 1DA2 */ + {0x1DA4,0x1DA4},{0x1DA5,0x1DA5}, /* 1DA4 */ + {0x1DA6,0x1DA6},{0x1DA7,0x1DA7}, /* 1DA6 */ + {0x1DA8,0x1DA8},{0x1DA9,0x1DA9}, /* 1DA8 */ + {0x1DAA,0x1DAA},{0x1DAB,0x1DAB}, /* 1DAA */ + {0x1DAC,0x1DAC},{0x1DAD,0x1DAD}, /* 1DAC */ + {0x1DAE,0x1DAE},{0x1DAF,0x1DAF}, /* 1DAE */ + {0x1DB0,0x1DB0},{0x1DB1,0x1DB1}, /* 1DB0 */ + {0x1DB2,0x1DB2},{0x1DB3,0x1DB3}, /* 1DB2 */ + {0x1DB4,0x1DB4},{0x1DB5,0x1DB5}, /* 1DB4 */ + {0x1DB6,0x1DB6},{0x1DB7,0x1DB7}, /* 1DB6 */ + {0x1DB8,0x1DB8},{0x1DB9,0x1DB9}, /* 1DB8 */ + {0x1DBA,0x1DBA},{0x1DBB,0x1DBB}, /* 1DBA */ + {0x1DBC,0x1DBC},{0x1DBD,0x1DBD}, /* 1DBC */ + {0x1DBE,0x1DBE},{0x1DBF,0x1DBF}, /* 1DBE */ + {0x1DC0,0x1DC0},{0x1DC1,0x1DC1}, /* 1DC0 */ + {0x1DC2,0x1DC2},{0x1DC3,0x1DC3}, /* 1DC2 */ + {0x1DC4,0x1DC4},{0x1DC5,0x1DC5}, /* 1DC4 */ + {0x1DC6,0x1DC6},{0x1DC7,0x1DC7}, /* 1DC6 */ + {0x1DC8,0x1DC8},{0x1DC9,0x1DC9}, /* 1DC8 */ + {0x1DCA,0x1DCA},{0x1DCB,0x1DCB}, /* 1DCA */ + {0x1DCC,0x1DCC},{0x1DCD,0x1DCD}, /* 1DCC */ + {0x1DCE,0x1DCE},{0x1DCF,0x1DCF}, /* 1DCE */ + {0x1DD0,0x1DD0},{0x1DD1,0x1DD1}, /* 1DD0 */ + {0x1DD2,0x1DD2},{0x1DD3,0x1DD3}, /* 1DD2 */ + {0x1DD4,0x1DD4},{0x1DD5,0x1DD5}, /* 1DD4 */ + {0x1DD6,0x1DD6},{0x1DD7,0x1DD7}, /* 1DD6 */ + {0x1DD8,0x1DD8},{0x1DD9,0x1DD9}, /* 1DD8 */ + {0x1DDA,0x1DDA},{0x1DDB,0x1DDB}, /* 1DDA */ + {0x1DDC,0x1DDC},{0x1DDD,0x1DDD}, /* 1DDC */ + {0x1DDE,0x1DDE},{0x1DDF,0x1DDF}, /* 1DDE */ + {0x1DE0,0x1DE0},{0x1DE1,0x1DE1}, /* 1DE0 */ + {0x1DE2,0x1DE2},{0x1DE3,0x1DE3}, /* 1DE2 */ + {0x1DE4,0x1DE4},{0x1DE5,0x1DE5}, /* 1DE4 */ + {0x1DE6,0x1DE6},{0x1DE7,0x1DE7}, /* 1DE6 */ + {0x1DE8,0x1DE8},{0x1DE9,0x1DE9}, /* 1DE8 */ + {0x1DEA,0x1DEA},{0x1DEB,0x1DEB}, /* 1DEA */ + {0x1DEC,0x1DEC},{0x1DED,0x1DED}, /* 1DEC */ + {0x1DEE,0x1DEE},{0x1DEF,0x1DEF}, /* 1DEE */ + {0x1DF0,0x1DF0},{0x1DF1,0x1DF1}, /* 1DF0 */ + {0x1DF2,0x1DF2},{0x1DF3,0x1DF3}, /* 1DF2 */ + {0x1DF4,0x1DF4},{0x1DF5,0x1DF5}, /* 1DF4 */ + {0x1DF6,0x1DF6},{0x1DF7,0x1DF7}, /* 1DF6 */ + {0x1DF8,0x1DF8},{0x1DF9,0x1DF9}, /* 1DF8 */ + {0x1DFA,0x1DFA},{0x1DFB,0x1DFB}, /* 1DFA */ + {0x1DFC,0x1DFC},{0x1DFD,0x1DFD}, /* 1DFC */ + {0x1DFE,0x1DFE},{0x1DFF,0x1DFF} /* 1DFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page1E[256]={ + {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */ + {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */ + {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */ + {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */ + {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */ + {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */ + {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */ + {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */ + {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */ + {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */ + {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */ + {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */ + {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */ + {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */ + {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */ + {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */ + {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */ + {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */ + {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */ + {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */ + {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */ + {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */ + {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */ + {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */ + {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */ + {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */ + {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */ + {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */ + {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */ + {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */ + {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */ + {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */ + {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */ + {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */ + {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */ + {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */ + {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */ + {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */ + {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */ + {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */ + {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */ + {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */ + {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */ + {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */ + {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */ + {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */ + {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */ + {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */ + {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */ + {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */ + {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */ + {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */ + {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */ + {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */ + {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */ + {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */ + {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */ + {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */ + {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */ + {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */ + {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */ + {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */ + {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */ + {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */ + {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */ + {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */ + {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */ + {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */ + {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */ + {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */ + {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */ + {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */ + {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */ + {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */ + {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */ + {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */ + {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */ + {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */ + {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */ + {0x1E9E,0x00DF},{0x1E9F,0x1E9F}, /* 1E9E */ + {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */ + {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */ + {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */ + {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */ + {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */ + {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */ + {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */ + {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */ + {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */ + {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */ + {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */ + {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */ + {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */ + {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */ + {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */ + {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */ + {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */ + {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */ + {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */ + {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */ + {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */ + {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */ + {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */ + {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */ + {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */ + {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */ + {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */ + {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */ + {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */ + {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */ + {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */ + {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */ + {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */ + {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */ + {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */ + {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */ + {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */ + {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */ + {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */ + {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */ + {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */ + {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */ + {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */ + {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */ + {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */ + {0x1EFA,0x1EFB},{0x1EFA,0x1EFB}, /* 1EFA */ + {0x1EFC,0x1EFD},{0x1EFC,0x1EFD}, /* 1EFC */ + {0x1EFE,0x1EFF},{0x1EFE,0x1EFF} /* 1EFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page1F[256]={ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */ + {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */ + {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */ + {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */ + {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */ + {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */ + {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */ + {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */ + {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */ + {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */ + {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */ + {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */ + {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */ + {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */ + {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */ + {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */ + {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */ + {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */ + {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */ + {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */ + {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */ + {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */ + {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */ + {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */ + {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */ + {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */ + {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */ + {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */ + {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */ + {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */ + {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */ + {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */ + {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */ + {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */ + {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */ + {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */ + {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */ + {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */ + {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */ + {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */ + {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */ + {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */ + {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */ + {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */ + {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */ + {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */ + {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */ + {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */ + {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */ + {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */ + {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */ + {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */ + {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */ + {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */ + {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */ + {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */ + {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */ + {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */ + {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */ + {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */ + {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */ + {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */ + {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */ + {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */ + {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */ + {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */ + {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */ + {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */ + {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */ + {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */ + {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */ + {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */ + {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */ + {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */ + {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */ + {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */ + {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */ + {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */ + {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */ + {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */ + {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */ + {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */ + {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */ + {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */ + {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page21[256]={ + {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */ + {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */ + {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */ + {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */ + {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */ + {0x210A,0x210A},{0x210B,0x210B}, /* 210A */ + {0x210C,0x210C},{0x210D,0x210D}, /* 210C */ + {0x210E,0x210E},{0x210F,0x210F}, /* 210E */ + {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */ + {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */ + {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */ + {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */ + {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */ + {0x211A,0x211A},{0x211B,0x211B}, /* 211A */ + {0x211C,0x211C},{0x211D,0x211D}, /* 211C */ + {0x211E,0x211E},{0x211F,0x211F}, /* 211E */ + {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */ + {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */ + {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */ + {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */ + {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */ + {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */ + {0x212C,0x212C},{0x212D,0x212D}, /* 212C */ + {0x212E,0x212E},{0x212F,0x212F}, /* 212E */ + {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */ + {0x2132,0x214E},{0x2133,0x2133}, /* 2132 */ + {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */ + {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */ + {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */ + {0x213A,0x213A},{0x213B,0x213B}, /* 213A */ + {0x213C,0x213C},{0x213D,0x213D}, /* 213C */ + {0x213E,0x213E},{0x213F,0x213F}, /* 213E */ + {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */ + {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */ + {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */ + {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */ + {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */ + {0x214A,0x214A},{0x214B,0x214B}, /* 214A */ + {0x214C,0x214C},{0x214D,0x214D}, /* 214C */ + {0x2132,0x214E},{0x214F,0x214F}, /* 214E */ + {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */ + {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */ + {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */ + {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */ + {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */ + {0x215A,0x215A},{0x215B,0x215B}, /* 215A */ + {0x215C,0x215C},{0x215D,0x215D}, /* 215C */ + {0x215E,0x215E},{0x215F,0x215F}, /* 215E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 216A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 216C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 216E */ + {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */ + {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */ + {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */ + {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */ + {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */ + {0x216A,0x217A},{0x216B,0x217B}, /* 217A */ + {0x216C,0x217C},{0x216D,0x217D}, /* 217C */ + {0x216E,0x217E},{0x216F,0x217F}, /* 217E */ + {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */ + {0x2182,0x2182},{0x2183,0x2184}, /* 2182 */ + {0x2183,0x2184},{0x2185,0x2185}, /* 2184 */ + {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */ + {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */ + {0x218A,0x218A},{0x218B,0x218B}, /* 218A */ + {0x218C,0x218C},{0x218D,0x218D}, /* 218C */ + {0x218E,0x218E},{0x218F,0x218F}, /* 218E */ + {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */ + {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */ + {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */ + {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */ + {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */ + {0x219A,0x219A},{0x219B,0x219B}, /* 219A */ + {0x219C,0x219C},{0x219D,0x219D}, /* 219C */ + {0x219E,0x219E},{0x219F,0x219F}, /* 219E */ + {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */ + {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */ + {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */ + {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */ + {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */ + {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */ + {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */ + {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */ + {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */ + {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */ + {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */ + {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */ + {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */ + {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */ + {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */ + {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */ + {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */ + {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */ + {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */ + {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */ + {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */ + {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */ + {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */ + {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */ + {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */ + {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */ + {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */ + {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */ + {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */ + {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */ + {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */ + {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */ + {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */ + {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */ + {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */ + {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */ + {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */ + {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */ + {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */ + {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */ + {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */ + {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */ + {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */ + {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */ + {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */ + {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */ + {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */ + {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page24[256]={ + {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */ + {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */ + {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */ + {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */ + {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */ + {0x240A,0x240A},{0x240B,0x240B}, /* 240A */ + {0x240C,0x240C},{0x240D,0x240D}, /* 240C */ + {0x240E,0x240E},{0x240F,0x240F}, /* 240E */ + {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */ + {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */ + {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */ + {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */ + {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */ + {0x241A,0x241A},{0x241B,0x241B}, /* 241A */ + {0x241C,0x241C},{0x241D,0x241D}, /* 241C */ + {0x241E,0x241E},{0x241F,0x241F}, /* 241E */ + {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */ + {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */ + {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */ + {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */ + {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */ + {0x242A,0x242A},{0x242B,0x242B}, /* 242A */ + {0x242C,0x242C},{0x242D,0x242D}, /* 242C */ + {0x242E,0x242E},{0x242F,0x242F}, /* 242E */ + {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */ + {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */ + {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */ + {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */ + {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */ + {0x243A,0x243A},{0x243B,0x243B}, /* 243A */ + {0x243C,0x243C},{0x243D,0x243D}, /* 243C */ + {0x243E,0x243E},{0x243F,0x243F}, /* 243E */ + {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */ + {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */ + {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */ + {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */ + {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */ + {0x244A,0x244A},{0x244B,0x244B}, /* 244A */ + {0x244C,0x244C},{0x244D,0x244D}, /* 244C */ + {0x244E,0x244E},{0x244F,0x244F}, /* 244E */ + {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */ + {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */ + {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */ + {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */ + {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */ + {0x245A,0x245A},{0x245B,0x245B}, /* 245A */ + {0x245C,0x245C},{0x245D,0x245D}, /* 245C */ + {0x245E,0x245E},{0x245F,0x245F}, /* 245E */ + {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */ + {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */ + {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */ + {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */ + {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */ + {0x246A,0x246A},{0x246B,0x246B}, /* 246A */ + {0x246C,0x246C},{0x246D,0x246D}, /* 246C */ + {0x246E,0x246E},{0x246F,0x246F}, /* 246E */ + {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */ + {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */ + {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */ + {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */ + {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */ + {0x247A,0x247A},{0x247B,0x247B}, /* 247A */ + {0x247C,0x247C},{0x247D,0x247D}, /* 247C */ + {0x247E,0x247E},{0x247F,0x247F}, /* 247E */ + {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */ + {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */ + {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */ + {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */ + {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */ + {0x248A,0x248A},{0x248B,0x248B}, /* 248A */ + {0x248C,0x248C},{0x248D,0x248D}, /* 248C */ + {0x248E,0x248E},{0x248F,0x248F}, /* 248E */ + {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */ + {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */ + {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */ + {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */ + {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */ + {0x249A,0x249A},{0x249B,0x249B}, /* 249A */ + {0x249C,0x249C},{0x249D,0x249D}, /* 249C */ + {0x249E,0x249E},{0x249F,0x249F}, /* 249E */ + {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */ + {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */ + {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */ + {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */ + {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */ + {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */ + {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */ + {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */ + {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */ + {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */ + {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */ + {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */ + {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */ + {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */ + {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */ + {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */ + {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */ + {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */ + {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */ + {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */ + {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */ + {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */ + {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */ + {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */ + {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */ + {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */ + {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */ + {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */ + {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */ + {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */ + {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */ + {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */ + {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */ + {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */ + {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page2C[256]={ + {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C00 */ + {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C02 */ + {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C04 */ + {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C06 */ + {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C08 */ + {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C0A */ + {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C0C */ + {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C0E */ + {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C10 */ + {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C12 */ + {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C14 */ + {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C16 */ + {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C18 */ + {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C1A */ + {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C1C */ + {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C1E */ + {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C20 */ + {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C22 */ + {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C24 */ + {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C26 */ + {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C28 */ + {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C2A */ + {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C2C */ + {0x2C2E,0x2C5E},{0x2C2F,0x2C2F}, /* 2C2E */ + {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C30 */ + {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C32 */ + {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C34 */ + {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C36 */ + {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C38 */ + {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C3A */ + {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C3C */ + {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C3E */ + {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C40 */ + {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C42 */ + {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C44 */ + {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C46 */ + {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C48 */ + {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C4A */ + {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C4C */ + {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C4E */ + {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C50 */ + {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C52 */ + {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C54 */ + {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C56 */ + {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C58 */ + {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C5A */ + {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C5C */ + {0x2C2E,0x2C5E},{0x2C5F,0x2C5F}, /* 2C5E */ + {0x2C60,0x2C61},{0x2C60,0x2C61}, /* 2C60 */ + {0x2C62,0x026B},{0x2C63,0x1D7D}, /* 2C62 */ + {0x2C64,0x027D},{0x023A,0x2C65}, /* 2C64 */ + {0x023E,0x2C66},{0x2C67,0x2C68}, /* 2C66 */ + {0x2C67,0x2C68},{0x2C69,0x2C6A}, /* 2C68 */ + {0x2C69,0x2C6A},{0x2C6B,0x2C6C}, /* 2C6A */ + {0x2C6B,0x2C6C},{0x2C6D,0x0251}, /* 2C6C */ + {0x2C6E,0x0271},{0x2C6F,0x0250}, /* 2C6E */ + {0x2C70,0x0252},{0x2C71,0x2C71}, /* 2C70 */ + {0x2C72,0x2C73},{0x2C72,0x2C73}, /* 2C72 */ + {0x2C74,0x2C74},{0x2C75,0x2C76}, /* 2C74 */ + {0x2C75,0x2C76},{0x2C77,0x2C77}, /* 2C76 */ + {0x2C78,0x2C78},{0x2C79,0x2C79}, /* 2C78 */ + {0x2C7A,0x2C7A},{0x2C7B,0x2C7B}, /* 2C7A */ + {0x2C7C,0x2C7C},{0x2C7D,0x2C7D}, /* 2C7C */ + {0x2C7E,0x023F},{0x2C7F,0x0240}, /* 2C7E */ + {0x2C80,0x2C81},{0x2C80,0x2C81}, /* 2C80 */ + {0x2C82,0x2C83},{0x2C82,0x2C83}, /* 2C82 */ + {0x2C84,0x2C85},{0x2C84,0x2C85}, /* 2C84 */ + {0x2C86,0x2C87},{0x2C86,0x2C87}, /* 2C86 */ + {0x2C88,0x2C89},{0x2C88,0x2C89}, /* 2C88 */ + {0x2C8A,0x2C8B},{0x2C8A,0x2C8B}, /* 2C8A */ + {0x2C8C,0x2C8D},{0x2C8C,0x2C8D}, /* 2C8C */ + {0x2C8E,0x2C8F},{0x2C8E,0x2C8F}, /* 2C8E */ + {0x2C90,0x2C91},{0x2C90,0x2C91}, /* 2C90 */ + {0x2C92,0x2C93},{0x2C92,0x2C93}, /* 2C92 */ + {0x2C94,0x2C95},{0x2C94,0x2C95}, /* 2C94 */ + {0x2C96,0x2C97},{0x2C96,0x2C97}, /* 2C96 */ + {0x2C98,0x2C99},{0x2C98,0x2C99}, /* 2C98 */ + {0x2C9A,0x2C9B},{0x2C9A,0x2C9B}, /* 2C9A */ + {0x2C9C,0x2C9D},{0x2C9C,0x2C9D}, /* 2C9C */ + {0x2C9E,0x2C9F},{0x2C9E,0x2C9F}, /* 2C9E */ + {0x2CA0,0x2CA1},{0x2CA0,0x2CA1}, /* 2CA0 */ + {0x2CA2,0x2CA3},{0x2CA2,0x2CA3}, /* 2CA2 */ + {0x2CA4,0x2CA5},{0x2CA4,0x2CA5}, /* 2CA4 */ + {0x2CA6,0x2CA7},{0x2CA6,0x2CA7}, /* 2CA6 */ + {0x2CA8,0x2CA9},{0x2CA8,0x2CA9}, /* 2CA8 */ + {0x2CAA,0x2CAB},{0x2CAA,0x2CAB}, /* 2CAA */ + {0x2CAC,0x2CAD},{0x2CAC,0x2CAD}, /* 2CAC */ + {0x2CAE,0x2CAF},{0x2CAE,0x2CAF}, /* 2CAE */ + {0x2CB0,0x2CB1},{0x2CB0,0x2CB1}, /* 2CB0 */ + {0x2CB2,0x2CB3},{0x2CB2,0x2CB3}, /* 2CB2 */ + {0x2CB4,0x2CB5},{0x2CB4,0x2CB5}, /* 2CB4 */ + {0x2CB6,0x2CB7},{0x2CB6,0x2CB7}, /* 2CB6 */ + {0x2CB8,0x2CB9},{0x2CB8,0x2CB9}, /* 2CB8 */ + {0x2CBA,0x2CBB},{0x2CBA,0x2CBB}, /* 2CBA */ + {0x2CBC,0x2CBD},{0x2CBC,0x2CBD}, /* 2CBC */ + {0x2CBE,0x2CBF},{0x2CBE,0x2CBF}, /* 2CBE */ + {0x2CC0,0x2CC1},{0x2CC0,0x2CC1}, /* 2CC0 */ + {0x2CC2,0x2CC3},{0x2CC2,0x2CC3}, /* 2CC2 */ + {0x2CC4,0x2CC5},{0x2CC4,0x2CC5}, /* 2CC4 */ + {0x2CC6,0x2CC7},{0x2CC6,0x2CC7}, /* 2CC6 */ + {0x2CC8,0x2CC9},{0x2CC8,0x2CC9}, /* 2CC8 */ + {0x2CCA,0x2CCB},{0x2CCA,0x2CCB}, /* 2CCA */ + {0x2CCC,0x2CCD},{0x2CCC,0x2CCD}, /* 2CCC */ + {0x2CCE,0x2CCF},{0x2CCE,0x2CCF}, /* 2CCE */ + {0x2CD0,0x2CD1},{0x2CD0,0x2CD1}, /* 2CD0 */ + {0x2CD2,0x2CD3},{0x2CD2,0x2CD3}, /* 2CD2 */ + {0x2CD4,0x2CD5},{0x2CD4,0x2CD5}, /* 2CD4 */ + {0x2CD6,0x2CD7},{0x2CD6,0x2CD7}, /* 2CD6 */ + {0x2CD8,0x2CD9},{0x2CD8,0x2CD9}, /* 2CD8 */ + {0x2CDA,0x2CDB},{0x2CDA,0x2CDB}, /* 2CDA */ + {0x2CDC,0x2CDD},{0x2CDC,0x2CDD}, /* 2CDC */ + {0x2CDE,0x2CDF},{0x2CDE,0x2CDF}, /* 2CDE */ + {0x2CE0,0x2CE1},{0x2CE0,0x2CE1}, /* 2CE0 */ + {0x2CE2,0x2CE3},{0x2CE2,0x2CE3}, /* 2CE2 */ + {0x2CE4,0x2CE4},{0x2CE5,0x2CE5}, /* 2CE4 */ + {0x2CE6,0x2CE6},{0x2CE7,0x2CE7}, /* 2CE6 */ + {0x2CE8,0x2CE8},{0x2CE9,0x2CE9}, /* 2CE8 */ + {0x2CEA,0x2CEA},{0x2CEB,0x2CEC}, /* 2CEA */ + {0x2CEB,0x2CEC},{0x2CED,0x2CEE}, /* 2CEC */ + {0x2CED,0x2CEE},{0x2CEF,0x2CEF}, /* 2CEE */ + {0x2CF0,0x2CF0},{0x2CF1,0x2CF1}, /* 2CF0 */ + {0x2CF2,0x2CF2},{0x2CF3,0x2CF3}, /* 2CF2 */ + {0x2CF4,0x2CF4},{0x2CF5,0x2CF5}, /* 2CF4 */ + {0x2CF6,0x2CF6},{0x2CF7,0x2CF7}, /* 2CF6 */ + {0x2CF8,0x2CF8},{0x2CF9,0x2CF9}, /* 2CF8 */ + {0x2CFA,0x2CFA},{0x2CFB,0x2CFB}, /* 2CFA */ + {0x2CFC,0x2CFC},{0x2CFD,0x2CFD}, /* 2CFC */ + {0x2CFE,0x2CFE},{0x2CFF,0x2CFF} /* 2CFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page2D[256]={ + {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 2D00 */ + {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 2D02 */ + {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 2D04 */ + {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 2D06 */ + {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 2D08 */ + {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 2D0A */ + {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 2D0C */ + {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 2D0E */ + {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 2D10 */ + {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 2D12 */ + {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 2D14 */ + {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 2D16 */ + {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 2D18 */ + {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 2D1A */ + {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 2D1C */ + {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 2D1E */ + {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 2D20 */ + {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 2D22 */ + {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 2D24 */ + {0x2D26,0x2D26},{0x2D27,0x2D27}, /* 2D26 */ + {0x2D28,0x2D28},{0x2D29,0x2D29}, /* 2D28 */ + {0x2D2A,0x2D2A},{0x2D2B,0x2D2B}, /* 2D2A */ + {0x2D2C,0x2D2C},{0x2D2D,0x2D2D}, /* 2D2C */ + {0x2D2E,0x2D2E},{0x2D2F,0x2D2F}, /* 2D2E */ + {0x2D30,0x2D30},{0x2D31,0x2D31}, /* 2D30 */ + {0x2D32,0x2D32},{0x2D33,0x2D33}, /* 2D32 */ + {0x2D34,0x2D34},{0x2D35,0x2D35}, /* 2D34 */ + {0x2D36,0x2D36},{0x2D37,0x2D37}, /* 2D36 */ + {0x2D38,0x2D38},{0x2D39,0x2D39}, /* 2D38 */ + {0x2D3A,0x2D3A},{0x2D3B,0x2D3B}, /* 2D3A */ + {0x2D3C,0x2D3C},{0x2D3D,0x2D3D}, /* 2D3C */ + {0x2D3E,0x2D3E},{0x2D3F,0x2D3F}, /* 2D3E */ + {0x2D40,0x2D40},{0x2D41,0x2D41}, /* 2D40 */ + {0x2D42,0x2D42},{0x2D43,0x2D43}, /* 2D42 */ + {0x2D44,0x2D44},{0x2D45,0x2D45}, /* 2D44 */ + {0x2D46,0x2D46},{0x2D47,0x2D47}, /* 2D46 */ + {0x2D48,0x2D48},{0x2D49,0x2D49}, /* 2D48 */ + {0x2D4A,0x2D4A},{0x2D4B,0x2D4B}, /* 2D4A */ + {0x2D4C,0x2D4C},{0x2D4D,0x2D4D}, /* 2D4C */ + {0x2D4E,0x2D4E},{0x2D4F,0x2D4F}, /* 2D4E */ + {0x2D50,0x2D50},{0x2D51,0x2D51}, /* 2D50 */ + {0x2D52,0x2D52},{0x2D53,0x2D53}, /* 2D52 */ + {0x2D54,0x2D54},{0x2D55,0x2D55}, /* 2D54 */ + {0x2D56,0x2D56},{0x2D57,0x2D57}, /* 2D56 */ + {0x2D58,0x2D58},{0x2D59,0x2D59}, /* 2D58 */ + {0x2D5A,0x2D5A},{0x2D5B,0x2D5B}, /* 2D5A */ + {0x2D5C,0x2D5C},{0x2D5D,0x2D5D}, /* 2D5C */ + {0x2D5E,0x2D5E},{0x2D5F,0x2D5F}, /* 2D5E */ + {0x2D60,0x2D60},{0x2D61,0x2D61}, /* 2D60 */ + {0x2D62,0x2D62},{0x2D63,0x2D63}, /* 2D62 */ + {0x2D64,0x2D64},{0x2D65,0x2D65}, /* 2D64 */ + {0x2D66,0x2D66},{0x2D67,0x2D67}, /* 2D66 */ + {0x2D68,0x2D68},{0x2D69,0x2D69}, /* 2D68 */ + {0x2D6A,0x2D6A},{0x2D6B,0x2D6B}, /* 2D6A */ + {0x2D6C,0x2D6C},{0x2D6D,0x2D6D}, /* 2D6C */ + {0x2D6E,0x2D6E},{0x2D6F,0x2D6F}, /* 2D6E */ + {0x2D70,0x2D70},{0x2D71,0x2D71}, /* 2D70 */ + {0x2D72,0x2D72},{0x2D73,0x2D73}, /* 2D72 */ + {0x2D74,0x2D74},{0x2D75,0x2D75}, /* 2D74 */ + {0x2D76,0x2D76},{0x2D77,0x2D77}, /* 2D76 */ + {0x2D78,0x2D78},{0x2D79,0x2D79}, /* 2D78 */ + {0x2D7A,0x2D7A},{0x2D7B,0x2D7B}, /* 2D7A */ + {0x2D7C,0x2D7C},{0x2D7D,0x2D7D}, /* 2D7C */ + {0x2D7E,0x2D7E},{0x2D7F,0x2D7F}, /* 2D7E */ + {0x2D80,0x2D80},{0x2D81,0x2D81}, /* 2D80 */ + {0x2D82,0x2D82},{0x2D83,0x2D83}, /* 2D82 */ + {0x2D84,0x2D84},{0x2D85,0x2D85}, /* 2D84 */ + {0x2D86,0x2D86},{0x2D87,0x2D87}, /* 2D86 */ + {0x2D88,0x2D88},{0x2D89,0x2D89}, /* 2D88 */ + {0x2D8A,0x2D8A},{0x2D8B,0x2D8B}, /* 2D8A */ + {0x2D8C,0x2D8C},{0x2D8D,0x2D8D}, /* 2D8C */ + {0x2D8E,0x2D8E},{0x2D8F,0x2D8F}, /* 2D8E */ + {0x2D90,0x2D90},{0x2D91,0x2D91}, /* 2D90 */ + {0x2D92,0x2D92},{0x2D93,0x2D93}, /* 2D92 */ + {0x2D94,0x2D94},{0x2D95,0x2D95}, /* 2D94 */ + {0x2D96,0x2D96},{0x2D97,0x2D97}, /* 2D96 */ + {0x2D98,0x2D98},{0x2D99,0x2D99}, /* 2D98 */ + {0x2D9A,0x2D9A},{0x2D9B,0x2D9B}, /* 2D9A */ + {0x2D9C,0x2D9C},{0x2D9D,0x2D9D}, /* 2D9C */ + {0x2D9E,0x2D9E},{0x2D9F,0x2D9F}, /* 2D9E */ + {0x2DA0,0x2DA0},{0x2DA1,0x2DA1}, /* 2DA0 */ + {0x2DA2,0x2DA2},{0x2DA3,0x2DA3}, /* 2DA2 */ + {0x2DA4,0x2DA4},{0x2DA5,0x2DA5}, /* 2DA4 */ + {0x2DA6,0x2DA6},{0x2DA7,0x2DA7}, /* 2DA6 */ + {0x2DA8,0x2DA8},{0x2DA9,0x2DA9}, /* 2DA8 */ + {0x2DAA,0x2DAA},{0x2DAB,0x2DAB}, /* 2DAA */ + {0x2DAC,0x2DAC},{0x2DAD,0x2DAD}, /* 2DAC */ + {0x2DAE,0x2DAE},{0x2DAF,0x2DAF}, /* 2DAE */ + {0x2DB0,0x2DB0},{0x2DB1,0x2DB1}, /* 2DB0 */ + {0x2DB2,0x2DB2},{0x2DB3,0x2DB3}, /* 2DB2 */ + {0x2DB4,0x2DB4},{0x2DB5,0x2DB5}, /* 2DB4 */ + {0x2DB6,0x2DB6},{0x2DB7,0x2DB7}, /* 2DB6 */ + {0x2DB8,0x2DB8},{0x2DB9,0x2DB9}, /* 2DB8 */ + {0x2DBA,0x2DBA},{0x2DBB,0x2DBB}, /* 2DBA */ + {0x2DBC,0x2DBC},{0x2DBD,0x2DBD}, /* 2DBC */ + {0x2DBE,0x2DBE},{0x2DBF,0x2DBF}, /* 2DBE */ + {0x2DC0,0x2DC0},{0x2DC1,0x2DC1}, /* 2DC0 */ + {0x2DC2,0x2DC2},{0x2DC3,0x2DC3}, /* 2DC2 */ + {0x2DC4,0x2DC4},{0x2DC5,0x2DC5}, /* 2DC4 */ + {0x2DC6,0x2DC6},{0x2DC7,0x2DC7}, /* 2DC6 */ + {0x2DC8,0x2DC8},{0x2DC9,0x2DC9}, /* 2DC8 */ + {0x2DCA,0x2DCA},{0x2DCB,0x2DCB}, /* 2DCA */ + {0x2DCC,0x2DCC},{0x2DCD,0x2DCD}, /* 2DCC */ + {0x2DCE,0x2DCE},{0x2DCF,0x2DCF}, /* 2DCE */ + {0x2DD0,0x2DD0},{0x2DD1,0x2DD1}, /* 2DD0 */ + {0x2DD2,0x2DD2},{0x2DD3,0x2DD3}, /* 2DD2 */ + {0x2DD4,0x2DD4},{0x2DD5,0x2DD5}, /* 2DD4 */ + {0x2DD6,0x2DD6},{0x2DD7,0x2DD7}, /* 2DD6 */ + {0x2DD8,0x2DD8},{0x2DD9,0x2DD9}, /* 2DD8 */ + {0x2DDA,0x2DDA},{0x2DDB,0x2DDB}, /* 2DDA */ + {0x2DDC,0x2DDC},{0x2DDD,0x2DDD}, /* 2DDC */ + {0x2DDE,0x2DDE},{0x2DDF,0x2DDF}, /* 2DDE */ + {0x2DE0,0x2DE0},{0x2DE1,0x2DE1}, /* 2DE0 */ + {0x2DE2,0x2DE2},{0x2DE3,0x2DE3}, /* 2DE2 */ + {0x2DE4,0x2DE4},{0x2DE5,0x2DE5}, /* 2DE4 */ + {0x2DE6,0x2DE6},{0x2DE7,0x2DE7}, /* 2DE6 */ + {0x2DE8,0x2DE8},{0x2DE9,0x2DE9}, /* 2DE8 */ + {0x2DEA,0x2DEA},{0x2DEB,0x2DEB}, /* 2DEA */ + {0x2DEC,0x2DEC},{0x2DED,0x2DED}, /* 2DEC */ + {0x2DEE,0x2DEE},{0x2DEF,0x2DEF}, /* 2DEE */ + {0x2DF0,0x2DF0},{0x2DF1,0x2DF1}, /* 2DF0 */ + {0x2DF2,0x2DF2},{0x2DF3,0x2DF3}, /* 2DF2 */ + {0x2DF4,0x2DF4},{0x2DF5,0x2DF5}, /* 2DF4 */ + {0x2DF6,0x2DF6},{0x2DF7,0x2DF7}, /* 2DF6 */ + {0x2DF8,0x2DF8},{0x2DF9,0x2DF9}, /* 2DF8 */ + {0x2DFA,0x2DFA},{0x2DFB,0x2DFB}, /* 2DFA */ + {0x2DFC,0x2DFC},{0x2DFD,0x2DFD}, /* 2DFC */ + {0x2DFE,0x2DFE},{0x2DFF,0x2DFF} /* 2DFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_pageA6[256]={ + {0xA600,0xA600},{0xA601,0xA601}, /* A600 */ + {0xA602,0xA602},{0xA603,0xA603}, /* A602 */ + {0xA604,0xA604},{0xA605,0xA605}, /* A604 */ + {0xA606,0xA606},{0xA607,0xA607}, /* A606 */ + {0xA608,0xA608},{0xA609,0xA609}, /* A608 */ + {0xA60A,0xA60A},{0xA60B,0xA60B}, /* A60A */ + {0xA60C,0xA60C},{0xA60D,0xA60D}, /* A60C */ + {0xA60E,0xA60E},{0xA60F,0xA60F}, /* A60E */ + {0xA610,0xA610},{0xA611,0xA611}, /* A610 */ + {0xA612,0xA612},{0xA613,0xA613}, /* A612 */ + {0xA614,0xA614},{0xA615,0xA615}, /* A614 */ + {0xA616,0xA616},{0xA617,0xA617}, /* A616 */ + {0xA618,0xA618},{0xA619,0xA619}, /* A618 */ + {0xA61A,0xA61A},{0xA61B,0xA61B}, /* A61A */ + {0xA61C,0xA61C},{0xA61D,0xA61D}, /* A61C */ + {0xA61E,0xA61E},{0xA61F,0xA61F}, /* A61E */ + {0xA620,0xA620},{0xA621,0xA621}, /* A620 */ + {0xA622,0xA622},{0xA623,0xA623}, /* A622 */ + {0xA624,0xA624},{0xA625,0xA625}, /* A624 */ + {0xA626,0xA626},{0xA627,0xA627}, /* A626 */ + {0xA628,0xA628},{0xA629,0xA629}, /* A628 */ + {0xA62A,0xA62A},{0xA62B,0xA62B}, /* A62A */ + {0xA62C,0xA62C},{0xA62D,0xA62D}, /* A62C */ + {0xA62E,0xA62E},{0xA62F,0xA62F}, /* A62E */ + {0xA630,0xA630},{0xA631,0xA631}, /* A630 */ + {0xA632,0xA632},{0xA633,0xA633}, /* A632 */ + {0xA634,0xA634},{0xA635,0xA635}, /* A634 */ + {0xA636,0xA636},{0xA637,0xA637}, /* A636 */ + {0xA638,0xA638},{0xA639,0xA639}, /* A638 */ + {0xA63A,0xA63A},{0xA63B,0xA63B}, /* A63A */ + {0xA63C,0xA63C},{0xA63D,0xA63D}, /* A63C */ + {0xA63E,0xA63E},{0xA63F,0xA63F}, /* A63E */ + {0xA640,0xA641},{0xA640,0xA641}, /* A640 */ + {0xA642,0xA643},{0xA642,0xA643}, /* A642 */ + {0xA644,0xA645},{0xA644,0xA645}, /* A644 */ + {0xA646,0xA647},{0xA646,0xA647}, /* A646 */ + {0xA648,0xA649},{0xA648,0xA649}, /* A648 */ + {0xA64A,0xA64B},{0xA64A,0xA64B}, /* A64A */ + {0xA64C,0xA64D},{0xA64C,0xA64D}, /* A64C */ + {0xA64E,0xA64F},{0xA64E,0xA64F}, /* A64E */ + {0xA650,0xA651},{0xA650,0xA651}, /* A650 */ + {0xA652,0xA653},{0xA652,0xA653}, /* A652 */ + {0xA654,0xA655},{0xA654,0xA655}, /* A654 */ + {0xA656,0xA657},{0xA656,0xA657}, /* A656 */ + {0xA658,0xA659},{0xA658,0xA659}, /* A658 */ + {0xA65A,0xA65B},{0xA65A,0xA65B}, /* A65A */ + {0xA65C,0xA65D},{0xA65C,0xA65D}, /* A65C */ + {0xA65E,0xA65F},{0xA65E,0xA65F}, /* A65E */ + {0xA660,0xA660},{0xA661,0xA661}, /* A660 */ + {0xA662,0xA663},{0xA662,0xA663}, /* A662 */ + {0xA664,0xA665},{0xA664,0xA665}, /* A664 */ + {0xA666,0xA667},{0xA666,0xA667}, /* A666 */ + {0xA668,0xA669},{0xA668,0xA669}, /* A668 */ + {0xA66A,0xA66B},{0xA66A,0xA66B}, /* A66A */ + {0xA66C,0xA66D},{0xA66C,0xA66D}, /* A66C */ + {0xA66E,0xA66E},{0xA66F,0xA66F}, /* A66E */ + {0xA670,0xA670},{0xA671,0xA671}, /* A670 */ + {0xA672,0xA672},{0xA673,0xA673}, /* A672 */ + {0xA674,0xA674},{0xA675,0xA675}, /* A674 */ + {0xA676,0xA676},{0xA677,0xA677}, /* A676 */ + {0xA678,0xA678},{0xA679,0xA679}, /* A678 */ + {0xA67A,0xA67A},{0xA67B,0xA67B}, /* A67A */ + {0xA67C,0xA67C},{0xA67D,0xA67D}, /* A67C */ + {0xA67E,0xA67E},{0xA67F,0xA67F}, /* A67E */ + {0xA680,0xA681},{0xA680,0xA681}, /* A680 */ + {0xA682,0xA683},{0xA682,0xA683}, /* A682 */ + {0xA684,0xA685},{0xA684,0xA685}, /* A684 */ + {0xA686,0xA687},{0xA686,0xA687}, /* A686 */ + {0xA688,0xA689},{0xA688,0xA689}, /* A688 */ + {0xA68A,0xA68B},{0xA68A,0xA68B}, /* A68A */ + {0xA68C,0xA68D},{0xA68C,0xA68D}, /* A68C */ + {0xA68E,0xA68F},{0xA68E,0xA68F}, /* A68E */ + {0xA690,0xA691},{0xA690,0xA691}, /* A690 */ + {0xA692,0xA693},{0xA692,0xA693}, /* A692 */ + {0xA694,0xA695},{0xA694,0xA695}, /* A694 */ + {0xA696,0xA697},{0xA696,0xA697}, /* A696 */ + {0xA698,0xA698},{0xA699,0xA699}, /* A698 */ + {0xA69A,0xA69A},{0xA69B,0xA69B}, /* A69A */ + {0xA69C,0xA69C},{0xA69D,0xA69D}, /* A69C */ + {0xA69E,0xA69E},{0xA69F,0xA69F}, /* A69E */ + {0xA6A0,0xA6A0},{0xA6A1,0xA6A1}, /* A6A0 */ + {0xA6A2,0xA6A2},{0xA6A3,0xA6A3}, /* A6A2 */ + {0xA6A4,0xA6A4},{0xA6A5,0xA6A5}, /* A6A4 */ + {0xA6A6,0xA6A6},{0xA6A7,0xA6A7}, /* A6A6 */ + {0xA6A8,0xA6A8},{0xA6A9,0xA6A9}, /* A6A8 */ + {0xA6AA,0xA6AA},{0xA6AB,0xA6AB}, /* A6AA */ + {0xA6AC,0xA6AC},{0xA6AD,0xA6AD}, /* A6AC */ + {0xA6AE,0xA6AE},{0xA6AF,0xA6AF}, /* A6AE */ + {0xA6B0,0xA6B0},{0xA6B1,0xA6B1}, /* A6B0 */ + {0xA6B2,0xA6B2},{0xA6B3,0xA6B3}, /* A6B2 */ + {0xA6B4,0xA6B4},{0xA6B5,0xA6B5}, /* A6B4 */ + {0xA6B6,0xA6B6},{0xA6B7,0xA6B7}, /* A6B6 */ + {0xA6B8,0xA6B8},{0xA6B9,0xA6B9}, /* A6B8 */ + {0xA6BA,0xA6BA},{0xA6BB,0xA6BB}, /* A6BA */ + {0xA6BC,0xA6BC},{0xA6BD,0xA6BD}, /* A6BC */ + {0xA6BE,0xA6BE},{0xA6BF,0xA6BF}, /* A6BE */ + {0xA6C0,0xA6C0},{0xA6C1,0xA6C1}, /* A6C0 */ + {0xA6C2,0xA6C2},{0xA6C3,0xA6C3}, /* A6C2 */ + {0xA6C4,0xA6C4},{0xA6C5,0xA6C5}, /* A6C4 */ + {0xA6C6,0xA6C6},{0xA6C7,0xA6C7}, /* A6C6 */ + {0xA6C8,0xA6C8},{0xA6C9,0xA6C9}, /* A6C8 */ + {0xA6CA,0xA6CA},{0xA6CB,0xA6CB}, /* A6CA */ + {0xA6CC,0xA6CC},{0xA6CD,0xA6CD}, /* A6CC */ + {0xA6CE,0xA6CE},{0xA6CF,0xA6CF}, /* A6CE */ + {0xA6D0,0xA6D0},{0xA6D1,0xA6D1}, /* A6D0 */ + {0xA6D2,0xA6D2},{0xA6D3,0xA6D3}, /* A6D2 */ + {0xA6D4,0xA6D4},{0xA6D5,0xA6D5}, /* A6D4 */ + {0xA6D6,0xA6D6},{0xA6D7,0xA6D7}, /* A6D6 */ + {0xA6D8,0xA6D8},{0xA6D9,0xA6D9}, /* A6D8 */ + {0xA6DA,0xA6DA},{0xA6DB,0xA6DB}, /* A6DA */ + {0xA6DC,0xA6DC},{0xA6DD,0xA6DD}, /* A6DC */ + {0xA6DE,0xA6DE},{0xA6DF,0xA6DF}, /* A6DE */ + {0xA6E0,0xA6E0},{0xA6E1,0xA6E1}, /* A6E0 */ + {0xA6E2,0xA6E2},{0xA6E3,0xA6E3}, /* A6E2 */ + {0xA6E4,0xA6E4},{0xA6E5,0xA6E5}, /* A6E4 */ + {0xA6E6,0xA6E6},{0xA6E7,0xA6E7}, /* A6E6 */ + {0xA6E8,0xA6E8},{0xA6E9,0xA6E9}, /* A6E8 */ + {0xA6EA,0xA6EA},{0xA6EB,0xA6EB}, /* A6EA */ + {0xA6EC,0xA6EC},{0xA6ED,0xA6ED}, /* A6EC */ + {0xA6EE,0xA6EE},{0xA6EF,0xA6EF}, /* A6EE */ + {0xA6F0,0xA6F0},{0xA6F1,0xA6F1}, /* A6F0 */ + {0xA6F2,0xA6F2},{0xA6F3,0xA6F3}, /* A6F2 */ + {0xA6F4,0xA6F4},{0xA6F5,0xA6F5}, /* A6F4 */ + {0xA6F6,0xA6F6},{0xA6F7,0xA6F7}, /* A6F6 */ + {0xA6F8,0xA6F8},{0xA6F9,0xA6F9}, /* A6F8 */ + {0xA6FA,0xA6FA},{0xA6FB,0xA6FB}, /* A6FA */ + {0xA6FC,0xA6FC},{0xA6FD,0xA6FD}, /* A6FC */ + {0xA6FE,0xA6FE},{0xA6FF,0xA6FF} /* A6FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_pageA7[256]={ + {0xA700,0xA700},{0xA701,0xA701}, /* A700 */ + {0xA702,0xA702},{0xA703,0xA703}, /* A702 */ + {0xA704,0xA704},{0xA705,0xA705}, /* A704 */ + {0xA706,0xA706},{0xA707,0xA707}, /* A706 */ + {0xA708,0xA708},{0xA709,0xA709}, /* A708 */ + {0xA70A,0xA70A},{0xA70B,0xA70B}, /* A70A */ + {0xA70C,0xA70C},{0xA70D,0xA70D}, /* A70C */ + {0xA70E,0xA70E},{0xA70F,0xA70F}, /* A70E */ + {0xA710,0xA710},{0xA711,0xA711}, /* A710 */ + {0xA712,0xA712},{0xA713,0xA713}, /* A712 */ + {0xA714,0xA714},{0xA715,0xA715}, /* A714 */ + {0xA716,0xA716},{0xA717,0xA717}, /* A716 */ + {0xA718,0xA718},{0xA719,0xA719}, /* A718 */ + {0xA71A,0xA71A},{0xA71B,0xA71B}, /* A71A */ + {0xA71C,0xA71C},{0xA71D,0xA71D}, /* A71C */ + {0xA71E,0xA71E},{0xA71F,0xA71F}, /* A71E */ + {0xA720,0xA720},{0xA721,0xA721}, /* A720 */ + {0xA722,0xA723},{0xA722,0xA723}, /* A722 */ + {0xA724,0xA725},{0xA724,0xA725}, /* A724 */ + {0xA726,0xA727},{0xA726,0xA727}, /* A726 */ + {0xA728,0xA729},{0xA728,0xA729}, /* A728 */ + {0xA72A,0xA72B},{0xA72A,0xA72B}, /* A72A */ + {0xA72C,0xA72D},{0xA72C,0xA72D}, /* A72C */ + {0xA72E,0xA72F},{0xA72E,0xA72F}, /* A72E */ + {0xA730,0xA730},{0xA731,0xA731}, /* A730 */ + {0xA732,0xA733},{0xA732,0xA733}, /* A732 */ + {0xA734,0xA735},{0xA734,0xA735}, /* A734 */ + {0xA736,0xA737},{0xA736,0xA737}, /* A736 */ + {0xA738,0xA739},{0xA738,0xA739}, /* A738 */ + {0xA73A,0xA73B},{0xA73A,0xA73B}, /* A73A */ + {0xA73C,0xA73D},{0xA73C,0xA73D}, /* A73C */ + {0xA73E,0xA73F},{0xA73E,0xA73F}, /* A73E */ + {0xA740,0xA741},{0xA740,0xA741}, /* A740 */ + {0xA742,0xA743},{0xA742,0xA743}, /* A742 */ + {0xA744,0xA745},{0xA744,0xA745}, /* A744 */ + {0xA746,0xA747},{0xA746,0xA747}, /* A746 */ + {0xA748,0xA749},{0xA748,0xA749}, /* A748 */ + {0xA74A,0xA74B},{0xA74A,0xA74B}, /* A74A */ + {0xA74C,0xA74D},{0xA74C,0xA74D}, /* A74C */ + {0xA74E,0xA74F},{0xA74E,0xA74F}, /* A74E */ + {0xA750,0xA751},{0xA750,0xA751}, /* A750 */ + {0xA752,0xA753},{0xA752,0xA753}, /* A752 */ + {0xA754,0xA755},{0xA754,0xA755}, /* A754 */ + {0xA756,0xA757},{0xA756,0xA757}, /* A756 */ + {0xA758,0xA759},{0xA758,0xA759}, /* A758 */ + {0xA75A,0xA75B},{0xA75A,0xA75B}, /* A75A */ + {0xA75C,0xA75D},{0xA75C,0xA75D}, /* A75C */ + {0xA75E,0xA75F},{0xA75E,0xA75F}, /* A75E */ + {0xA760,0xA761},{0xA760,0xA761}, /* A760 */ + {0xA762,0xA763},{0xA762,0xA763}, /* A762 */ + {0xA764,0xA765},{0xA764,0xA765}, /* A764 */ + {0xA766,0xA767},{0xA766,0xA767}, /* A766 */ + {0xA768,0xA769},{0xA768,0xA769}, /* A768 */ + {0xA76A,0xA76B},{0xA76A,0xA76B}, /* A76A */ + {0xA76C,0xA76D},{0xA76C,0xA76D}, /* A76C */ + {0xA76E,0xA76F},{0xA76E,0xA76F}, /* A76E */ + {0xA770,0xA770},{0xA771,0xA771}, /* A770 */ + {0xA772,0xA772},{0xA773,0xA773}, /* A772 */ + {0xA774,0xA774},{0xA775,0xA775}, /* A774 */ + {0xA776,0xA776},{0xA777,0xA777}, /* A776 */ + {0xA778,0xA778},{0xA779,0xA77A}, /* A778 */ + {0xA779,0xA77A},{0xA77B,0xA77C}, /* A77A */ + {0xA77B,0xA77C},{0xA77D,0x1D79}, /* A77C */ + {0xA77E,0xA77F},{0xA77E,0xA77F}, /* A77E */ + {0xA780,0xA781},{0xA780,0xA781}, /* A780 */ + {0xA782,0xA783},{0xA782,0xA783}, /* A782 */ + {0xA784,0xA785},{0xA784,0xA785}, /* A784 */ + {0xA786,0xA787},{0xA786,0xA787}, /* A786 */ + {0xA788,0xA788},{0xA789,0xA789}, /* A788 */ + {0xA78A,0xA78A},{0xA78B,0xA78C}, /* A78A */ + {0xA78B,0xA78C},{0xA78D,0xA78D}, /* A78C */ + {0xA78E,0xA78E},{0xA78F,0xA78F}, /* A78E */ + {0xA790,0xA790},{0xA791,0xA791}, /* A790 */ + {0xA792,0xA792},{0xA793,0xA793}, /* A792 */ + {0xA794,0xA794},{0xA795,0xA795}, /* A794 */ + {0xA796,0xA796},{0xA797,0xA797}, /* A796 */ + {0xA798,0xA798},{0xA799,0xA799}, /* A798 */ + {0xA79A,0xA79A},{0xA79B,0xA79B}, /* A79A */ + {0xA79C,0xA79C},{0xA79D,0xA79D}, /* A79C */ + {0xA79E,0xA79E},{0xA79F,0xA79F}, /* A79E */ + {0xA7A0,0xA7A0},{0xA7A1,0xA7A1}, /* A7A0 */ + {0xA7A2,0xA7A2},{0xA7A3,0xA7A3}, /* A7A2 */ + {0xA7A4,0xA7A4},{0xA7A5,0xA7A5}, /* A7A4 */ + {0xA7A6,0xA7A6},{0xA7A7,0xA7A7}, /* A7A6 */ + {0xA7A8,0xA7A8},{0xA7A9,0xA7A9}, /* A7A8 */ + {0xA7AA,0xA7AA},{0xA7AB,0xA7AB}, /* A7AA */ + {0xA7AC,0xA7AC},{0xA7AD,0xA7AD}, /* A7AC */ + {0xA7AE,0xA7AE},{0xA7AF,0xA7AF}, /* A7AE */ + {0xA7B0,0xA7B0},{0xA7B1,0xA7B1}, /* A7B0 */ + {0xA7B2,0xA7B2},{0xA7B3,0xA7B3}, /* A7B2 */ + {0xA7B4,0xA7B4},{0xA7B5,0xA7B5}, /* A7B4 */ + {0xA7B6,0xA7B6},{0xA7B7,0xA7B7}, /* A7B6 */ + {0xA7B8,0xA7B8},{0xA7B9,0xA7B9}, /* A7B8 */ + {0xA7BA,0xA7BA},{0xA7BB,0xA7BB}, /* A7BA */ + {0xA7BC,0xA7BC},{0xA7BD,0xA7BD}, /* A7BC */ + {0xA7BE,0xA7BE},{0xA7BF,0xA7BF}, /* A7BE */ + {0xA7C0,0xA7C0},{0xA7C1,0xA7C1}, /* A7C0 */ + {0xA7C2,0xA7C2},{0xA7C3,0xA7C3}, /* A7C2 */ + {0xA7C4,0xA7C4},{0xA7C5,0xA7C5}, /* A7C4 */ + {0xA7C6,0xA7C6},{0xA7C7,0xA7C7}, /* A7C6 */ + {0xA7C8,0xA7C8},{0xA7C9,0xA7C9}, /* A7C8 */ + {0xA7CA,0xA7CA},{0xA7CB,0xA7CB}, /* A7CA */ + {0xA7CC,0xA7CC},{0xA7CD,0xA7CD}, /* A7CC */ + {0xA7CE,0xA7CE},{0xA7CF,0xA7CF}, /* A7CE */ + {0xA7D0,0xA7D0},{0xA7D1,0xA7D1}, /* A7D0 */ + {0xA7D2,0xA7D2},{0xA7D3,0xA7D3}, /* A7D2 */ + {0xA7D4,0xA7D4},{0xA7D5,0xA7D5}, /* A7D4 */ + {0xA7D6,0xA7D6},{0xA7D7,0xA7D7}, /* A7D6 */ + {0xA7D8,0xA7D8},{0xA7D9,0xA7D9}, /* A7D8 */ + {0xA7DA,0xA7DA},{0xA7DB,0xA7DB}, /* A7DA */ + {0xA7DC,0xA7DC},{0xA7DD,0xA7DD}, /* A7DC */ + {0xA7DE,0xA7DE},{0xA7DF,0xA7DF}, /* A7DE */ + {0xA7E0,0xA7E0},{0xA7E1,0xA7E1}, /* A7E0 */ + {0xA7E2,0xA7E2},{0xA7E3,0xA7E3}, /* A7E2 */ + {0xA7E4,0xA7E4},{0xA7E5,0xA7E5}, /* A7E4 */ + {0xA7E6,0xA7E6},{0xA7E7,0xA7E7}, /* A7E6 */ + {0xA7E8,0xA7E8},{0xA7E9,0xA7E9}, /* A7E8 */ + {0xA7EA,0xA7EA},{0xA7EB,0xA7EB}, /* A7EA */ + {0xA7EC,0xA7EC},{0xA7ED,0xA7ED}, /* A7EC */ + {0xA7EE,0xA7EE},{0xA7EF,0xA7EF}, /* A7EE */ + {0xA7F0,0xA7F0},{0xA7F1,0xA7F1}, /* A7F0 */ + {0xA7F2,0xA7F2},{0xA7F3,0xA7F3}, /* A7F2 */ + {0xA7F4,0xA7F4},{0xA7F5,0xA7F5}, /* A7F4 */ + {0xA7F6,0xA7F6},{0xA7F7,0xA7F7}, /* A7F6 */ + {0xA7F8,0xA7F8},{0xA7F9,0xA7F9}, /* A7F8 */ + {0xA7FA,0xA7FA},{0xA7FB,0xA7FB}, /* A7FA */ + {0xA7FC,0xA7FC},{0xA7FD,0xA7FD}, /* A7FC */ + {0xA7FE,0xA7FE},{0xA7FF,0xA7FF} /* A7FE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_pageFF[256]={ + {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */ + {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */ + {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */ + {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */ + {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */ + {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */ + {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */ + {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */ + {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */ + {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */ + {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */ + {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */ + {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */ + {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */ + {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */ + {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */ + {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */ + {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */ + {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */ + {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */ + {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */ + {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */ + {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */ + {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */ + {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */ + {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */ + {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */ + {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */ + {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */ + {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */ + {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */ + {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */ + {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */ + {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */ + {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */ + {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */ + {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */ + {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */ + {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */ + {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */ + {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */ + {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */ + {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */ + {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */ + {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */ + {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */ + {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */ + {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */ + {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */ + {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */ + {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */ + {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */ + {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */ + {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */ + {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */ + {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */ + {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */ + {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */ + {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */ + {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */ + {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */ + {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */ + {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */ + {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */ + {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */ + {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */ + {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */ + {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */ + {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */ + {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */ + {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */ + {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */ + {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */ + {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */ + {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */ + {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */ + {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */ + {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */ + {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */ + {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */ + {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */ + {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */ + {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */ + {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */ + {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */ + {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */ + {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */ + {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */ + {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */ + {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */ + {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */ + {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */ + {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */ + {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */ + {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */ + {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */ + {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */ + {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */ + {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */ + {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */ + {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */ + {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */ + {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */ + {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */ + {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */ + {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */ + {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */ + {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */ + {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */ + {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */ + {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */ + {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */ + {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */ + {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */ + {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */ + {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */ +}; + +static const MY_CASEFOLD_CHARACTER u520_casefold_page104[256]={ + {0x10400,0x10428},{0x10401,0x10429}, /* 10400 */ + {0x10402,0x1042A},{0x10403,0x1042B}, /* 10402 */ + {0x10404,0x1042C},{0x10405,0x1042D}, /* 10404 */ + {0x10406,0x1042E},{0x10407,0x1042F}, /* 10406 */ + {0x10408,0x10430},{0x10409,0x10431}, /* 10408 */ + {0x1040A,0x10432},{0x1040B,0x10433}, /* 1040A */ + {0x1040C,0x10434},{0x1040D,0x10435}, /* 1040C */ + {0x1040E,0x10436},{0x1040F,0x10437}, /* 1040E */ + {0x10410,0x10438},{0x10411,0x10439}, /* 10410 */ + {0x10412,0x1043A},{0x10413,0x1043B}, /* 10412 */ + {0x10414,0x1043C},{0x10415,0x1043D}, /* 10414 */ + {0x10416,0x1043E},{0x10417,0x1043F}, /* 10416 */ + {0x10418,0x10440},{0x10419,0x10441}, /* 10418 */ + {0x1041A,0x10442},{0x1041B,0x10443}, /* 1041A */ + {0x1041C,0x10444},{0x1041D,0x10445}, /* 1041C */ + {0x1041E,0x10446},{0x1041F,0x10447}, /* 1041E */ + {0x10420,0x10448},{0x10421,0x10449}, /* 10420 */ + {0x10422,0x1044A},{0x10423,0x1044B}, /* 10422 */ + {0x10424,0x1044C},{0x10425,0x1044D}, /* 10424 */ + {0x10426,0x1044E},{0x10427,0x1044F}, /* 10426 */ + {0x10400,0x10428},{0x10401,0x10429}, /* 10428 */ + {0x10402,0x1042A},{0x10403,0x1042B}, /* 1042A */ + {0x10404,0x1042C},{0x10405,0x1042D}, /* 1042C */ + {0x10406,0x1042E},{0x10407,0x1042F}, /* 1042E */ + {0x10408,0x10430},{0x10409,0x10431}, /* 10430 */ + {0x1040A,0x10432},{0x1040B,0x10433}, /* 10432 */ + {0x1040C,0x10434},{0x1040D,0x10435}, /* 10434 */ + {0x1040E,0x10436},{0x1040F,0x10437}, /* 10436 */ + {0x10410,0x10438},{0x10411,0x10439}, /* 10438 */ + {0x10412,0x1043A},{0x10413,0x1043B}, /* 1043A */ + {0x10414,0x1043C},{0x10415,0x1043D}, /* 1043C */ + {0x10416,0x1043E},{0x10417,0x1043F}, /* 1043E */ + {0x10418,0x10440},{0x10419,0x10441}, /* 10440 */ + {0x1041A,0x10442},{0x1041B,0x10443}, /* 10442 */ + {0x1041C,0x10444},{0x1041D,0x10445}, /* 10444 */ + {0x1041E,0x10446},{0x1041F,0x10447}, /* 10446 */ + {0x10420,0x10448},{0x10421,0x10449}, /* 10448 */ + {0x10422,0x1044A},{0x10423,0x1044B}, /* 1044A */ + {0x10424,0x1044C},{0x10425,0x1044D}, /* 1044C */ + {0x10426,0x1044E},{0x10427,0x1044F}, /* 1044E */ + {0x10450,0x10450},{0x10451,0x10451}, /* 10450 */ + {0x10452,0x10452},{0x10453,0x10453}, /* 10452 */ + {0x10454,0x10454},{0x10455,0x10455}, /* 10454 */ + {0x10456,0x10456},{0x10457,0x10457}, /* 10456 */ + {0x10458,0x10458},{0x10459,0x10459}, /* 10458 */ + {0x1045A,0x1045A},{0x1045B,0x1045B}, /* 1045A */ + {0x1045C,0x1045C},{0x1045D,0x1045D}, /* 1045C */ + {0x1045E,0x1045E},{0x1045F,0x1045F}, /* 1045E */ + {0x10460,0x10460},{0x10461,0x10461}, /* 10460 */ + {0x10462,0x10462},{0x10463,0x10463}, /* 10462 */ + {0x10464,0x10464},{0x10465,0x10465}, /* 10464 */ + {0x10466,0x10466},{0x10467,0x10467}, /* 10466 */ + {0x10468,0x10468},{0x10469,0x10469}, /* 10468 */ + {0x1046A,0x1046A},{0x1046B,0x1046B}, /* 1046A */ + {0x1046C,0x1046C},{0x1046D,0x1046D}, /* 1046C */ + {0x1046E,0x1046E},{0x1046F,0x1046F}, /* 1046E */ + {0x10470,0x10470},{0x10471,0x10471}, /* 10470 */ + {0x10472,0x10472},{0x10473,0x10473}, /* 10472 */ + {0x10474,0x10474},{0x10475,0x10475}, /* 10474 */ + {0x10476,0x10476},{0x10477,0x10477}, /* 10476 */ + {0x10478,0x10478},{0x10479,0x10479}, /* 10478 */ + {0x1047A,0x1047A},{0x1047B,0x1047B}, /* 1047A */ + {0x1047C,0x1047C},{0x1047D,0x1047D}, /* 1047C */ + {0x1047E,0x1047E},{0x1047F,0x1047F}, /* 1047E */ + {0x10480,0x10480},{0x10481,0x10481}, /* 10480 */ + {0x10482,0x10482},{0x10483,0x10483}, /* 10482 */ + {0x10484,0x10484},{0x10485,0x10485}, /* 10484 */ + {0x10486,0x10486},{0x10487,0x10487}, /* 10486 */ + {0x10488,0x10488},{0x10489,0x10489}, /* 10488 */ + {0x1048A,0x1048A},{0x1048B,0x1048B}, /* 1048A */ + {0x1048C,0x1048C},{0x1048D,0x1048D}, /* 1048C */ + {0x1048E,0x1048E},{0x1048F,0x1048F}, /* 1048E */ + {0x10490,0x10490},{0x10491,0x10491}, /* 10490 */ + {0x10492,0x10492},{0x10493,0x10493}, /* 10492 */ + {0x10494,0x10494},{0x10495,0x10495}, /* 10494 */ + {0x10496,0x10496},{0x10497,0x10497}, /* 10496 */ + {0x10498,0x10498},{0x10499,0x10499}, /* 10498 */ + {0x1049A,0x1049A},{0x1049B,0x1049B}, /* 1049A */ + {0x1049C,0x1049C},{0x1049D,0x1049D}, /* 1049C */ + {0x1049E,0x1049E},{0x1049F,0x1049F}, /* 1049E */ + {0x104A0,0x104A0},{0x104A1,0x104A1}, /* 104A0 */ + {0x104A2,0x104A2},{0x104A3,0x104A3}, /* 104A2 */ + {0x104A4,0x104A4},{0x104A5,0x104A5}, /* 104A4 */ + {0x104A6,0x104A6},{0x104A7,0x104A7}, /* 104A6 */ + {0x104A8,0x104A8},{0x104A9,0x104A9}, /* 104A8 */ + {0x104AA,0x104AA},{0x104AB,0x104AB}, /* 104AA */ + {0x104AC,0x104AC},{0x104AD,0x104AD}, /* 104AC */ + {0x104AE,0x104AE},{0x104AF,0x104AF}, /* 104AE */ + {0x104B0,0x104B0},{0x104B1,0x104B1}, /* 104B0 */ + {0x104B2,0x104B2},{0x104B3,0x104B3}, /* 104B2 */ + {0x104B4,0x104B4},{0x104B5,0x104B5}, /* 104B4 */ + {0x104B6,0x104B6},{0x104B7,0x104B7}, /* 104B6 */ + {0x104B8,0x104B8},{0x104B9,0x104B9}, /* 104B8 */ + {0x104BA,0x104BA},{0x104BB,0x104BB}, /* 104BA */ + {0x104BC,0x104BC},{0x104BD,0x104BD}, /* 104BC */ + {0x104BE,0x104BE},{0x104BF,0x104BF}, /* 104BE */ + {0x104C0,0x104C0},{0x104C1,0x104C1}, /* 104C0 */ + {0x104C2,0x104C2},{0x104C3,0x104C3}, /* 104C2 */ + {0x104C4,0x104C4},{0x104C5,0x104C5}, /* 104C4 */ + {0x104C6,0x104C6},{0x104C7,0x104C7}, /* 104C6 */ + {0x104C8,0x104C8},{0x104C9,0x104C9}, /* 104C8 */ + {0x104CA,0x104CA},{0x104CB,0x104CB}, /* 104CA */ + {0x104CC,0x104CC},{0x104CD,0x104CD}, /* 104CC */ + {0x104CE,0x104CE},{0x104CF,0x104CF}, /* 104CE */ + {0x104D0,0x104D0},{0x104D1,0x104D1}, /* 104D0 */ + {0x104D2,0x104D2},{0x104D3,0x104D3}, /* 104D2 */ + {0x104D4,0x104D4},{0x104D5,0x104D5}, /* 104D4 */ + {0x104D6,0x104D6},{0x104D7,0x104D7}, /* 104D6 */ + {0x104D8,0x104D8},{0x104D9,0x104D9}, /* 104D8 */ + {0x104DA,0x104DA},{0x104DB,0x104DB}, /* 104DA */ + {0x104DC,0x104DC},{0x104DD,0x104DD}, /* 104DC */ + {0x104DE,0x104DE},{0x104DF,0x104DF}, /* 104DE */ + {0x104E0,0x104E0},{0x104E1,0x104E1}, /* 104E0 */ + {0x104E2,0x104E2},{0x104E3,0x104E3}, /* 104E2 */ + {0x104E4,0x104E4},{0x104E5,0x104E5}, /* 104E4 */ + {0x104E6,0x104E6},{0x104E7,0x104E7}, /* 104E6 */ + {0x104E8,0x104E8},{0x104E9,0x104E9}, /* 104E8 */ + {0x104EA,0x104EA},{0x104EB,0x104EB}, /* 104EA */ + {0x104EC,0x104EC},{0x104ED,0x104ED}, /* 104EC */ + {0x104EE,0x104EE},{0x104EF,0x104EF}, /* 104EE */ + {0x104F0,0x104F0},{0x104F1,0x104F1}, /* 104F0 */ + {0x104F2,0x104F2},{0x104F3,0x104F3}, /* 104F2 */ + {0x104F4,0x104F4},{0x104F5,0x104F5}, /* 104F4 */ + {0x104F6,0x104F6},{0x104F7,0x104F7}, /* 104F6 */ + {0x104F8,0x104F8},{0x104F9,0x104F9}, /* 104F8 */ + {0x104FA,0x104FA},{0x104FB,0x104FB}, /* 104FA */ + {0x104FC,0x104FC},{0x104FD,0x104FD}, /* 104FC */ + {0x104FE,0x104FE},{0x104FF,0x104FF} /* 104FE */ +}; + +const MY_CASEFOLD_CHARACTER * my_u520_casefold_index[4352]={ + u520_casefold_page00, u520_casefold_page01, u520_casefold_page02, u520_casefold_page03, u520_casefold_page04, u520_casefold_page05, u520_casefold_page06, u520_casefold_page07, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u520_casefold_page10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, u520_casefold_page1D, u520_casefold_page1E, u520_casefold_page1F, + NULL, u520_casefold_page21, NULL, NULL, u520_casefold_page24, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u520_casefold_page2C, u520_casefold_page2D, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u520_casefold_pageA6, u520_casefold_pageA7, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, u520_casefold_pageFF, + NULL, NULL, NULL, NULL, u520_casefold_page104, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; diff --git a/strings/ctype-unidata.c b/strings/ctype-unidata.c new file mode 100644 index 00000000000..77bec5418c4 --- /dev/null +++ b/strings/ctype-unidata.c @@ -0,0 +1,97 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2020, MariaDB + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1335 USA */ + +#include "strings_def.h" +#include +#include "ctype-mb.h" + +#ifndef EILSEQ +#define EILSEQ ENOENT +#endif + + +#include "ctype-unidata.h" +#include "ctype-unicode300-general_ci.h" +#include "ctype-unicode300-general_mysql500_ci.h" +#include "ctype-unicode300-casefold.h" +#include "ctype-unicode300-casefold-tr.h" +#include "ctype-unicode520-casefold.h" +#include "ctype-unicode1400-casefold.h" +#include "ctype-unicode1400-casefold-tr.h" + + + +MY_CASEFOLD_INFO my_casefold_default= +{ + 0xFFFF, + my_u300_casefold_index, + weight_general_ci_index +}; + + +/* + Turkish lower/upper mapping: + 1. LOWER(0x0049 LATIN CAPITAL LETTER I) -> + 0x0131 LATIN SMALL LETTER DOTLESS I + 2. UPPER(0x0069 LATIN SMALL LETTER I) -> + 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +*/ + +MY_CASEFOLD_INFO my_casefold_turkish= +{ + 0xFFFF, + my_u300tr_casefold_index, + weight_general_ci_index +}; + + +/* + general_mysql500_ci is very similar to general_ci, but maps sorting order + for U+00DF to 0x00DF instead of 0x0053. +*/ +MY_CASEFOLD_INFO my_casefold_mysql500= +{ + 0xFFFF, + my_u300_casefold_index, + weight_general_mysql500_ci_index +}; + + + +MY_CASEFOLD_INFO my_casefold_unicode520= +{ + 0x10FFFF, + my_u520_casefold_index, + NULL +}; + + +MY_CASEFOLD_INFO my_casefold_unicode1400= +{ + 0x10FFFF, + my_u1400_casefold_index, + NULL +}; + + +MY_CASEFOLD_INFO my_casefold_unicode1400tr= +{ + 0x10FFFF, + my_u1400tr_casefold_index, + NULL +}; diff --git a/strings/ctype-unidata.h b/strings/ctype-unidata.h index 9900fd0cedd..0bcf96c09a0 100644 --- a/strings/ctype-unidata.h +++ b/strings/ctype-unidata.h @@ -1,7 +1,7 @@ #ifndef CTYPE_UNIDATA_H_INCLUDED #define CTYPE_UNIDATA_H_INCLUDED /* - Copyright (c) 2018 MariaDB Corporation + Copyright (c) 2018, 2023 MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,12 +17,128 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#define MY_UNICASE_INFO_DEFAULT_MAXCHAR 0xFFFF -extern MY_UNICASE_CHARACTER my_unicase_default_page00[256]; -extern MY_UNICASE_CHARACTER *my_unicase_default_pages[256]; -extern MY_UNICASE_CHARACTER my_unicase_mysql500_page00[256]; -extern MY_UNICASE_CHARACTER *my_unicase_mysql500_pages[256]; +extern const uint16 weight_general_ci_page00[256]; +extern const uint16 *weight_general_ci_index[256]; +extern const uint16 weight_general_mysql500_ci_page00[256]; +extern const uint16 *weight_general_mysql500_ci_index[256]; + +extern const MY_CASEFOLD_CHARACTER u300_casefold_page00[256]; + +static inline my_wc_t my_u300_tolower_7bit(uchar ch) +{ + return u300_casefold_page00[ch].tolower; +} + +static inline my_wc_t my_u300_toupper_7bit(uchar ch) +{ + return u300_casefold_page00[ch].toupper; +} + + +static inline my_wc_t my_general_ci_bmp_char_to_weight(my_wc_t wc) +{ + const uint16 *page; + DBUG_ASSERT((wc >> 8) < array_elements(weight_general_ci_index)); + page= weight_general_ci_index[wc >> 8]; + return page ? page[wc & 0xFF] : wc; +} + + +static inline my_wc_t my_general_ci_char_to_weight(my_wc_t wc) +{ + if ((wc >> 8) < array_elements(weight_general_ci_index)) + return my_general_ci_bmp_char_to_weight(wc); + return MY_CS_REPLACEMENT_CHARACTER; +} + + +static inline my_wc_t my_general_mysql500_ci_bmp_char_to_weight(my_wc_t wc) +{ + const uint16 *page; + DBUG_ASSERT((wc >> 8) < array_elements(weight_general_mysql500_ci_index)); + page= weight_general_mysql500_ci_index[wc >> 8]; + return page ? page[wc & 0xFF] : wc; +} + + +static inline void my_tosort_unicode_bmp(MY_CASEFOLD_INFO *uni_plane, + my_wc_t *wc) +{ + const uint16 *page; + DBUG_ASSERT(*wc <= uni_plane->maxchar); + if ((page= uni_plane->simple_weight[*wc >> 8])) + *wc= page[*wc & 0xFF]; +} + + +static inline void my_tosort_unicode(MY_CASEFOLD_INFO *uni_plane, + my_wc_t *wc) +{ + if (*wc <= uni_plane->maxchar) + { + const uint16 *page; + if ((page= uni_plane->simple_weight[*wc >> 8])) + *wc= page[*wc & 0xFF]; + } + else + { + *wc= MY_CS_REPLACEMENT_CHARACTER; + } +} + + +static inline void +my_tolower_unicode_bmp(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc) +{ + const MY_CASEFOLD_CHARACTER *page; + DBUG_ASSERT(*wc <= uni_plane->maxchar); + if ((page= uni_plane->page[*wc >> 8])) + *wc= page[*wc & 0xFF].tolower; +} + + +static inline void +my_toupper_unicode_bmp(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc) +{ + const MY_CASEFOLD_CHARACTER *page; + DBUG_ASSERT(*wc <= uni_plane->maxchar); + if ((page= uni_plane->page[*wc >> 8])) + *wc= page[*wc & 0xFF].toupper; +} + + +static inline void +my_tolower_unicode(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc) +{ + if (*wc <= uni_plane->maxchar) + { + const MY_CASEFOLD_CHARACTER *page; + if ((page= uni_plane->page[(*wc >> 8)])) + *wc= page[*wc & 0xFF].tolower; + } +} + + +static inline void +my_toupper_unicode(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc) +{ + if (*wc <= uni_plane->maxchar) + { + const MY_CASEFOLD_CHARACTER *page; + if ((page= uni_plane->page[(*wc >> 8)])) + *wc= page[*wc & 0xFF].toupper; + } +} + + +extern MY_CASEFOLD_INFO my_casefold_default; +extern MY_CASEFOLD_INFO my_casefold_turkish; +extern MY_CASEFOLD_INFO my_casefold_mysql500; +extern MY_CASEFOLD_INFO my_casefold_unicode520; +extern MY_CASEFOLD_INFO my_casefold_unicode1400; +extern MY_CASEFOLD_INFO my_casefold_unicode1400tr; + size_t my_strxfrm_pad_nweights_unicode(uchar *str, uchar *strend, size_t nweights); size_t my_strxfrm_pad_unicode(uchar *str, uchar *strend); diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 06a10034a33..121a3f945f6 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -113,4560 +113,20 @@ int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e) #include "my_uctype.h" -MY_UNICASE_CHARACTER my_unicase_default_page00[]={ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x0053}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} -}; - - -/* - Almost similar to my_unicase_default_page00, but maps sorting order - for U+00DF to 0x00DF instead of 0x0053. -*/ -MY_UNICASE_CHARACTER my_unicase_mysql500_page00[]={ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x00DF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} -}; - - -static MY_UNICASE_CHARACTER plane01[]={ - {0x0100,0x0101,0x0041}, {0x0100,0x0101,0x0041}, - {0x0102,0x0103,0x0041}, {0x0102,0x0103,0x0041}, - {0x0104,0x0105,0x0041}, {0x0104,0x0105,0x0041}, - {0x0106,0x0107,0x0043}, {0x0106,0x0107,0x0043}, - {0x0108,0x0109,0x0043}, {0x0108,0x0109,0x0043}, - {0x010A,0x010B,0x0043}, {0x010A,0x010B,0x0043}, - {0x010C,0x010D,0x0043}, {0x010C,0x010D,0x0043}, - {0x010E,0x010F,0x0044}, {0x010E,0x010F,0x0044}, - {0x0110,0x0111,0x0110}, {0x0110,0x0111,0x0110}, - {0x0112,0x0113,0x0045}, {0x0112,0x0113,0x0045}, - {0x0114,0x0115,0x0045}, {0x0114,0x0115,0x0045}, - {0x0116,0x0117,0x0045}, {0x0116,0x0117,0x0045}, - {0x0118,0x0119,0x0045}, {0x0118,0x0119,0x0045}, - {0x011A,0x011B,0x0045}, {0x011A,0x011B,0x0045}, - {0x011C,0x011D,0x0047}, {0x011C,0x011D,0x0047}, - {0x011E,0x011F,0x0047}, {0x011E,0x011F,0x0047}, - {0x0120,0x0121,0x0047}, {0x0120,0x0121,0x0047}, - {0x0122,0x0123,0x0047}, {0x0122,0x0123,0x0047}, - {0x0124,0x0125,0x0048}, {0x0124,0x0125,0x0048}, - {0x0126,0x0127,0x0126}, {0x0126,0x0127,0x0126}, - {0x0128,0x0129,0x0049}, {0x0128,0x0129,0x0049}, - {0x012A,0x012B,0x0049}, {0x012A,0x012B,0x0049}, - {0x012C,0x012D,0x0049}, {0x012C,0x012D,0x0049}, - {0x012E,0x012F,0x0049}, {0x012E,0x012F,0x0049}, - {0x0130,0x0069,0x0049}, {0x0049,0x0131,0x0049}, - {0x0132,0x0133,0x0132}, {0x0132,0x0133,0x0132}, - {0x0134,0x0135,0x004A}, {0x0134,0x0135,0x004A}, - {0x0136,0x0137,0x004B}, {0x0136,0x0137,0x004B}, - {0x0138,0x0138,0x0138}, {0x0139,0x013A,0x004C}, - {0x0139,0x013A,0x004C}, {0x013B,0x013C,0x004C}, - {0x013B,0x013C,0x004C}, {0x013D,0x013E,0x004C}, - {0x013D,0x013E,0x004C}, {0x013F,0x0140,0x013F}, - {0x013F,0x0140,0x013F}, {0x0141,0x0142,0x0141}, - {0x0141,0x0142,0x0141}, {0x0143,0x0144,0x004E}, - {0x0143,0x0144,0x004E}, {0x0145,0x0146,0x004E}, - {0x0145,0x0146,0x004E}, {0x0147,0x0148,0x004E}, - {0x0147,0x0148,0x004E}, {0x0149,0x0149,0x0149}, - {0x014A,0x014B,0x014A}, {0x014A,0x014B,0x014A}, - {0x014C,0x014D,0x004F}, {0x014C,0x014D,0x004F}, - {0x014E,0x014F,0x004F}, {0x014E,0x014F,0x004F}, - {0x0150,0x0151,0x004F}, {0x0150,0x0151,0x004F}, - {0x0152,0x0153,0x0152}, {0x0152,0x0153,0x0152}, - {0x0154,0x0155,0x0052}, {0x0154,0x0155,0x0052}, - {0x0156,0x0157,0x0052}, {0x0156,0x0157,0x0052}, - {0x0158,0x0159,0x0052}, {0x0158,0x0159,0x0052}, - {0x015A,0x015B,0x0053}, {0x015A,0x015B,0x0053}, - {0x015C,0x015D,0x0053}, {0x015C,0x015D,0x0053}, - {0x015E,0x015F,0x0053}, {0x015E,0x015F,0x0053}, - {0x0160,0x0161,0x0053}, {0x0160,0x0161,0x0053}, - {0x0162,0x0163,0x0054}, {0x0162,0x0163,0x0054}, - {0x0164,0x0165,0x0054}, {0x0164,0x0165,0x0054}, - {0x0166,0x0167,0x0166}, {0x0166,0x0167,0x0166}, - {0x0168,0x0169,0x0055}, {0x0168,0x0169,0x0055}, - {0x016A,0x016B,0x0055}, {0x016A,0x016B,0x0055}, - {0x016C,0x016D,0x0055}, {0x016C,0x016D,0x0055}, - {0x016E,0x016F,0x0055}, {0x016E,0x016F,0x0055}, - {0x0170,0x0171,0x0055}, {0x0170,0x0171,0x0055}, - {0x0172,0x0173,0x0055}, {0x0172,0x0173,0x0055}, - {0x0174,0x0175,0x0057}, {0x0174,0x0175,0x0057}, - {0x0176,0x0177,0x0059}, {0x0176,0x0177,0x0059}, - {0x0178,0x00FF,0x0059}, {0x0179,0x017A,0x005A}, - {0x0179,0x017A,0x005A}, {0x017B,0x017C,0x005A}, - {0x017B,0x017C,0x005A}, {0x017D,0x017E,0x005A}, - {0x017D,0x017E,0x005A}, {0x0053,0x017F,0x0053}, - {0x0180,0x0180,0x0180}, {0x0181,0x0253,0x0181}, - {0x0182,0x0183,0x0182}, {0x0182,0x0183,0x0182}, - {0x0184,0x0185,0x0184}, {0x0184,0x0185,0x0184}, - {0x0186,0x0254,0x0186}, {0x0187,0x0188,0x0187}, - {0x0187,0x0188,0x0187}, {0x0189,0x0256,0x0189}, - {0x018A,0x0257,0x018A}, {0x018B,0x018C,0x018B}, - {0x018B,0x018C,0x018B}, {0x018D,0x018D,0x018D}, - {0x018E,0x01DD,0x018E}, {0x018F,0x0259,0x018F}, - {0x0190,0x025B,0x0190}, {0x0191,0x0192,0x0191}, - {0x0191,0x0192,0x0191}, {0x0193,0x0260,0x0193}, - {0x0194,0x0263,0x0194}, {0x01F6,0x0195,0x01F6}, - {0x0196,0x0269,0x0196}, {0x0197,0x0268,0x0197}, - {0x0198,0x0199,0x0198}, {0x0198,0x0199,0x0198}, - {0x019A,0x019A,0x019A}, {0x019B,0x019B,0x019B}, - {0x019C,0x026F,0x019C}, {0x019D,0x0272,0x019D}, - {0x019E,0x019E,0x019E}, {0x019F,0x0275,0x019F}, - {0x01A0,0x01A1,0x004F}, {0x01A0,0x01A1,0x004F}, - {0x01A2,0x01A3,0x01A2}, {0x01A2,0x01A3,0x01A2}, - {0x01A4,0x01A5,0x01A4}, {0x01A4,0x01A5,0x01A4}, - {0x01A6,0x0280,0x01A6}, {0x01A7,0x01A8,0x01A7}, - {0x01A7,0x01A8,0x01A7}, {0x01A9,0x0283,0x01A9}, - {0x01AA,0x01AA,0x01AA}, {0x01AB,0x01AB,0x01AB}, - {0x01AC,0x01AD,0x01AC}, {0x01AC,0x01AD,0x01AC}, - {0x01AE,0x0288,0x01AE}, {0x01AF,0x01B0,0x0055}, - {0x01AF,0x01B0,0x0055}, {0x01B1,0x028A,0x01B1}, - {0x01B2,0x028B,0x01B2}, {0x01B3,0x01B4,0x01B3}, - {0x01B3,0x01B4,0x01B3}, {0x01B5,0x01B6,0x01B5}, - {0x01B5,0x01B6,0x01B5}, {0x01B7,0x0292,0x01B7}, - {0x01B8,0x01B9,0x01B8}, {0x01B8,0x01B9,0x01B8}, - {0x01BA,0x01BA,0x01BA}, {0x01BB,0x01BB,0x01BB}, - {0x01BC,0x01BD,0x01BC}, {0x01BC,0x01BD,0x01BC}, - {0x01BE,0x01BE,0x01BE}, {0x01F7,0x01BF,0x01F7}, - {0x01C0,0x01C0,0x01C0}, {0x01C1,0x01C1,0x01C1}, - {0x01C2,0x01C2,0x01C2}, {0x01C3,0x01C3,0x01C3}, - {0x01C4,0x01C6,0x01C4}, {0x01C4,0x01C6,0x01C4}, - {0x01C4,0x01C6,0x01C4}, {0x01C7,0x01C9,0x01C7}, - {0x01C7,0x01C9,0x01C7}, {0x01C7,0x01C9,0x01C7}, - {0x01CA,0x01CC,0x01CA}, {0x01CA,0x01CC,0x01CA}, - {0x01CA,0x01CC,0x01CA}, {0x01CD,0x01CE,0x0041}, - {0x01CD,0x01CE,0x0041}, {0x01CF,0x01D0,0x0049}, - {0x01CF,0x01D0,0x0049}, {0x01D1,0x01D2,0x004F}, - {0x01D1,0x01D2,0x004F}, {0x01D3,0x01D4,0x0055}, - {0x01D3,0x01D4,0x0055}, {0x01D5,0x01D6,0x0055}, - {0x01D5,0x01D6,0x0055}, {0x01D7,0x01D8,0x0055}, - {0x01D7,0x01D8,0x0055}, {0x01D9,0x01DA,0x0055}, - {0x01D9,0x01DA,0x0055}, {0x01DB,0x01DC,0x0055}, - {0x01DB,0x01DC,0x0055}, {0x018E,0x01DD,0x018E}, - {0x01DE,0x01DF,0x0041}, {0x01DE,0x01DF,0x0041}, - {0x01E0,0x01E1,0x0041}, {0x01E0,0x01E1,0x0041}, - {0x01E2,0x01E3,0x00C6}, {0x01E2,0x01E3,0x00C6}, - {0x01E4,0x01E5,0x01E4}, {0x01E4,0x01E5,0x01E4}, - {0x01E6,0x01E7,0x0047}, {0x01E6,0x01E7,0x0047}, - {0x01E8,0x01E9,0x004B}, {0x01E8,0x01E9,0x004B}, - {0x01EA,0x01EB,0x004F}, {0x01EA,0x01EB,0x004F}, - {0x01EC,0x01ED,0x004F}, {0x01EC,0x01ED,0x004F}, - {0x01EE,0x01EF,0x01B7}, {0x01EE,0x01EF,0x01B7}, - {0x01F0,0x01F0,0x004A}, {0x01F1,0x01F3,0x01F1}, - {0x01F1,0x01F3,0x01F1}, {0x01F1,0x01F3,0x01F1}, - {0x01F4,0x01F5,0x0047}, {0x01F4,0x01F5,0x0047}, - {0x01F6,0x0195,0x01F6}, {0x01F7,0x01BF,0x01F7}, - {0x01F8,0x01F9,0x004E}, {0x01F8,0x01F9,0x004E}, - {0x01FA,0x01FB,0x0041}, {0x01FA,0x01FB,0x0041}, - {0x01FC,0x01FD,0x00C6}, {0x01FC,0x01FD,0x00C6}, - {0x01FE,0x01FF,0x00D8}, {0x01FE,0x01FF,0x00D8} -}; - -static MY_UNICASE_CHARACTER plane02[]={ - {0x0200,0x0201,0x0041}, {0x0200,0x0201,0x0041}, - {0x0202,0x0203,0x0041}, {0x0202,0x0203,0x0041}, - {0x0204,0x0205,0x0045}, {0x0204,0x0205,0x0045}, - {0x0206,0x0207,0x0045}, {0x0206,0x0207,0x0045}, - {0x0208,0x0209,0x0049}, {0x0208,0x0209,0x0049}, - {0x020A,0x020B,0x0049}, {0x020A,0x020B,0x0049}, - {0x020C,0x020D,0x004F}, {0x020C,0x020D,0x004F}, - {0x020E,0x020F,0x004F}, {0x020E,0x020F,0x004F}, - {0x0210,0x0211,0x0052}, {0x0210,0x0211,0x0052}, - {0x0212,0x0213,0x0052}, {0x0212,0x0213,0x0052}, - {0x0214,0x0215,0x0055}, {0x0214,0x0215,0x0055}, - {0x0216,0x0217,0x0055}, {0x0216,0x0217,0x0055}, - {0x0218,0x0219,0x0053}, {0x0218,0x0219,0x0053}, - {0x021A,0x021B,0x0054}, {0x021A,0x021B,0x0054}, - {0x021C,0x021D,0x021C}, {0x021C,0x021D,0x021C}, - {0x021E,0x021F,0x0048}, {0x021E,0x021F,0x0048}, - {0x0220,0x0220,0x0220}, {0x0221,0x0221,0x0221}, - {0x0222,0x0223,0x0222}, {0x0222,0x0223,0x0222}, - {0x0224,0x0225,0x0224}, {0x0224,0x0225,0x0224}, - {0x0226,0x0227,0x0041}, {0x0226,0x0227,0x0041}, - {0x0228,0x0229,0x0045}, {0x0228,0x0229,0x0045}, - {0x022A,0x022B,0x004F}, {0x022A,0x022B,0x004F}, - {0x022C,0x022D,0x004F}, {0x022C,0x022D,0x004F}, - {0x022E,0x022F,0x004F}, {0x022E,0x022F,0x004F}, - {0x0230,0x0231,0x004F}, {0x0230,0x0231,0x004F}, - {0x0232,0x0233,0x0059}, {0x0232,0x0233,0x0059}, - {0x0234,0x0234,0x0234}, {0x0235,0x0235,0x0235}, - {0x0236,0x0236,0x0236}, {0x0237,0x0237,0x0237}, - {0x0238,0x0238,0x0238}, {0x0239,0x0239,0x0239}, - {0x023A,0x023A,0x023A}, {0x023B,0x023B,0x023B}, - {0x023C,0x023C,0x023C}, {0x023D,0x023D,0x023D}, - {0x023E,0x023E,0x023E}, {0x023F,0x023F,0x023F}, - {0x0240,0x0240,0x0240}, {0x0241,0x0241,0x0241}, - {0x0242,0x0242,0x0242}, {0x0243,0x0243,0x0243}, - {0x0244,0x0244,0x0244}, {0x0245,0x0245,0x0245}, - {0x0246,0x0246,0x0246}, {0x0247,0x0247,0x0247}, - {0x0248,0x0248,0x0248}, {0x0249,0x0249,0x0249}, - {0x024A,0x024A,0x024A}, {0x024B,0x024B,0x024B}, - {0x024C,0x024C,0x024C}, {0x024D,0x024D,0x024D}, - {0x024E,0x024E,0x024E}, {0x024F,0x024F,0x024F}, - {0x0250,0x0250,0x0250}, {0x0251,0x0251,0x0251}, - {0x0252,0x0252,0x0252}, {0x0181,0x0253,0x0181}, - {0x0186,0x0254,0x0186}, {0x0255,0x0255,0x0255}, - {0x0189,0x0256,0x0189}, {0x018A,0x0257,0x018A}, - {0x0258,0x0258,0x0258}, {0x018F,0x0259,0x018F}, - {0x025A,0x025A,0x025A}, {0x0190,0x025B,0x0190}, - {0x025C,0x025C,0x025C}, {0x025D,0x025D,0x025D}, - {0x025E,0x025E,0x025E}, {0x025F,0x025F,0x025F}, - {0x0193,0x0260,0x0193}, {0x0261,0x0261,0x0261}, - {0x0262,0x0262,0x0262}, {0x0194,0x0263,0x0194}, - {0x0264,0x0264,0x0264}, {0x0265,0x0265,0x0265}, - {0x0266,0x0266,0x0266}, {0x0267,0x0267,0x0267}, - {0x0197,0x0268,0x0197}, {0x0196,0x0269,0x0196}, - {0x026A,0x026A,0x026A}, {0x026B,0x026B,0x026B}, - {0x026C,0x026C,0x026C}, {0x026D,0x026D,0x026D}, - {0x026E,0x026E,0x026E}, {0x019C,0x026F,0x019C}, - {0x0270,0x0270,0x0270}, {0x0271,0x0271,0x0271}, - {0x019D,0x0272,0x019D}, {0x0273,0x0273,0x0273}, - {0x0274,0x0274,0x0274}, {0x019F,0x0275,0x019F}, - {0x0276,0x0276,0x0276}, {0x0277,0x0277,0x0277}, - {0x0278,0x0278,0x0278}, {0x0279,0x0279,0x0279}, - {0x027A,0x027A,0x027A}, {0x027B,0x027B,0x027B}, - {0x027C,0x027C,0x027C}, {0x027D,0x027D,0x027D}, - {0x027E,0x027E,0x027E}, {0x027F,0x027F,0x027F}, - {0x01A6,0x0280,0x01A6}, {0x0281,0x0281,0x0281}, - {0x0282,0x0282,0x0282}, {0x01A9,0x0283,0x01A9}, - {0x0284,0x0284,0x0284}, {0x0285,0x0285,0x0285}, - {0x0286,0x0286,0x0286}, {0x0287,0x0287,0x0287}, - {0x01AE,0x0288,0x01AE}, {0x0289,0x0289,0x0289}, - {0x01B1,0x028A,0x01B1}, {0x01B2,0x028B,0x01B2}, - {0x028C,0x028C,0x028C}, {0x028D,0x028D,0x028D}, - {0x028E,0x028E,0x028E}, {0x028F,0x028F,0x028F}, - {0x0290,0x0290,0x0290}, {0x0291,0x0291,0x0291}, - {0x01B7,0x0292,0x01B7}, {0x0293,0x0293,0x0293}, - {0x0294,0x0294,0x0294}, {0x0295,0x0295,0x0295}, - {0x0296,0x0296,0x0296}, {0x0297,0x0297,0x0297}, - {0x0298,0x0298,0x0298}, {0x0299,0x0299,0x0299}, - {0x029A,0x029A,0x029A}, {0x029B,0x029B,0x029B}, - {0x029C,0x029C,0x029C}, {0x029D,0x029D,0x029D}, - {0x029E,0x029E,0x029E}, {0x029F,0x029F,0x029F}, - {0x02A0,0x02A0,0x02A0}, {0x02A1,0x02A1,0x02A1}, - {0x02A2,0x02A2,0x02A2}, {0x02A3,0x02A3,0x02A3}, - {0x02A4,0x02A4,0x02A4}, {0x02A5,0x02A5,0x02A5}, - {0x02A6,0x02A6,0x02A6}, {0x02A7,0x02A7,0x02A7}, - {0x02A8,0x02A8,0x02A8}, {0x02A9,0x02A9,0x02A9}, - {0x02AA,0x02AA,0x02AA}, {0x02AB,0x02AB,0x02AB}, - {0x02AC,0x02AC,0x02AC}, {0x02AD,0x02AD,0x02AD}, - {0x02AE,0x02AE,0x02AE}, {0x02AF,0x02AF,0x02AF}, - {0x02B0,0x02B0,0x02B0}, {0x02B1,0x02B1,0x02B1}, - {0x02B2,0x02B2,0x02B2}, {0x02B3,0x02B3,0x02B3}, - {0x02B4,0x02B4,0x02B4}, {0x02B5,0x02B5,0x02B5}, - {0x02B6,0x02B6,0x02B6}, {0x02B7,0x02B7,0x02B7}, - {0x02B8,0x02B8,0x02B8}, {0x02B9,0x02B9,0x02B9}, - {0x02BA,0x02BA,0x02BA}, {0x02BB,0x02BB,0x02BB}, - {0x02BC,0x02BC,0x02BC}, {0x02BD,0x02BD,0x02BD}, - {0x02BE,0x02BE,0x02BE}, {0x02BF,0x02BF,0x02BF}, - {0x02C0,0x02C0,0x02C0}, {0x02C1,0x02C1,0x02C1}, - {0x02C2,0x02C2,0x02C2}, {0x02C3,0x02C3,0x02C3}, - {0x02C4,0x02C4,0x02C4}, {0x02C5,0x02C5,0x02C5}, - {0x02C6,0x02C6,0x02C6}, {0x02C7,0x02C7,0x02C7}, - {0x02C8,0x02C8,0x02C8}, {0x02C9,0x02C9,0x02C9}, - {0x02CA,0x02CA,0x02CA}, {0x02CB,0x02CB,0x02CB}, - {0x02CC,0x02CC,0x02CC}, {0x02CD,0x02CD,0x02CD}, - {0x02CE,0x02CE,0x02CE}, {0x02CF,0x02CF,0x02CF}, - {0x02D0,0x02D0,0x02D0}, {0x02D1,0x02D1,0x02D1}, - {0x02D2,0x02D2,0x02D2}, {0x02D3,0x02D3,0x02D3}, - {0x02D4,0x02D4,0x02D4}, {0x02D5,0x02D5,0x02D5}, - {0x02D6,0x02D6,0x02D6}, {0x02D7,0x02D7,0x02D7}, - {0x02D8,0x02D8,0x02D8}, {0x02D9,0x02D9,0x02D9}, - {0x02DA,0x02DA,0x02DA}, {0x02DB,0x02DB,0x02DB}, - {0x02DC,0x02DC,0x02DC}, {0x02DD,0x02DD,0x02DD}, - {0x02DE,0x02DE,0x02DE}, {0x02DF,0x02DF,0x02DF}, - {0x02E0,0x02E0,0x02E0}, {0x02E1,0x02E1,0x02E1}, - {0x02E2,0x02E2,0x02E2}, {0x02E3,0x02E3,0x02E3}, - {0x02E4,0x02E4,0x02E4}, {0x02E5,0x02E5,0x02E5}, - {0x02E6,0x02E6,0x02E6}, {0x02E7,0x02E7,0x02E7}, - {0x02E8,0x02E8,0x02E8}, {0x02E9,0x02E9,0x02E9}, - {0x02EA,0x02EA,0x02EA}, {0x02EB,0x02EB,0x02EB}, - {0x02EC,0x02EC,0x02EC}, {0x02ED,0x02ED,0x02ED}, - {0x02EE,0x02EE,0x02EE}, {0x02EF,0x02EF,0x02EF}, - {0x02F0,0x02F0,0x02F0}, {0x02F1,0x02F1,0x02F1}, - {0x02F2,0x02F2,0x02F2}, {0x02F3,0x02F3,0x02F3}, - {0x02F4,0x02F4,0x02F4}, {0x02F5,0x02F5,0x02F5}, - {0x02F6,0x02F6,0x02F6}, {0x02F7,0x02F7,0x02F7}, - {0x02F8,0x02F8,0x02F8}, {0x02F9,0x02F9,0x02F9}, - {0x02FA,0x02FA,0x02FA}, {0x02FB,0x02FB,0x02FB}, - {0x02FC,0x02FC,0x02FC}, {0x02FD,0x02FD,0x02FD}, - {0x02FE,0x02FE,0x02FE}, {0x02FF,0x02FF,0x02FF} -}; - -static MY_UNICASE_CHARACTER plane03[]={ - {0x0300,0x0300,0x0300}, {0x0301,0x0301,0x0301}, - {0x0302,0x0302,0x0302}, {0x0303,0x0303,0x0303}, - {0x0304,0x0304,0x0304}, {0x0305,0x0305,0x0305}, - {0x0306,0x0306,0x0306}, {0x0307,0x0307,0x0307}, - {0x0308,0x0308,0x0308}, {0x0309,0x0309,0x0309}, - {0x030A,0x030A,0x030A}, {0x030B,0x030B,0x030B}, - {0x030C,0x030C,0x030C}, {0x030D,0x030D,0x030D}, - {0x030E,0x030E,0x030E}, {0x030F,0x030F,0x030F}, - {0x0310,0x0310,0x0310}, {0x0311,0x0311,0x0311}, - {0x0312,0x0312,0x0312}, {0x0313,0x0313,0x0313}, - {0x0314,0x0314,0x0314}, {0x0315,0x0315,0x0315}, - {0x0316,0x0316,0x0316}, {0x0317,0x0317,0x0317}, - {0x0318,0x0318,0x0318}, {0x0319,0x0319,0x0319}, - {0x031A,0x031A,0x031A}, {0x031B,0x031B,0x031B}, - {0x031C,0x031C,0x031C}, {0x031D,0x031D,0x031D}, - {0x031E,0x031E,0x031E}, {0x031F,0x031F,0x031F}, - {0x0320,0x0320,0x0320}, {0x0321,0x0321,0x0321}, - {0x0322,0x0322,0x0322}, {0x0323,0x0323,0x0323}, - {0x0324,0x0324,0x0324}, {0x0325,0x0325,0x0325}, - {0x0326,0x0326,0x0326}, {0x0327,0x0327,0x0327}, - {0x0328,0x0328,0x0328}, {0x0329,0x0329,0x0329}, - {0x032A,0x032A,0x032A}, {0x032B,0x032B,0x032B}, - {0x032C,0x032C,0x032C}, {0x032D,0x032D,0x032D}, - {0x032E,0x032E,0x032E}, {0x032F,0x032F,0x032F}, - {0x0330,0x0330,0x0330}, {0x0331,0x0331,0x0331}, - {0x0332,0x0332,0x0332}, {0x0333,0x0333,0x0333}, - {0x0334,0x0334,0x0334}, {0x0335,0x0335,0x0335}, - {0x0336,0x0336,0x0336}, {0x0337,0x0337,0x0337}, - {0x0338,0x0338,0x0338}, {0x0339,0x0339,0x0339}, - {0x033A,0x033A,0x033A}, {0x033B,0x033B,0x033B}, - {0x033C,0x033C,0x033C}, {0x033D,0x033D,0x033D}, - {0x033E,0x033E,0x033E}, {0x033F,0x033F,0x033F}, - {0x0340,0x0340,0x0340}, {0x0341,0x0341,0x0341}, - {0x0342,0x0342,0x0342}, {0x0343,0x0343,0x0343}, - {0x0344,0x0344,0x0344}, {0x0399,0x0345,0x0399}, - {0x0346,0x0346,0x0346}, {0x0347,0x0347,0x0347}, - {0x0348,0x0348,0x0348}, {0x0349,0x0349,0x0349}, - {0x034A,0x034A,0x034A}, {0x034B,0x034B,0x034B}, - {0x034C,0x034C,0x034C}, {0x034D,0x034D,0x034D}, - {0x034E,0x034E,0x034E}, {0x034F,0x034F,0x034F}, - {0x0350,0x0350,0x0350}, {0x0351,0x0351,0x0351}, - {0x0352,0x0352,0x0352}, {0x0353,0x0353,0x0353}, - {0x0354,0x0354,0x0354}, {0x0355,0x0355,0x0355}, - {0x0356,0x0356,0x0356}, {0x0357,0x0357,0x0357}, - {0x0358,0x0358,0x0358}, {0x0359,0x0359,0x0359}, - {0x035A,0x035A,0x035A}, {0x035B,0x035B,0x035B}, - {0x035C,0x035C,0x035C}, {0x035D,0x035D,0x035D}, - {0x035E,0x035E,0x035E}, {0x035F,0x035F,0x035F}, - {0x0360,0x0360,0x0360}, {0x0361,0x0361,0x0361}, - {0x0362,0x0362,0x0362}, {0x0363,0x0363,0x0363}, - {0x0364,0x0364,0x0364}, {0x0365,0x0365,0x0365}, - {0x0366,0x0366,0x0366}, {0x0367,0x0367,0x0367}, - {0x0368,0x0368,0x0368}, {0x0369,0x0369,0x0369}, - {0x036A,0x036A,0x036A}, {0x036B,0x036B,0x036B}, - {0x036C,0x036C,0x036C}, {0x036D,0x036D,0x036D}, - {0x036E,0x036E,0x036E}, {0x036F,0x036F,0x036F}, - {0x0370,0x0370,0x0370}, {0x0371,0x0371,0x0371}, - {0x0372,0x0372,0x0372}, {0x0373,0x0373,0x0373}, - {0x0374,0x0374,0x0374}, {0x0375,0x0375,0x0375}, - {0x0376,0x0376,0x0376}, {0x0377,0x0377,0x0377}, - {0x0378,0x0378,0x0378}, {0x0379,0x0379,0x0379}, - {0x037A,0x037A,0x037A}, {0x037B,0x037B,0x037B}, - {0x037C,0x037C,0x037C}, {0x037D,0x037D,0x037D}, - {0x037E,0x037E,0x037E}, {0x037F,0x037F,0x037F}, - {0x0380,0x0380,0x0380}, {0x0381,0x0381,0x0381}, - {0x0382,0x0382,0x0382}, {0x0383,0x0383,0x0383}, - {0x0384,0x0384,0x0384}, {0x0385,0x0385,0x0385}, - {0x0386,0x03AC,0x0391}, {0x0387,0x0387,0x0387}, - {0x0388,0x03AD,0x0395}, {0x0389,0x03AE,0x0397}, - {0x038A,0x03AF,0x0399}, {0x038B,0x038B,0x038B}, - {0x038C,0x03CC,0x039F}, {0x038D,0x038D,0x038D}, - {0x038E,0x03CD,0x03A5}, {0x038F,0x03CE,0x03A9}, - {0x0390,0x0390,0x0399}, {0x0391,0x03B1,0x0391}, - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, - {0x03A2,0x03A2,0x03A2}, {0x03A3,0x03C3,0x03A3}, - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, - {0x0386,0x03AC,0x0391}, {0x0388,0x03AD,0x0395}, - {0x0389,0x03AE,0x0397}, {0x038A,0x03AF,0x0399}, - {0x03B0,0x03B0,0x03A5}, {0x0391,0x03B1,0x0391}, - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, - {0x03A3,0x03C2,0x03A3}, {0x03A3,0x03C3,0x03A3}, - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, - {0x038C,0x03CC,0x039F}, {0x038E,0x03CD,0x03A5}, - {0x038F,0x03CE,0x03A9}, {0x03CF,0x03CF,0x03CF}, - {0x0392,0x03D0,0x0392}, {0x0398,0x03D1,0x0398}, - {0x03D2,0x03D2,0x03D2}, {0x03D3,0x03D3,0x03D2}, - {0x03D4,0x03D4,0x03D2}, {0x03A6,0x03D5,0x03A6}, - {0x03A0,0x03D6,0x03A0}, {0x03D7,0x03D7,0x03D7}, - {0x03D8,0x03D8,0x03D8}, {0x03D9,0x03D9,0x03D9}, - {0x03DA,0x03DB,0x03DA}, {0x03DA,0x03DB,0x03DA}, - {0x03DC,0x03DD,0x03DC}, {0x03DC,0x03DD,0x03DC}, - {0x03DE,0x03DF,0x03DE}, {0x03DE,0x03DF,0x03DE}, - {0x03E0,0x03E1,0x03E0}, {0x03E0,0x03E1,0x03E0}, - {0x03E2,0x03E3,0x03E2}, {0x03E2,0x03E3,0x03E2}, - {0x03E4,0x03E5,0x03E4}, {0x03E4,0x03E5,0x03E4}, - {0x03E6,0x03E7,0x03E6}, {0x03E6,0x03E7,0x03E6}, - {0x03E8,0x03E9,0x03E8}, {0x03E8,0x03E9,0x03E8}, - {0x03EA,0x03EB,0x03EA}, {0x03EA,0x03EB,0x03EA}, - {0x03EC,0x03ED,0x03EC}, {0x03EC,0x03ED,0x03EC}, - {0x03EE,0x03EF,0x03EE}, {0x03EE,0x03EF,0x03EE}, - {0x039A,0x03F0,0x039A}, {0x03A1,0x03F1,0x03A1}, - {0x03A3,0x03F2,0x03A3}, {0x03F3,0x03F3,0x03F3}, - {0x03F4,0x03F4,0x03F4}, {0x03F5,0x03F5,0x03F5}, - {0x03F6,0x03F6,0x03F6}, {0x03F7,0x03F7,0x03F7}, - {0x03F8,0x03F8,0x03F8}, {0x03F9,0x03F9,0x03F9}, - {0x03FA,0x03FA,0x03FA}, {0x03FB,0x03FB,0x03FB}, - {0x03FC,0x03FC,0x03FC}, {0x03FD,0x03FD,0x03FD}, - {0x03FE,0x03FE,0x03FE}, {0x03FF,0x03FF,0x03FF} -}; - -static MY_UNICASE_CHARACTER plane04[]={ - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, - {0x0460,0x0461,0x0460}, {0x0460,0x0461,0x0460}, - {0x0462,0x0463,0x0462}, {0x0462,0x0463,0x0462}, - {0x0464,0x0465,0x0464}, {0x0464,0x0465,0x0464}, - {0x0466,0x0467,0x0466}, {0x0466,0x0467,0x0466}, - {0x0468,0x0469,0x0468}, {0x0468,0x0469,0x0468}, - {0x046A,0x046B,0x046A}, {0x046A,0x046B,0x046A}, - {0x046C,0x046D,0x046C}, {0x046C,0x046D,0x046C}, - {0x046E,0x046F,0x046E}, {0x046E,0x046F,0x046E}, - {0x0470,0x0471,0x0470}, {0x0470,0x0471,0x0470}, - {0x0472,0x0473,0x0472}, {0x0472,0x0473,0x0472}, - {0x0474,0x0475,0x0474}, {0x0474,0x0475,0x0474}, - {0x0476,0x0477,0x0474}, {0x0476,0x0477,0x0474}, - {0x0478,0x0479,0x0478}, {0x0478,0x0479,0x0478}, - {0x047A,0x047B,0x047A}, {0x047A,0x047B,0x047A}, - {0x047C,0x047D,0x047C}, {0x047C,0x047D,0x047C}, - {0x047E,0x047F,0x047E}, {0x047E,0x047F,0x047E}, - {0x0480,0x0481,0x0480}, {0x0480,0x0481,0x0480}, - {0x0482,0x0482,0x0482}, {0x0483,0x0483,0x0483}, - {0x0484,0x0484,0x0484}, {0x0485,0x0485,0x0485}, - {0x0486,0x0486,0x0486}, {0x0487,0x0487,0x0487}, - {0x0488,0x0488,0x0488}, {0x0489,0x0489,0x0489}, - {0x048A,0x048A,0x048A}, {0x048B,0x048B,0x048B}, - {0x048C,0x048D,0x048C}, {0x048C,0x048D,0x048C}, - {0x048E,0x048F,0x048E}, {0x048E,0x048F,0x048E}, - {0x0490,0x0491,0x0490}, {0x0490,0x0491,0x0490}, - {0x0492,0x0493,0x0492}, {0x0492,0x0493,0x0492}, - {0x0494,0x0495,0x0494}, {0x0494,0x0495,0x0494}, - {0x0496,0x0497,0x0496}, {0x0496,0x0497,0x0496}, - {0x0498,0x0499,0x0498}, {0x0498,0x0499,0x0498}, - {0x049A,0x049B,0x049A}, {0x049A,0x049B,0x049A}, - {0x049C,0x049D,0x049C}, {0x049C,0x049D,0x049C}, - {0x049E,0x049F,0x049E}, {0x049E,0x049F,0x049E}, - {0x04A0,0x04A1,0x04A0}, {0x04A0,0x04A1,0x04A0}, - {0x04A2,0x04A3,0x04A2}, {0x04A2,0x04A3,0x04A2}, - {0x04A4,0x04A5,0x04A4}, {0x04A4,0x04A5,0x04A4}, - {0x04A6,0x04A7,0x04A6}, {0x04A6,0x04A7,0x04A6}, - {0x04A8,0x04A9,0x04A8}, {0x04A8,0x04A9,0x04A8}, - {0x04AA,0x04AB,0x04AA}, {0x04AA,0x04AB,0x04AA}, - {0x04AC,0x04AD,0x04AC}, {0x04AC,0x04AD,0x04AC}, - {0x04AE,0x04AF,0x04AE}, {0x04AE,0x04AF,0x04AE}, - {0x04B0,0x04B1,0x04B0}, {0x04B0,0x04B1,0x04B0}, - {0x04B2,0x04B3,0x04B2}, {0x04B2,0x04B3,0x04B2}, - {0x04B4,0x04B5,0x04B4}, {0x04B4,0x04B5,0x04B4}, - {0x04B6,0x04B7,0x04B6}, {0x04B6,0x04B7,0x04B6}, - {0x04B8,0x04B9,0x04B8}, {0x04B8,0x04B9,0x04B8}, - {0x04BA,0x04BB,0x04BA}, {0x04BA,0x04BB,0x04BA}, - {0x04BC,0x04BD,0x04BC}, {0x04BC,0x04BD,0x04BC}, - {0x04BE,0x04BF,0x04BE}, {0x04BE,0x04BF,0x04BE}, - {0x04C0,0x04C0,0x04C0}, {0x04C1,0x04C2,0x0416}, - {0x04C1,0x04C2,0x0416}, {0x04C3,0x04C4,0x04C3}, - {0x04C3,0x04C4,0x04C3}, {0x04C5,0x04C5,0x04C5}, - {0x04C6,0x04C6,0x04C6}, {0x04C7,0x04C8,0x04C7}, - {0x04C7,0x04C8,0x04C7}, {0x04C9,0x04C9,0x04C9}, - {0x04CA,0x04CA,0x04CA}, {0x04CB,0x04CC,0x04CB}, - {0x04CB,0x04CC,0x04CB}, {0x04CD,0x04CD,0x04CD}, - {0x04CE,0x04CE,0x04CE}, {0x04CF,0x04CF,0x04CF}, - {0x04D0,0x04D1,0x0410}, {0x04D0,0x04D1,0x0410}, - {0x04D2,0x04D3,0x0410}, {0x04D2,0x04D3,0x0410}, - {0x04D4,0x04D5,0x04D4}, {0x04D4,0x04D5,0x04D4}, - {0x04D6,0x04D7,0x0415}, {0x04D6,0x04D7,0x0415}, - {0x04D8,0x04D9,0x04D8}, {0x04D8,0x04D9,0x04D8}, - {0x04DA,0x04DB,0x04D8}, {0x04DA,0x04DB,0x04D8}, - {0x04DC,0x04DD,0x0416}, {0x04DC,0x04DD,0x0416}, - {0x04DE,0x04DF,0x0417}, {0x04DE,0x04DF,0x0417}, - {0x04E0,0x04E1,0x04E0}, {0x04E0,0x04E1,0x04E0}, - {0x04E2,0x04E3,0x0418}, {0x04E2,0x04E3,0x0418}, - {0x04E4,0x04E5,0x0418}, {0x04E4,0x04E5,0x0418}, - {0x04E6,0x04E7,0x041E}, {0x04E6,0x04E7,0x041E}, - {0x04E8,0x04E9,0x04E8}, {0x04E8,0x04E9,0x04E8}, - {0x04EA,0x04EB,0x04E8}, {0x04EA,0x04EB,0x04E8}, - {0x04EC,0x04ED,0x042D}, {0x04EC,0x04ED,0x042D}, - {0x04EE,0x04EF,0x0423}, {0x04EE,0x04EF,0x0423}, - {0x04F0,0x04F1,0x0423}, {0x04F0,0x04F1,0x0423}, - {0x04F2,0x04F3,0x0423}, {0x04F2,0x04F3,0x0423}, - {0x04F4,0x04F5,0x0427}, {0x04F4,0x04F5,0x0427}, - {0x04F6,0x04F6,0x04F6}, {0x04F7,0x04F7,0x04F7}, - {0x04F8,0x04F9,0x042B}, {0x04F8,0x04F9,0x042B}, - {0x04FA,0x04FA,0x04FA}, {0x04FB,0x04FB,0x04FB}, - {0x04FC,0x04FC,0x04FC}, {0x04FD,0x04FD,0x04FD}, - {0x04FE,0x04FE,0x04FE}, {0x04FF,0x04FF,0x04FF} -}; - -static MY_UNICASE_CHARACTER plane05[]={ - {0x0500,0x0500,0x0500}, {0x0501,0x0501,0x0501}, - {0x0502,0x0502,0x0502}, {0x0503,0x0503,0x0503}, - {0x0504,0x0504,0x0504}, {0x0505,0x0505,0x0505}, - {0x0506,0x0506,0x0506}, {0x0507,0x0507,0x0507}, - {0x0508,0x0508,0x0508}, {0x0509,0x0509,0x0509}, - {0x050A,0x050A,0x050A}, {0x050B,0x050B,0x050B}, - {0x050C,0x050C,0x050C}, {0x050D,0x050D,0x050D}, - {0x050E,0x050E,0x050E}, {0x050F,0x050F,0x050F}, - {0x0510,0x0510,0x0510}, {0x0511,0x0511,0x0511}, - {0x0512,0x0512,0x0512}, {0x0513,0x0513,0x0513}, - {0x0514,0x0514,0x0514}, {0x0515,0x0515,0x0515}, - {0x0516,0x0516,0x0516}, {0x0517,0x0517,0x0517}, - {0x0518,0x0518,0x0518}, {0x0519,0x0519,0x0519}, - {0x051A,0x051A,0x051A}, {0x051B,0x051B,0x051B}, - {0x051C,0x051C,0x051C}, {0x051D,0x051D,0x051D}, - {0x051E,0x051E,0x051E}, {0x051F,0x051F,0x051F}, - {0x0520,0x0520,0x0520}, {0x0521,0x0521,0x0521}, - {0x0522,0x0522,0x0522}, {0x0523,0x0523,0x0523}, - {0x0524,0x0524,0x0524}, {0x0525,0x0525,0x0525}, - {0x0526,0x0526,0x0526}, {0x0527,0x0527,0x0527}, - {0x0528,0x0528,0x0528}, {0x0529,0x0529,0x0529}, - {0x052A,0x052A,0x052A}, {0x052B,0x052B,0x052B}, - {0x052C,0x052C,0x052C}, {0x052D,0x052D,0x052D}, - {0x052E,0x052E,0x052E}, {0x052F,0x052F,0x052F}, - {0x0530,0x0530,0x0530}, {0x0531,0x0561,0x0531}, - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, - {0x0556,0x0586,0x0556}, {0x0557,0x0557,0x0557}, - {0x0558,0x0558,0x0558}, {0x0559,0x0559,0x0559}, - {0x055A,0x055A,0x055A}, {0x055B,0x055B,0x055B}, - {0x055C,0x055C,0x055C}, {0x055D,0x055D,0x055D}, - {0x055E,0x055E,0x055E}, {0x055F,0x055F,0x055F}, - {0x0560,0x0560,0x0560}, {0x0531,0x0561,0x0531}, - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, - {0x0556,0x0586,0x0556}, {0x0587,0x0587,0x0587}, - {0x0588,0x0588,0x0588}, {0x0589,0x0589,0x0589}, - {0x058A,0x058A,0x058A}, {0x058B,0x058B,0x058B}, - {0x058C,0x058C,0x058C}, {0x058D,0x058D,0x058D}, - {0x058E,0x058E,0x058E}, {0x058F,0x058F,0x058F}, - {0x0590,0x0590,0x0590}, {0x0591,0x0591,0x0591}, - {0x0592,0x0592,0x0592}, {0x0593,0x0593,0x0593}, - {0x0594,0x0594,0x0594}, {0x0595,0x0595,0x0595}, - {0x0596,0x0596,0x0596}, {0x0597,0x0597,0x0597}, - {0x0598,0x0598,0x0598}, {0x0599,0x0599,0x0599}, - {0x059A,0x059A,0x059A}, {0x059B,0x059B,0x059B}, - {0x059C,0x059C,0x059C}, {0x059D,0x059D,0x059D}, - {0x059E,0x059E,0x059E}, {0x059F,0x059F,0x059F}, - {0x05A0,0x05A0,0x05A0}, {0x05A1,0x05A1,0x05A1}, - {0x05A2,0x05A2,0x05A2}, {0x05A3,0x05A3,0x05A3}, - {0x05A4,0x05A4,0x05A4}, {0x05A5,0x05A5,0x05A5}, - {0x05A6,0x05A6,0x05A6}, {0x05A7,0x05A7,0x05A7}, - {0x05A8,0x05A8,0x05A8}, {0x05A9,0x05A9,0x05A9}, - {0x05AA,0x05AA,0x05AA}, {0x05AB,0x05AB,0x05AB}, - {0x05AC,0x05AC,0x05AC}, {0x05AD,0x05AD,0x05AD}, - {0x05AE,0x05AE,0x05AE}, {0x05AF,0x05AF,0x05AF}, - {0x05B0,0x05B0,0x05B0}, {0x05B1,0x05B1,0x05B1}, - {0x05B2,0x05B2,0x05B2}, {0x05B3,0x05B3,0x05B3}, - {0x05B4,0x05B4,0x05B4}, {0x05B5,0x05B5,0x05B5}, - {0x05B6,0x05B6,0x05B6}, {0x05B7,0x05B7,0x05B7}, - {0x05B8,0x05B8,0x05B8}, {0x05B9,0x05B9,0x05B9}, - {0x05BA,0x05BA,0x05BA}, {0x05BB,0x05BB,0x05BB}, - {0x05BC,0x05BC,0x05BC}, {0x05BD,0x05BD,0x05BD}, - {0x05BE,0x05BE,0x05BE}, {0x05BF,0x05BF,0x05BF}, - {0x05C0,0x05C0,0x05C0}, {0x05C1,0x05C1,0x05C1}, - {0x05C2,0x05C2,0x05C2}, {0x05C3,0x05C3,0x05C3}, - {0x05C4,0x05C4,0x05C4}, {0x05C5,0x05C5,0x05C5}, - {0x05C6,0x05C6,0x05C6}, {0x05C7,0x05C7,0x05C7}, - {0x05C8,0x05C8,0x05C8}, {0x05C9,0x05C9,0x05C9}, - {0x05CA,0x05CA,0x05CA}, {0x05CB,0x05CB,0x05CB}, - {0x05CC,0x05CC,0x05CC}, {0x05CD,0x05CD,0x05CD}, - {0x05CE,0x05CE,0x05CE}, {0x05CF,0x05CF,0x05CF}, - {0x05D0,0x05D0,0x05D0}, {0x05D1,0x05D1,0x05D1}, - {0x05D2,0x05D2,0x05D2}, {0x05D3,0x05D3,0x05D3}, - {0x05D4,0x05D4,0x05D4}, {0x05D5,0x05D5,0x05D5}, - {0x05D6,0x05D6,0x05D6}, {0x05D7,0x05D7,0x05D7}, - {0x05D8,0x05D8,0x05D8}, {0x05D9,0x05D9,0x05D9}, - {0x05DA,0x05DA,0x05DA}, {0x05DB,0x05DB,0x05DB}, - {0x05DC,0x05DC,0x05DC}, {0x05DD,0x05DD,0x05DD}, - {0x05DE,0x05DE,0x05DE}, {0x05DF,0x05DF,0x05DF}, - {0x05E0,0x05E0,0x05E0}, {0x05E1,0x05E1,0x05E1}, - {0x05E2,0x05E2,0x05E2}, {0x05E3,0x05E3,0x05E3}, - {0x05E4,0x05E4,0x05E4}, {0x05E5,0x05E5,0x05E5}, - {0x05E6,0x05E6,0x05E6}, {0x05E7,0x05E7,0x05E7}, - {0x05E8,0x05E8,0x05E8}, {0x05E9,0x05E9,0x05E9}, - {0x05EA,0x05EA,0x05EA}, {0x05EB,0x05EB,0x05EB}, - {0x05EC,0x05EC,0x05EC}, {0x05ED,0x05ED,0x05ED}, - {0x05EE,0x05EE,0x05EE}, {0x05EF,0x05EF,0x05EF}, - {0x05F0,0x05F0,0x05F0}, {0x05F1,0x05F1,0x05F1}, - {0x05F2,0x05F2,0x05F2}, {0x05F3,0x05F3,0x05F3}, - {0x05F4,0x05F4,0x05F4}, {0x05F5,0x05F5,0x05F5}, - {0x05F6,0x05F6,0x05F6}, {0x05F7,0x05F7,0x05F7}, - {0x05F8,0x05F8,0x05F8}, {0x05F9,0x05F9,0x05F9}, - {0x05FA,0x05FA,0x05FA}, {0x05FB,0x05FB,0x05FB}, - {0x05FC,0x05FC,0x05FC}, {0x05FD,0x05FD,0x05FD}, - {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF} -}; - -static MY_UNICASE_CHARACTER plane06[]={ /* This page is dummy */ - {0x0600,0x0600,0x0600}, {0x0601,0x0601,0x0601}, /* 0600 */ - {0x0602,0x0602,0x0602}, {0x0603,0x0603,0x0603}, /* 0602 */ - {0x0604,0x0604,0x0604}, {0x0605,0x0605,0x0605}, /* 0604 */ - {0x0606,0x0606,0x0606}, {0x0607,0x0607,0x0607}, /* 0606 */ - {0x0608,0x0608,0x0608}, {0x0609,0x0609,0x0609}, /* 0608 */ - {0x060A,0x060A,0x060A}, {0x060B,0x060B,0x060B}, /* 060A */ - {0x060C,0x060C,0x060C}, {0x060D,0x060D,0x060D}, /* 060C */ - {0x060E,0x060E,0x060E}, {0x060F,0x060F,0x060F}, /* 060E */ - {0x0610,0x0610,0x0610}, {0x0611,0x0611,0x0611}, /* 0610 */ - {0x0612,0x0612,0x0612}, {0x0613,0x0613,0x0613}, /* 0612 */ - {0x0614,0x0614,0x0614}, {0x0615,0x0615,0x0615}, /* 0614 */ - {0x0616,0x0616,0x0616}, {0x0617,0x0617,0x0617}, /* 0616 */ - {0x0618,0x0618,0x0618}, {0x0619,0x0619,0x0619}, /* 0618 */ - {0x061A,0x061A,0x061A}, {0x061B,0x061B,0x061B}, /* 061A */ - {0x061C,0x061C,0x061C}, {0x061D,0x061D,0x061D}, /* 061C */ - {0x061E,0x061E,0x061E}, {0x061F,0x061F,0x061F}, /* 061E */ - {0x0620,0x0620,0x0620}, {0x0621,0x0621,0x0621}, /* 0620 */ - {0x0622,0x0622,0x0622}, {0x0623,0x0623,0x0623}, /* 0622 */ - {0x0624,0x0624,0x0624}, {0x0625,0x0625,0x0625}, /* 0624 */ - {0x0626,0x0626,0x0626}, {0x0627,0x0627,0x0627}, /* 0626 */ - {0x0628,0x0628,0x0628}, {0x0629,0x0629,0x0629}, /* 0628 */ - {0x062A,0x062A,0x062A}, {0x062B,0x062B,0x062B}, /* 062A */ - {0x062C,0x062C,0x062C}, {0x062D,0x062D,0x062D}, /* 062C */ - {0x062E,0x062E,0x062E}, {0x062F,0x062F,0x062F}, /* 062E */ - {0x0630,0x0630,0x0630}, {0x0631,0x0631,0x0631}, /* 0630 */ - {0x0632,0x0632,0x0632}, {0x0633,0x0633,0x0633}, /* 0632 */ - {0x0634,0x0634,0x0634}, {0x0635,0x0635,0x0635}, /* 0634 */ - {0x0636,0x0636,0x0636}, {0x0637,0x0637,0x0637}, /* 0636 */ - {0x0638,0x0638,0x0638}, {0x0639,0x0639,0x0639}, /* 0638 */ - {0x063A,0x063A,0x063A}, {0x063B,0x063B,0x063B}, /* 063A */ - {0x063C,0x063C,0x063C}, {0x063D,0x063D,0x063D}, /* 063C */ - {0x063E,0x063E,0x063E}, {0x063F,0x063F,0x063F}, /* 063E */ - {0x0640,0x0640,0x0640}, {0x0641,0x0641,0x0641}, /* 0640 */ - {0x0642,0x0642,0x0642}, {0x0643,0x0643,0x0643}, /* 0642 */ - {0x0644,0x0644,0x0644}, {0x0645,0x0645,0x0645}, /* 0644 */ - {0x0646,0x0646,0x0646}, {0x0647,0x0647,0x0647}, /* 0646 */ - {0x0648,0x0648,0x0648}, {0x0649,0x0649,0x0649}, /* 0648 */ - {0x064A,0x064A,0x064A}, {0x064B,0x064B,0x064B}, /* 064A */ - {0x064C,0x064C,0x064C}, {0x064D,0x064D,0x064D}, /* 064C */ - {0x064E,0x064E,0x064E}, {0x064F,0x064F,0x064F}, /* 064E */ - {0x0650,0x0650,0x0650}, {0x0651,0x0651,0x0651}, /* 0650 */ - {0x0652,0x0652,0x0652}, {0x0653,0x0653,0x0653}, /* 0652 */ - {0x0654,0x0654,0x0654}, {0x0655,0x0655,0x0655}, /* 0654 */ - {0x0656,0x0656,0x0656}, {0x0657,0x0657,0x0657}, /* 0656 */ - {0x0658,0x0658,0x0658}, {0x0659,0x0659,0x0659}, /* 0658 */ - {0x065A,0x065A,0x065A}, {0x065B,0x065B,0x065B}, /* 065A */ - {0x065C,0x065C,0x065C}, {0x065D,0x065D,0x065D}, /* 065C */ - {0x065E,0x065E,0x065E}, {0x065F,0x065F,0x065F}, /* 065E */ - {0x0660,0x0660,0x0660}, {0x0661,0x0661,0x0661}, /* 0660 */ - {0x0662,0x0662,0x0662}, {0x0663,0x0663,0x0663}, /* 0662 */ - {0x0664,0x0664,0x0664}, {0x0665,0x0665,0x0665}, /* 0664 */ - {0x0666,0x0666,0x0666}, {0x0667,0x0667,0x0667}, /* 0666 */ - {0x0668,0x0668,0x0668}, {0x0669,0x0669,0x0669}, /* 0668 */ - {0x066A,0x066A,0x066A}, {0x066B,0x066B,0x066B}, /* 066A */ - {0x066C,0x066C,0x066C}, {0x066D,0x066D,0x066D}, /* 066C */ - {0x066E,0x066E,0x066E}, {0x066F,0x066F,0x066F}, /* 066E */ - {0x0670,0x0670,0x0670}, {0x0671,0x0671,0x0671}, /* 0670 */ - {0x0672,0x0672,0x0672}, {0x0673,0x0673,0x0673}, /* 0672 */ - {0x0674,0x0674,0x0674}, {0x0675,0x0675,0x0675}, /* 0674 */ - {0x0676,0x0676,0x0676}, {0x0677,0x0677,0x0677}, /* 0676 */ - {0x0678,0x0678,0x0678}, {0x0679,0x0679,0x0679}, /* 0678 */ - {0x067A,0x067A,0x067A}, {0x067B,0x067B,0x067B}, /* 067A */ - {0x067C,0x067C,0x067C}, {0x067D,0x067D,0x067D}, /* 067C */ - {0x067E,0x067E,0x067E}, {0x067F,0x067F,0x067F}, /* 067E */ - {0x0680,0x0680,0x0680}, {0x0681,0x0681,0x0681}, /* 0680 */ - {0x0682,0x0682,0x0682}, {0x0683,0x0683,0x0683}, /* 0682 */ - {0x0684,0x0684,0x0684}, {0x0685,0x0685,0x0685}, /* 0684 */ - {0x0686,0x0686,0x0686}, {0x0687,0x0687,0x0687}, /* 0686 */ - {0x0688,0x0688,0x0688}, {0x0689,0x0689,0x0689}, /* 0688 */ - {0x068A,0x068A,0x068A}, {0x068B,0x068B,0x068B}, /* 068A */ - {0x068C,0x068C,0x068C}, {0x068D,0x068D,0x068D}, /* 068C */ - {0x068E,0x068E,0x068E}, {0x068F,0x068F,0x068F}, /* 068E */ - {0x0690,0x0690,0x0690}, {0x0691,0x0691,0x0691}, /* 0690 */ - {0x0692,0x0692,0x0692}, {0x0693,0x0693,0x0693}, /* 0692 */ - {0x0694,0x0694,0x0694}, {0x0695,0x0695,0x0695}, /* 0694 */ - {0x0696,0x0696,0x0696}, {0x0697,0x0697,0x0697}, /* 0696 */ - {0x0698,0x0698,0x0698}, {0x0699,0x0699,0x0699}, /* 0698 */ - {0x069A,0x069A,0x069A}, {0x069B,0x069B,0x069B}, /* 069A */ - {0x069C,0x069C,0x069C}, {0x069D,0x069D,0x069D}, /* 069C */ - {0x069E,0x069E,0x069E}, {0x069F,0x069F,0x069F}, /* 069E */ - {0x06A0,0x06A0,0x06A0}, {0x06A1,0x06A1,0x06A1}, /* 06A0 */ - {0x06A2,0x06A2,0x06A2}, {0x06A3,0x06A3,0x06A3}, /* 06A2 */ - {0x06A4,0x06A4,0x06A4}, {0x06A5,0x06A5,0x06A5}, /* 06A4 */ - {0x06A6,0x06A6,0x06A6}, {0x06A7,0x06A7,0x06A7}, /* 06A6 */ - {0x06A8,0x06A8,0x06A8}, {0x06A9,0x06A9,0x06A9}, /* 06A8 */ - {0x06AA,0x06AA,0x06AA}, {0x06AB,0x06AB,0x06AB}, /* 06AA */ - {0x06AC,0x06AC,0x06AC}, {0x06AD,0x06AD,0x06AD}, /* 06AC */ - {0x06AE,0x06AE,0x06AE}, {0x06AF,0x06AF,0x06AF}, /* 06AE */ - {0x06B0,0x06B0,0x06B0}, {0x06B1,0x06B1,0x06B1}, /* 06B0 */ - {0x06B2,0x06B2,0x06B2}, {0x06B3,0x06B3,0x06B3}, /* 06B2 */ - {0x06B4,0x06B4,0x06B4}, {0x06B5,0x06B5,0x06B5}, /* 06B4 */ - {0x06B6,0x06B6,0x06B6}, {0x06B7,0x06B7,0x06B7}, /* 06B6 */ - {0x06B8,0x06B8,0x06B8}, {0x06B9,0x06B9,0x06B9}, /* 06B8 */ - {0x06BA,0x06BA,0x06BA}, {0x06BB,0x06BB,0x06BB}, /* 06BA */ - {0x06BC,0x06BC,0x06BC}, {0x06BD,0x06BD,0x06BD}, /* 06BC */ - {0x06BE,0x06BE,0x06BE}, {0x06BF,0x06BF,0x06BF}, /* 06BE */ - {0x06C0,0x06C0,0x06C0}, {0x06C1,0x06C1,0x06C1}, /* 06C0 */ - {0x06C2,0x06C2,0x06C2}, {0x06C3,0x06C3,0x06C3}, /* 06C2 */ - {0x06C4,0x06C4,0x06C4}, {0x06C5,0x06C5,0x06C5}, /* 06C4 */ - {0x06C6,0x06C6,0x06C6}, {0x06C7,0x06C7,0x06C7}, /* 06C6 */ - {0x06C8,0x06C8,0x06C8}, {0x06C9,0x06C9,0x06C9}, /* 06C8 */ - {0x06CA,0x06CA,0x06CA}, {0x06CB,0x06CB,0x06CB}, /* 06CA */ - {0x06CC,0x06CC,0x06CC}, {0x06CD,0x06CD,0x06CD}, /* 06CC */ - {0x06CE,0x06CE,0x06CE}, {0x06CF,0x06CF,0x06CF}, /* 06CE */ - {0x06D0,0x06D0,0x06D0}, {0x06D1,0x06D1,0x06D1}, /* 06D0 */ - {0x06D2,0x06D2,0x06D2}, {0x06D3,0x06D3,0x06D3}, /* 06D2 */ - {0x06D4,0x06D4,0x06D4}, {0x06D5,0x06D5,0x06D5}, /* 06D4 */ - {0x06D6,0x06D6,0x06D6}, {0x06D7,0x06D7,0x06D7}, /* 06D6 */ - {0x06D8,0x06D8,0x06D8}, {0x06D9,0x06D9,0x06D9}, /* 06D8 */ - {0x06DA,0x06DA,0x06DA}, {0x06DB,0x06DB,0x06DB}, /* 06DA */ - {0x06DC,0x06DC,0x06DC}, {0x06DD,0x06DD,0x06DD}, /* 06DC */ - {0x06DE,0x06DE,0x06DE}, {0x06DF,0x06DF,0x06DF}, /* 06DE */ - {0x06E0,0x06E0,0x06E0}, {0x06E1,0x06E1,0x06E1}, /* 06E0 */ - {0x06E2,0x06E2,0x06E2}, {0x06E3,0x06E3,0x06E3}, /* 06E2 */ - {0x06E4,0x06E4,0x06E4}, {0x06E5,0x06E5,0x06E5}, /* 06E4 */ - {0x06E6,0x06E6,0x06E6}, {0x06E7,0x06E7,0x06E7}, /* 06E6 */ - {0x06E8,0x06E8,0x06E8}, {0x06E9,0x06E9,0x06E9}, /* 06E8 */ - {0x06EA,0x06EA,0x06EA}, {0x06EB,0x06EB,0x06EB}, /* 06EA */ - {0x06EC,0x06EC,0x06EC}, {0x06ED,0x06ED,0x06ED}, /* 06EC */ - {0x06EE,0x06EE,0x06EE}, {0x06EF,0x06EF,0x06EF}, /* 06EE */ - {0x06F0,0x06F0,0x06F0}, {0x06F1,0x06F1,0x06F1}, /* 06F0 */ - {0x06F2,0x06F2,0x06F2}, {0x06F3,0x06F3,0x06F3}, /* 06F2 */ - {0x06F4,0x06F4,0x06F4}, {0x06F5,0x06F5,0x06F5}, /* 06F4 */ - {0x06F6,0x06F6,0x06F6}, {0x06F7,0x06F7,0x06F7}, /* 06F6 */ - {0x06F8,0x06F8,0x06F8}, {0x06F9,0x06F9,0x06F9}, /* 06F8 */ - {0x06FA,0x06FA,0x06FA}, {0x06FB,0x06FB,0x06FB}, /* 06FA */ - {0x06FC,0x06FC,0x06FC}, {0x06FD,0x06FD,0x06FD}, /* 06FC */ - {0x06FE,0x06FE,0x06FE}, {0x06FF,0x06FF,0x06FF} /* 06FE */ -}; - -static MY_UNICASE_CHARACTER plane07[]={ /* This page is dummy */ - {0x0700,0x0700,0x0700}, {0x0701,0x0701,0x0701}, /* 0700 */ - {0x0702,0x0702,0x0702}, {0x0703,0x0703,0x0703}, /* 0702 */ - {0x0704,0x0704,0x0704}, {0x0705,0x0705,0x0705}, /* 0704 */ - {0x0706,0x0706,0x0706}, {0x0707,0x0707,0x0707}, /* 0706 */ - {0x0708,0x0708,0x0708}, {0x0709,0x0709,0x0709}, /* 0708 */ - {0x070A,0x070A,0x070A}, {0x070B,0x070B,0x070B}, /* 070A */ - {0x070C,0x070C,0x070C}, {0x070D,0x070D,0x070D}, /* 070C */ - {0x070E,0x070E,0x070E}, {0x070F,0x070F,0x070F}, /* 070E */ - {0x0710,0x0710,0x0710}, {0x0711,0x0711,0x0711}, /* 0710 */ - {0x0712,0x0712,0x0712}, {0x0713,0x0713,0x0713}, /* 0712 */ - {0x0714,0x0714,0x0714}, {0x0715,0x0715,0x0715}, /* 0714 */ - {0x0716,0x0716,0x0716}, {0x0717,0x0717,0x0717}, /* 0716 */ - {0x0718,0x0718,0x0718}, {0x0719,0x0719,0x0719}, /* 0718 */ - {0x071A,0x071A,0x071A}, {0x071B,0x071B,0x071B}, /* 071A */ - {0x071C,0x071C,0x071C}, {0x071D,0x071D,0x071D}, /* 071C */ - {0x071E,0x071E,0x071E}, {0x071F,0x071F,0x071F}, /* 071E */ - {0x0720,0x0720,0x0720}, {0x0721,0x0721,0x0721}, /* 0720 */ - {0x0722,0x0722,0x0722}, {0x0723,0x0723,0x0723}, /* 0722 */ - {0x0724,0x0724,0x0724}, {0x0725,0x0725,0x0725}, /* 0724 */ - {0x0726,0x0726,0x0726}, {0x0727,0x0727,0x0727}, /* 0726 */ - {0x0728,0x0728,0x0728}, {0x0729,0x0729,0x0729}, /* 0728 */ - {0x072A,0x072A,0x072A}, {0x072B,0x072B,0x072B}, /* 072A */ - {0x072C,0x072C,0x072C}, {0x072D,0x072D,0x072D}, /* 072C */ - {0x072E,0x072E,0x072E}, {0x072F,0x072F,0x072F}, /* 072E */ - {0x0730,0x0730,0x0730}, {0x0731,0x0731,0x0731}, /* 0730 */ - {0x0732,0x0732,0x0732}, {0x0733,0x0733,0x0733}, /* 0732 */ - {0x0734,0x0734,0x0734}, {0x0735,0x0735,0x0735}, /* 0734 */ - {0x0736,0x0736,0x0736}, {0x0737,0x0737,0x0737}, /* 0736 */ - {0x0738,0x0738,0x0738}, {0x0739,0x0739,0x0739}, /* 0738 */ - {0x073A,0x073A,0x073A}, {0x073B,0x073B,0x073B}, /* 073A */ - {0x073C,0x073C,0x073C}, {0x073D,0x073D,0x073D}, /* 073C */ - {0x073E,0x073E,0x073E}, {0x073F,0x073F,0x073F}, /* 073E */ - {0x0740,0x0740,0x0740}, {0x0741,0x0741,0x0741}, /* 0740 */ - {0x0742,0x0742,0x0742}, {0x0743,0x0743,0x0743}, /* 0742 */ - {0x0744,0x0744,0x0744}, {0x0745,0x0745,0x0745}, /* 0744 */ - {0x0746,0x0746,0x0746}, {0x0747,0x0747,0x0747}, /* 0746 */ - {0x0748,0x0748,0x0748}, {0x0749,0x0749,0x0749}, /* 0748 */ - {0x074A,0x074A,0x074A}, {0x074B,0x074B,0x074B}, /* 074A */ - {0x074C,0x074C,0x074C}, {0x074D,0x074D,0x074D}, /* 074C */ - {0x074E,0x074E,0x074E}, {0x074F,0x074F,0x074F}, /* 074E */ - {0x0750,0x0750,0x0750}, {0x0751,0x0751,0x0751}, /* 0750 */ - {0x0752,0x0752,0x0752}, {0x0753,0x0753,0x0753}, /* 0752 */ - {0x0754,0x0754,0x0754}, {0x0755,0x0755,0x0755}, /* 0754 */ - {0x0756,0x0756,0x0756}, {0x0757,0x0757,0x0757}, /* 0756 */ - {0x0758,0x0758,0x0758}, {0x0759,0x0759,0x0759}, /* 0758 */ - {0x075A,0x075A,0x075A}, {0x075B,0x075B,0x075B}, /* 075A */ - {0x075C,0x075C,0x075C}, {0x075D,0x075D,0x075D}, /* 075C */ - {0x075E,0x075E,0x075E}, {0x075F,0x075F,0x075F}, /* 075E */ - {0x0760,0x0760,0x0760}, {0x0761,0x0761,0x0761}, /* 0760 */ - {0x0762,0x0762,0x0762}, {0x0763,0x0763,0x0763}, /* 0762 */ - {0x0764,0x0764,0x0764}, {0x0765,0x0765,0x0765}, /* 0764 */ - {0x0766,0x0766,0x0766}, {0x0767,0x0767,0x0767}, /* 0766 */ - {0x0768,0x0768,0x0768}, {0x0769,0x0769,0x0769}, /* 0768 */ - {0x076A,0x076A,0x076A}, {0x076B,0x076B,0x076B}, /* 076A */ - {0x076C,0x076C,0x076C}, {0x076D,0x076D,0x076D}, /* 076C */ - {0x076E,0x076E,0x076E}, {0x076F,0x076F,0x076F}, /* 076E */ - {0x0770,0x0770,0x0770}, {0x0771,0x0771,0x0771}, /* 0770 */ - {0x0772,0x0772,0x0772}, {0x0773,0x0773,0x0773}, /* 0772 */ - {0x0774,0x0774,0x0774}, {0x0775,0x0775,0x0775}, /* 0774 */ - {0x0776,0x0776,0x0776}, {0x0777,0x0777,0x0777}, /* 0776 */ - {0x0778,0x0778,0x0778}, {0x0779,0x0779,0x0779}, /* 0778 */ - {0x077A,0x077A,0x077A}, {0x077B,0x077B,0x077B}, /* 077A */ - {0x077C,0x077C,0x077C}, {0x077D,0x077D,0x077D}, /* 077C */ - {0x077E,0x077E,0x077E}, {0x077F,0x077F,0x077F}, /* 077E */ - {0x0780,0x0780,0x0780}, {0x0781,0x0781,0x0781}, /* 0780 */ - {0x0782,0x0782,0x0782}, {0x0783,0x0783,0x0783}, /* 0782 */ - {0x0784,0x0784,0x0784}, {0x0785,0x0785,0x0785}, /* 0784 */ - {0x0786,0x0786,0x0786}, {0x0787,0x0787,0x0787}, /* 0786 */ - {0x0788,0x0788,0x0788}, {0x0789,0x0789,0x0789}, /* 0788 */ - {0x078A,0x078A,0x078A}, {0x078B,0x078B,0x078B}, /* 078A */ - {0x078C,0x078C,0x078C}, {0x078D,0x078D,0x078D}, /* 078C */ - {0x078E,0x078E,0x078E}, {0x078F,0x078F,0x078F}, /* 078E */ - {0x0790,0x0790,0x0790}, {0x0791,0x0791,0x0791}, /* 0790 */ - {0x0792,0x0792,0x0792}, {0x0793,0x0793,0x0793}, /* 0792 */ - {0x0794,0x0794,0x0794}, {0x0795,0x0795,0x0795}, /* 0794 */ - {0x0796,0x0796,0x0796}, {0x0797,0x0797,0x0797}, /* 0796 */ - {0x0798,0x0798,0x0798}, {0x0799,0x0799,0x0799}, /* 0798 */ - {0x079A,0x079A,0x079A}, {0x079B,0x079B,0x079B}, /* 079A */ - {0x079C,0x079C,0x079C}, {0x079D,0x079D,0x079D}, /* 079C */ - {0x079E,0x079E,0x079E}, {0x079F,0x079F,0x079F}, /* 079E */ - {0x07A0,0x07A0,0x07A0}, {0x07A1,0x07A1,0x07A1}, /* 07A0 */ - {0x07A2,0x07A2,0x07A2}, {0x07A3,0x07A3,0x07A3}, /* 07A2 */ - {0x07A4,0x07A4,0x07A4}, {0x07A5,0x07A5,0x07A5}, /* 07A4 */ - {0x07A6,0x07A6,0x07A6}, {0x07A7,0x07A7,0x07A7}, /* 07A6 */ - {0x07A8,0x07A8,0x07A8}, {0x07A9,0x07A9,0x07A9}, /* 07A8 */ - {0x07AA,0x07AA,0x07AA}, {0x07AB,0x07AB,0x07AB}, /* 07AA */ - {0x07AC,0x07AC,0x07AC}, {0x07AD,0x07AD,0x07AD}, /* 07AC */ - {0x07AE,0x07AE,0x07AE}, {0x07AF,0x07AF,0x07AF}, /* 07AE */ - {0x07B0,0x07B0,0x07B0}, {0x07B1,0x07B1,0x07B1}, /* 07B0 */ - {0x07B2,0x07B2,0x07B2}, {0x07B3,0x07B3,0x07B3}, /* 07B2 */ - {0x07B4,0x07B4,0x07B4}, {0x07B5,0x07B5,0x07B5}, /* 07B4 */ - {0x07B6,0x07B6,0x07B6}, {0x07B7,0x07B7,0x07B7}, /* 07B6 */ - {0x07B8,0x07B8,0x07B8}, {0x07B9,0x07B9,0x07B9}, /* 07B8 */ - {0x07BA,0x07BA,0x07BA}, {0x07BB,0x07BB,0x07BB}, /* 07BA */ - {0x07BC,0x07BC,0x07BC}, {0x07BD,0x07BD,0x07BD}, /* 07BC */ - {0x07BE,0x07BE,0x07BE}, {0x07BF,0x07BF,0x07BF}, /* 07BE */ - {0x07C0,0x07C0,0x07C0}, {0x07C1,0x07C1,0x07C1}, /* 07C0 */ - {0x07C2,0x07C2,0x07C2}, {0x07C3,0x07C3,0x07C3}, /* 07C2 */ - {0x07C4,0x07C4,0x07C4}, {0x07C5,0x07C5,0x07C5}, /* 07C4 */ - {0x07C6,0x07C6,0x07C6}, {0x07C7,0x07C7,0x07C7}, /* 07C6 */ - {0x07C8,0x07C8,0x07C8}, {0x07C9,0x07C9,0x07C9}, /* 07C8 */ - {0x07CA,0x07CA,0x07CA}, {0x07CB,0x07CB,0x07CB}, /* 07CA */ - {0x07CC,0x07CC,0x07CC}, {0x07CD,0x07CD,0x07CD}, /* 07CC */ - {0x07CE,0x07CE,0x07CE}, {0x07CF,0x07CF,0x07CF}, /* 07CE */ - {0x07D0,0x07D0,0x07D0}, {0x07D1,0x07D1,0x07D1}, /* 07D0 */ - {0x07D2,0x07D2,0x07D2}, {0x07D3,0x07D3,0x07D3}, /* 07D2 */ - {0x07D4,0x07D4,0x07D4}, {0x07D5,0x07D5,0x07D5}, /* 07D4 */ - {0x07D6,0x07D6,0x07D6}, {0x07D7,0x07D7,0x07D7}, /* 07D6 */ - {0x07D8,0x07D8,0x07D8}, {0x07D9,0x07D9,0x07D9}, /* 07D8 */ - {0x07DA,0x07DA,0x07DA}, {0x07DB,0x07DB,0x07DB}, /* 07DA */ - {0x07DC,0x07DC,0x07DC}, {0x07DD,0x07DD,0x07DD}, /* 07DC */ - {0x07DE,0x07DE,0x07DE}, {0x07DF,0x07DF,0x07DF}, /* 07DE */ - {0x07E0,0x07E0,0x07E0}, {0x07E1,0x07E1,0x07E1}, /* 07E0 */ - {0x07E2,0x07E2,0x07E2}, {0x07E3,0x07E3,0x07E3}, /* 07E2 */ - {0x07E4,0x07E4,0x07E4}, {0x07E5,0x07E5,0x07E5}, /* 07E4 */ - {0x07E6,0x07E6,0x07E6}, {0x07E7,0x07E7,0x07E7}, /* 07E6 */ - {0x07E8,0x07E8,0x07E8}, {0x07E9,0x07E9,0x07E9}, /* 07E8 */ - {0x07EA,0x07EA,0x07EA}, {0x07EB,0x07EB,0x07EB}, /* 07EA */ - {0x07EC,0x07EC,0x07EC}, {0x07ED,0x07ED,0x07ED}, /* 07EC */ - {0x07EE,0x07EE,0x07EE}, {0x07EF,0x07EF,0x07EF}, /* 07EE */ - {0x07F0,0x07F0,0x07F0}, {0x07F1,0x07F1,0x07F1}, /* 07F0 */ - {0x07F2,0x07F2,0x07F2}, {0x07F3,0x07F3,0x07F3}, /* 07F2 */ - {0x07F4,0x07F4,0x07F4}, {0x07F5,0x07F5,0x07F5}, /* 07F4 */ - {0x07F6,0x07F6,0x07F6}, {0x07F7,0x07F7,0x07F7}, /* 07F6 */ - {0x07F8,0x07F8,0x07F8}, {0x07F9,0x07F9,0x07F9}, /* 07F8 */ - {0x07FA,0x07FA,0x07FA}, {0x07FB,0x07FB,0x07FB}, /* 07FA */ - {0x07FC,0x07FC,0x07FC}, {0x07FD,0x07FD,0x07FD}, /* 07FC */ - {0x07FE,0x07FE,0x07FE}, {0x07FF,0x07FF,0x07FF} /* 07FE */ -}; - -static MY_UNICASE_CHARACTER plane1E[]={ - {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, - {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, - {0x1E04,0x1E05,0x0042}, {0x1E04,0x1E05,0x0042}, - {0x1E06,0x1E07,0x0042}, {0x1E06,0x1E07,0x0042}, - {0x1E08,0x1E09,0x0043}, {0x1E08,0x1E09,0x0043}, - {0x1E0A,0x1E0B,0x0044}, {0x1E0A,0x1E0B,0x0044}, - {0x1E0C,0x1E0D,0x0044}, {0x1E0C,0x1E0D,0x0044}, - {0x1E0E,0x1E0F,0x0044}, {0x1E0E,0x1E0F,0x0044}, - {0x1E10,0x1E11,0x0044}, {0x1E10,0x1E11,0x0044}, - {0x1E12,0x1E13,0x0044}, {0x1E12,0x1E13,0x0044}, - {0x1E14,0x1E15,0x0045}, {0x1E14,0x1E15,0x0045}, - {0x1E16,0x1E17,0x0045}, {0x1E16,0x1E17,0x0045}, - {0x1E18,0x1E19,0x0045}, {0x1E18,0x1E19,0x0045}, - {0x1E1A,0x1E1B,0x0045}, {0x1E1A,0x1E1B,0x0045}, - {0x1E1C,0x1E1D,0x0045}, {0x1E1C,0x1E1D,0x0045}, - {0x1E1E,0x1E1F,0x0046}, {0x1E1E,0x1E1F,0x0046}, - {0x1E20,0x1E21,0x0047}, {0x1E20,0x1E21,0x0047}, - {0x1E22,0x1E23,0x0048}, {0x1E22,0x1E23,0x0048}, - {0x1E24,0x1E25,0x0048}, {0x1E24,0x1E25,0x0048}, - {0x1E26,0x1E27,0x0048}, {0x1E26,0x1E27,0x0048}, - {0x1E28,0x1E29,0x0048}, {0x1E28,0x1E29,0x0048}, - {0x1E2A,0x1E2B,0x0048}, {0x1E2A,0x1E2B,0x0048}, - {0x1E2C,0x1E2D,0x0049}, {0x1E2C,0x1E2D,0x0049}, - {0x1E2E,0x1E2F,0x0049}, {0x1E2E,0x1E2F,0x0049}, - {0x1E30,0x1E31,0x004B}, {0x1E30,0x1E31,0x004B}, - {0x1E32,0x1E33,0x004B}, {0x1E32,0x1E33,0x004B}, - {0x1E34,0x1E35,0x004B}, {0x1E34,0x1E35,0x004B}, - {0x1E36,0x1E37,0x004C}, {0x1E36,0x1E37,0x004C}, - {0x1E38,0x1E39,0x004C}, {0x1E38,0x1E39,0x004C}, - {0x1E3A,0x1E3B,0x004C}, {0x1E3A,0x1E3B,0x004C}, - {0x1E3C,0x1E3D,0x004C}, {0x1E3C,0x1E3D,0x004C}, - {0x1E3E,0x1E3F,0x004D}, {0x1E3E,0x1E3F,0x004D}, - {0x1E40,0x1E41,0x004D}, {0x1E40,0x1E41,0x004D}, - {0x1E42,0x1E43,0x004D}, {0x1E42,0x1E43,0x004D}, - {0x1E44,0x1E45,0x004E}, {0x1E44,0x1E45,0x004E}, - {0x1E46,0x1E47,0x004E}, {0x1E46,0x1E47,0x004E}, - {0x1E48,0x1E49,0x004E}, {0x1E48,0x1E49,0x004E}, - {0x1E4A,0x1E4B,0x004E}, {0x1E4A,0x1E4B,0x004E}, - {0x1E4C,0x1E4D,0x004F}, {0x1E4C,0x1E4D,0x004F}, - {0x1E4E,0x1E4F,0x004F}, {0x1E4E,0x1E4F,0x004F}, - {0x1E50,0x1E51,0x004F}, {0x1E50,0x1E51,0x004F}, - {0x1E52,0x1E53,0x004F}, {0x1E52,0x1E53,0x004F}, - {0x1E54,0x1E55,0x0050}, {0x1E54,0x1E55,0x0050}, - {0x1E56,0x1E57,0x0050}, {0x1E56,0x1E57,0x0050}, - {0x1E58,0x1E59,0x0052}, {0x1E58,0x1E59,0x0052}, - {0x1E5A,0x1E5B,0x0052}, {0x1E5A,0x1E5B,0x0052}, - {0x1E5C,0x1E5D,0x0052}, {0x1E5C,0x1E5D,0x0052}, - {0x1E5E,0x1E5F,0x0052}, {0x1E5E,0x1E5F,0x0052}, - {0x1E60,0x1E61,0x0053}, {0x1E60,0x1E61,0x0053}, - {0x1E62,0x1E63,0x0053}, {0x1E62,0x1E63,0x0053}, - {0x1E64,0x1E65,0x0053}, {0x1E64,0x1E65,0x0053}, - {0x1E66,0x1E67,0x0053}, {0x1E66,0x1E67,0x0053}, - {0x1E68,0x1E69,0x0053}, {0x1E68,0x1E69,0x0053}, - {0x1E6A,0x1E6B,0x0054}, {0x1E6A,0x1E6B,0x0054}, - {0x1E6C,0x1E6D,0x0054}, {0x1E6C,0x1E6D,0x0054}, - {0x1E6E,0x1E6F,0x0054}, {0x1E6E,0x1E6F,0x0054}, - {0x1E70,0x1E71,0x0054}, {0x1E70,0x1E71,0x0054}, - {0x1E72,0x1E73,0x0055}, {0x1E72,0x1E73,0x0055}, - {0x1E74,0x1E75,0x0055}, {0x1E74,0x1E75,0x0055}, - {0x1E76,0x1E77,0x0055}, {0x1E76,0x1E77,0x0055}, - {0x1E78,0x1E79,0x0055}, {0x1E78,0x1E79,0x0055}, - {0x1E7A,0x1E7B,0x0055}, {0x1E7A,0x1E7B,0x0055}, - {0x1E7C,0x1E7D,0x0056}, {0x1E7C,0x1E7D,0x0056}, - {0x1E7E,0x1E7F,0x0056}, {0x1E7E,0x1E7F,0x0056}, - {0x1E80,0x1E81,0x0057}, {0x1E80,0x1E81,0x0057}, - {0x1E82,0x1E83,0x0057}, {0x1E82,0x1E83,0x0057}, - {0x1E84,0x1E85,0x0057}, {0x1E84,0x1E85,0x0057}, - {0x1E86,0x1E87,0x0057}, {0x1E86,0x1E87,0x0057}, - {0x1E88,0x1E89,0x0057}, {0x1E88,0x1E89,0x0057}, - {0x1E8A,0x1E8B,0x0058}, {0x1E8A,0x1E8B,0x0058}, - {0x1E8C,0x1E8D,0x0058}, {0x1E8C,0x1E8D,0x0058}, - {0x1E8E,0x1E8F,0x0059}, {0x1E8E,0x1E8F,0x0059}, - {0x1E90,0x1E91,0x005A}, {0x1E90,0x1E91,0x005A}, - {0x1E92,0x1E93,0x005A}, {0x1E92,0x1E93,0x005A}, - {0x1E94,0x1E95,0x005A}, {0x1E94,0x1E95,0x005A}, - {0x1E96,0x1E96,0x0048}, {0x1E97,0x1E97,0x0054}, - {0x1E98,0x1E98,0x0057}, {0x1E99,0x1E99,0x0059}, - {0x1E9A,0x1E9A,0x1E9A}, {0x1E60,0x1E9B,0x0053}, - {0x1E9C,0x1E9C,0x1E9C}, {0x1E9D,0x1E9D,0x1E9D}, - {0x1E9E,0x1E9E,0x1E9E}, {0x1E9F,0x1E9F,0x1E9F}, - {0x1EA0,0x1EA1,0x0041}, {0x1EA0,0x1EA1,0x0041}, - {0x1EA2,0x1EA3,0x0041}, {0x1EA2,0x1EA3,0x0041}, - {0x1EA4,0x1EA5,0x0041}, {0x1EA4,0x1EA5,0x0041}, - {0x1EA6,0x1EA7,0x0041}, {0x1EA6,0x1EA7,0x0041}, - {0x1EA8,0x1EA9,0x0041}, {0x1EA8,0x1EA9,0x0041}, - {0x1EAA,0x1EAB,0x0041}, {0x1EAA,0x1EAB,0x0041}, - {0x1EAC,0x1EAD,0x0041}, {0x1EAC,0x1EAD,0x0041}, - {0x1EAE,0x1EAF,0x0041}, {0x1EAE,0x1EAF,0x0041}, - {0x1EB0,0x1EB1,0x0041}, {0x1EB0,0x1EB1,0x0041}, - {0x1EB2,0x1EB3,0x0041}, {0x1EB2,0x1EB3,0x0041}, - {0x1EB4,0x1EB5,0x0041}, {0x1EB4,0x1EB5,0x0041}, - {0x1EB6,0x1EB7,0x0041}, {0x1EB6,0x1EB7,0x0041}, - {0x1EB8,0x1EB9,0x0045}, {0x1EB8,0x1EB9,0x0045}, - {0x1EBA,0x1EBB,0x0045}, {0x1EBA,0x1EBB,0x0045}, - {0x1EBC,0x1EBD,0x0045}, {0x1EBC,0x1EBD,0x0045}, - {0x1EBE,0x1EBF,0x0045}, {0x1EBE,0x1EBF,0x0045}, - {0x1EC0,0x1EC1,0x0045}, {0x1EC0,0x1EC1,0x0045}, - {0x1EC2,0x1EC3,0x0045}, {0x1EC2,0x1EC3,0x0045}, - {0x1EC4,0x1EC5,0x0045}, {0x1EC4,0x1EC5,0x0045}, - {0x1EC6,0x1EC7,0x0045}, {0x1EC6,0x1EC7,0x0045}, - {0x1EC8,0x1EC9,0x0049}, {0x1EC8,0x1EC9,0x0049}, - {0x1ECA,0x1ECB,0x0049}, {0x1ECA,0x1ECB,0x0049}, - {0x1ECC,0x1ECD,0x004F}, {0x1ECC,0x1ECD,0x004F}, - {0x1ECE,0x1ECF,0x004F}, {0x1ECE,0x1ECF,0x004F}, - {0x1ED0,0x1ED1,0x004F}, {0x1ED0,0x1ED1,0x004F}, - {0x1ED2,0x1ED3,0x004F}, {0x1ED2,0x1ED3,0x004F}, - {0x1ED4,0x1ED5,0x004F}, {0x1ED4,0x1ED5,0x004F}, - {0x1ED6,0x1ED7,0x004F}, {0x1ED6,0x1ED7,0x004F}, - {0x1ED8,0x1ED9,0x004F}, {0x1ED8,0x1ED9,0x004F}, - {0x1EDA,0x1EDB,0x004F}, {0x1EDA,0x1EDB,0x004F}, - {0x1EDC,0x1EDD,0x004F}, {0x1EDC,0x1EDD,0x004F}, - {0x1EDE,0x1EDF,0x004F}, {0x1EDE,0x1EDF,0x004F}, - {0x1EE0,0x1EE1,0x004F}, {0x1EE0,0x1EE1,0x004F}, - {0x1EE2,0x1EE3,0x004F}, {0x1EE2,0x1EE3,0x004F}, - {0x1EE4,0x1EE5,0x0055}, {0x1EE4,0x1EE5,0x0055}, - {0x1EE6,0x1EE7,0x0055}, {0x1EE6,0x1EE7,0x0055}, - {0x1EE8,0x1EE9,0x0055}, {0x1EE8,0x1EE9,0x0055}, - {0x1EEA,0x1EEB,0x0055}, {0x1EEA,0x1EEB,0x0055}, - {0x1EEC,0x1EED,0x0055}, {0x1EEC,0x1EED,0x0055}, - {0x1EEE,0x1EEF,0x0055}, {0x1EEE,0x1EEF,0x0055}, - {0x1EF0,0x1EF1,0x0055}, {0x1EF0,0x1EF1,0x0055}, - {0x1EF2,0x1EF3,0x0059}, {0x1EF2,0x1EF3,0x0059}, - {0x1EF4,0x1EF5,0x0059}, {0x1EF4,0x1EF5,0x0059}, - {0x1EF6,0x1EF7,0x0059}, {0x1EF6,0x1EF7,0x0059}, - {0x1EF8,0x1EF9,0x0059}, {0x1EF8,0x1EF9,0x0059}, - {0x1EFA,0x1EFA,0x1EFA}, {0x1EFB,0x1EFB,0x1EFB}, - {0x1EFC,0x1EFC,0x1EFC}, {0x1EFD,0x1EFD,0x1EFD}, - {0x1EFE,0x1EFE,0x1EFE}, {0x1EFF,0x1EFF,0x1EFF} -}; - -static MY_UNICASE_CHARACTER plane1F[]={ - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, - {0x1F16,0x1F16,0x1F16}, {0x1F17,0x1F17,0x1F17}, - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, - {0x1F1E,0x1F1E,0x1F1E}, {0x1F1F,0x1F1F,0x1F1F}, - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, - {0x1F46,0x1F46,0x1F46}, {0x1F47,0x1F47,0x1F47}, - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, - {0x1F4E,0x1F4E,0x1F4E}, {0x1F4F,0x1F4F,0x1F4F}, - {0x1F50,0x1F50,0x03A5}, {0x1F59,0x1F51,0x03A5}, - {0x1F52,0x1F52,0x03A5}, {0x1F5B,0x1F53,0x03A5}, - {0x1F54,0x1F54,0x03A5}, {0x1F5D,0x1F55,0x03A5}, - {0x1F56,0x1F56,0x03A5}, {0x1F5F,0x1F57,0x03A5}, - {0x1F58,0x1F58,0x1F58}, {0x1F59,0x1F51,0x03A5}, - {0x1F5A,0x1F5A,0x1F5A}, {0x1F5B,0x1F53,0x03A5}, - {0x1F5C,0x1F5C,0x1F5C}, {0x1F5D,0x1F55,0x03A5}, - {0x1F5E,0x1F5E,0x1F5E}, {0x1F5F,0x1F57,0x03A5}, - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, - {0x1F7E,0x1F7E,0x1F7E}, {0x1F7F,0x1F7F,0x1F7F}, - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, - {0x1FB2,0x1FB2,0x0391}, {0x1FBC,0x1FB3,0x0391}, - {0x1FB4,0x1FB4,0x0391}, {0x1FB5,0x1FB5,0x1FB5}, - {0x1FB6,0x1FB6,0x0391}, {0x1FB7,0x1FB7,0x0391}, - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, - {0x1FBC,0x1FB3,0x0391}, {0x1FBD,0x1FBD,0x1FBD}, - {0x0399,0x1FBE,0x0399}, {0x1FBF,0x1FBF,0x1FBF}, - {0x1FC0,0x1FC0,0x1FC0}, {0x1FC1,0x1FC1,0x1FC1}, - {0x1FC2,0x1FC2,0x0397}, {0x1FCC,0x1FC3,0x0397}, - {0x1FC4,0x1FC4,0x0397}, {0x1FC5,0x1FC5,0x1FC5}, - {0x1FC6,0x1FC6,0x0397}, {0x1FC7,0x1FC7,0x0397}, - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, - {0x1FCC,0x1FC3,0x0397}, {0x1FCD,0x1FCD,0x1FCD}, - {0x1FCE,0x1FCE,0x1FCE}, {0x1FCF,0x1FCF,0x1FCF}, - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, - {0x1FD2,0x1FD2,0x0399}, {0x1FD3,0x1FD3,0x1FD3}, - {0x1FD4,0x1FD4,0x1FD4}, {0x1FD5,0x1FD5,0x1FD5}, - {0x1FD6,0x1FD6,0x0399}, {0x1FD7,0x1FD7,0x0399}, - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, - {0x1FDC,0x1FDC,0x1FDC}, {0x1FDD,0x1FDD,0x1FDD}, - {0x1FDE,0x1FDE,0x1FDE}, {0x1FDF,0x1FDF,0x1FDF}, - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, - {0x1FE2,0x1FE2,0x03A5}, {0x1FE3,0x1FE3,0x1FE3}, - {0x1FE4,0x1FE4,0x03A1}, {0x1FEC,0x1FE5,0x03A1}, - {0x1FE6,0x1FE6,0x03A5}, {0x1FE7,0x1FE7,0x03A5}, - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, - {0x1FEC,0x1FE5,0x03A1}, {0x1FED,0x1FED,0x1FED}, - {0x1FEE,0x1FEE,0x1FEE}, {0x1FEF,0x1FEF,0x1FEF}, - {0x1FF0,0x1FF0,0x1FF0}, {0x1FF1,0x1FF1,0x1FF1}, - {0x1FF2,0x1FF2,0x03A9}, {0x1FFC,0x1FF3,0x03A9}, - {0x1FF4,0x1FF4,0x03A9}, {0x1FF5,0x1FF5,0x1FF5}, - {0x1FF6,0x1FF6,0x03A9}, {0x1FF7,0x1FF7,0x03A9}, - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, - {0x1FFC,0x1FF3,0x03A9}, {0x1FFD,0x1FFD,0x1FFD}, - {0x1FFE,0x1FFE,0x1FFE}, {0x1FFF,0x1FFF,0x1FFF} -}; - -static MY_UNICASE_CHARACTER plane21[]={ - {0x2100,0x2100,0x2100}, {0x2101,0x2101,0x2101}, - {0x2102,0x2102,0x2102}, {0x2103,0x2103,0x2103}, - {0x2104,0x2104,0x2104}, {0x2105,0x2105,0x2105}, - {0x2106,0x2106,0x2106}, {0x2107,0x2107,0x2107}, - {0x2108,0x2108,0x2108}, {0x2109,0x2109,0x2109}, - {0x210A,0x210A,0x210A}, {0x210B,0x210B,0x210B}, - {0x210C,0x210C,0x210C}, {0x210D,0x210D,0x210D}, - {0x210E,0x210E,0x210E}, {0x210F,0x210F,0x210F}, - {0x2110,0x2110,0x2110}, {0x2111,0x2111,0x2111}, - {0x2112,0x2112,0x2112}, {0x2113,0x2113,0x2113}, - {0x2114,0x2114,0x2114}, {0x2115,0x2115,0x2115}, - {0x2116,0x2116,0x2116}, {0x2117,0x2117,0x2117}, - {0x2118,0x2118,0x2118}, {0x2119,0x2119,0x2119}, - {0x211A,0x211A,0x211A}, {0x211B,0x211B,0x211B}, - {0x211C,0x211C,0x211C}, {0x211D,0x211D,0x211D}, - {0x211E,0x211E,0x211E}, {0x211F,0x211F,0x211F}, - {0x2120,0x2120,0x2120}, {0x2121,0x2121,0x2121}, - {0x2122,0x2122,0x2122}, {0x2123,0x2123,0x2123}, - {0x2124,0x2124,0x2124}, {0x2125,0x2125,0x2125}, - {0x2126,0x03C9,0x2126}, {0x2127,0x2127,0x2127}, - {0x2128,0x2128,0x2128}, {0x2129,0x2129,0x2129}, - {0x212A,0x006B,0x212A}, {0x212B,0x00E5,0x212B}, - {0x212C,0x212C,0x212C}, {0x212D,0x212D,0x212D}, - {0x212E,0x212E,0x212E}, {0x212F,0x212F,0x212F}, - {0x2130,0x2130,0x2130}, {0x2131,0x2131,0x2131}, - {0x2132,0x2132,0x2132}, {0x2133,0x2133,0x2133}, - {0x2134,0x2134,0x2134}, {0x2135,0x2135,0x2135}, - {0x2136,0x2136,0x2136}, {0x2137,0x2137,0x2137}, - {0x2138,0x2138,0x2138}, {0x2139,0x2139,0x2139}, - {0x213A,0x213A,0x213A}, {0x213B,0x213B,0x213B}, - {0x213C,0x213C,0x213C}, {0x213D,0x213D,0x213D}, - {0x213E,0x213E,0x213E}, {0x213F,0x213F,0x213F}, - {0x2140,0x2140,0x2140}, {0x2141,0x2141,0x2141}, - {0x2142,0x2142,0x2142}, {0x2143,0x2143,0x2143}, - {0x2144,0x2144,0x2144}, {0x2145,0x2145,0x2145}, - {0x2146,0x2146,0x2146}, {0x2147,0x2147,0x2147}, - {0x2148,0x2148,0x2148}, {0x2149,0x2149,0x2149}, - {0x214A,0x214A,0x214A}, {0x214B,0x214B,0x214B}, - {0x214C,0x214C,0x214C}, {0x214D,0x214D,0x214D}, - {0x214E,0x214E,0x214E}, {0x214F,0x214F,0x214F}, - {0x2150,0x2150,0x2150}, {0x2151,0x2151,0x2151}, - {0x2152,0x2152,0x2152}, {0x2153,0x2153,0x2153}, - {0x2154,0x2154,0x2154}, {0x2155,0x2155,0x2155}, - {0x2156,0x2156,0x2156}, {0x2157,0x2157,0x2157}, - {0x2158,0x2158,0x2158}, {0x2159,0x2159,0x2159}, - {0x215A,0x215A,0x215A}, {0x215B,0x215B,0x215B}, - {0x215C,0x215C,0x215C}, {0x215D,0x215D,0x215D}, - {0x215E,0x215E,0x215E}, {0x215F,0x215F,0x215F}, - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, - {0x2180,0x2180,0x2180}, {0x2181,0x2181,0x2181}, - {0x2182,0x2182,0x2182}, {0x2183,0x2183,0x2183}, - {0x2184,0x2184,0x2184}, {0x2185,0x2185,0x2185}, - {0x2186,0x2186,0x2186}, {0x2187,0x2187,0x2187}, - {0x2188,0x2188,0x2188}, {0x2189,0x2189,0x2189}, - {0x218A,0x218A,0x218A}, {0x218B,0x218B,0x218B}, - {0x218C,0x218C,0x218C}, {0x218D,0x218D,0x218D}, - {0x218E,0x218E,0x218E}, {0x218F,0x218F,0x218F}, - {0x2190,0x2190,0x2190}, {0x2191,0x2191,0x2191}, - {0x2192,0x2192,0x2192}, {0x2193,0x2193,0x2193}, - {0x2194,0x2194,0x2194}, {0x2195,0x2195,0x2195}, - {0x2196,0x2196,0x2196}, {0x2197,0x2197,0x2197}, - {0x2198,0x2198,0x2198}, {0x2199,0x2199,0x2199}, - {0x219A,0x219A,0x219A}, {0x219B,0x219B,0x219B}, - {0x219C,0x219C,0x219C}, {0x219D,0x219D,0x219D}, - {0x219E,0x219E,0x219E}, {0x219F,0x219F,0x219F}, - {0x21A0,0x21A0,0x21A0}, {0x21A1,0x21A1,0x21A1}, - {0x21A2,0x21A2,0x21A2}, {0x21A3,0x21A3,0x21A3}, - {0x21A4,0x21A4,0x21A4}, {0x21A5,0x21A5,0x21A5}, - {0x21A6,0x21A6,0x21A6}, {0x21A7,0x21A7,0x21A7}, - {0x21A8,0x21A8,0x21A8}, {0x21A9,0x21A9,0x21A9}, - {0x21AA,0x21AA,0x21AA}, {0x21AB,0x21AB,0x21AB}, - {0x21AC,0x21AC,0x21AC}, {0x21AD,0x21AD,0x21AD}, - {0x21AE,0x21AE,0x21AE}, {0x21AF,0x21AF,0x21AF}, - {0x21B0,0x21B0,0x21B0}, {0x21B1,0x21B1,0x21B1}, - {0x21B2,0x21B2,0x21B2}, {0x21B3,0x21B3,0x21B3}, - {0x21B4,0x21B4,0x21B4}, {0x21B5,0x21B5,0x21B5}, - {0x21B6,0x21B6,0x21B6}, {0x21B7,0x21B7,0x21B7}, - {0x21B8,0x21B8,0x21B8}, {0x21B9,0x21B9,0x21B9}, - {0x21BA,0x21BA,0x21BA}, {0x21BB,0x21BB,0x21BB}, - {0x21BC,0x21BC,0x21BC}, {0x21BD,0x21BD,0x21BD}, - {0x21BE,0x21BE,0x21BE}, {0x21BF,0x21BF,0x21BF}, - {0x21C0,0x21C0,0x21C0}, {0x21C1,0x21C1,0x21C1}, - {0x21C2,0x21C2,0x21C2}, {0x21C3,0x21C3,0x21C3}, - {0x21C4,0x21C4,0x21C4}, {0x21C5,0x21C5,0x21C5}, - {0x21C6,0x21C6,0x21C6}, {0x21C7,0x21C7,0x21C7}, - {0x21C8,0x21C8,0x21C8}, {0x21C9,0x21C9,0x21C9}, - {0x21CA,0x21CA,0x21CA}, {0x21CB,0x21CB,0x21CB}, - {0x21CC,0x21CC,0x21CC}, {0x21CD,0x21CD,0x21CD}, - {0x21CE,0x21CE,0x21CE}, {0x21CF,0x21CF,0x21CF}, - {0x21D0,0x21D0,0x21D0}, {0x21D1,0x21D1,0x21D1}, - {0x21D2,0x21D2,0x21D2}, {0x21D3,0x21D3,0x21D3}, - {0x21D4,0x21D4,0x21D4}, {0x21D5,0x21D5,0x21D5}, - {0x21D6,0x21D6,0x21D6}, {0x21D7,0x21D7,0x21D7}, - {0x21D8,0x21D8,0x21D8}, {0x21D9,0x21D9,0x21D9}, - {0x21DA,0x21DA,0x21DA}, {0x21DB,0x21DB,0x21DB}, - {0x21DC,0x21DC,0x21DC}, {0x21DD,0x21DD,0x21DD}, - {0x21DE,0x21DE,0x21DE}, {0x21DF,0x21DF,0x21DF}, - {0x21E0,0x21E0,0x21E0}, {0x21E1,0x21E1,0x21E1}, - {0x21E2,0x21E2,0x21E2}, {0x21E3,0x21E3,0x21E3}, - {0x21E4,0x21E4,0x21E4}, {0x21E5,0x21E5,0x21E5}, - {0x21E6,0x21E6,0x21E6}, {0x21E7,0x21E7,0x21E7}, - {0x21E8,0x21E8,0x21E8}, {0x21E9,0x21E9,0x21E9}, - {0x21EA,0x21EA,0x21EA}, {0x21EB,0x21EB,0x21EB}, - {0x21EC,0x21EC,0x21EC}, {0x21ED,0x21ED,0x21ED}, - {0x21EE,0x21EE,0x21EE}, {0x21EF,0x21EF,0x21EF}, - {0x21F0,0x21F0,0x21F0}, {0x21F1,0x21F1,0x21F1}, - {0x21F2,0x21F2,0x21F2}, {0x21F3,0x21F3,0x21F3}, - {0x21F4,0x21F4,0x21F4}, {0x21F5,0x21F5,0x21F5}, - {0x21F6,0x21F6,0x21F6}, {0x21F7,0x21F7,0x21F7}, - {0x21F8,0x21F8,0x21F8}, {0x21F9,0x21F9,0x21F9}, - {0x21FA,0x21FA,0x21FA}, {0x21FB,0x21FB,0x21FB}, - {0x21FC,0x21FC,0x21FC}, {0x21FD,0x21FD,0x21FD}, - {0x21FE,0x21FE,0x21FE}, {0x21FF,0x21FF,0x21FF} -}; - -static MY_UNICASE_CHARACTER plane24[]={ - {0x2400,0x2400,0x2400}, {0x2401,0x2401,0x2401}, - {0x2402,0x2402,0x2402}, {0x2403,0x2403,0x2403}, - {0x2404,0x2404,0x2404}, {0x2405,0x2405,0x2405}, - {0x2406,0x2406,0x2406}, {0x2407,0x2407,0x2407}, - {0x2408,0x2408,0x2408}, {0x2409,0x2409,0x2409}, - {0x240A,0x240A,0x240A}, {0x240B,0x240B,0x240B}, - {0x240C,0x240C,0x240C}, {0x240D,0x240D,0x240D}, - {0x240E,0x240E,0x240E}, {0x240F,0x240F,0x240F}, - {0x2410,0x2410,0x2410}, {0x2411,0x2411,0x2411}, - {0x2412,0x2412,0x2412}, {0x2413,0x2413,0x2413}, - {0x2414,0x2414,0x2414}, {0x2415,0x2415,0x2415}, - {0x2416,0x2416,0x2416}, {0x2417,0x2417,0x2417}, - {0x2418,0x2418,0x2418}, {0x2419,0x2419,0x2419}, - {0x241A,0x241A,0x241A}, {0x241B,0x241B,0x241B}, - {0x241C,0x241C,0x241C}, {0x241D,0x241D,0x241D}, - {0x241E,0x241E,0x241E}, {0x241F,0x241F,0x241F}, - {0x2420,0x2420,0x2420}, {0x2421,0x2421,0x2421}, - {0x2422,0x2422,0x2422}, {0x2423,0x2423,0x2423}, - {0x2424,0x2424,0x2424}, {0x2425,0x2425,0x2425}, - {0x2426,0x2426,0x2426}, {0x2427,0x2427,0x2427}, - {0x2428,0x2428,0x2428}, {0x2429,0x2429,0x2429}, - {0x242A,0x242A,0x242A}, {0x242B,0x242B,0x242B}, - {0x242C,0x242C,0x242C}, {0x242D,0x242D,0x242D}, - {0x242E,0x242E,0x242E}, {0x242F,0x242F,0x242F}, - {0x2430,0x2430,0x2430}, {0x2431,0x2431,0x2431}, - {0x2432,0x2432,0x2432}, {0x2433,0x2433,0x2433}, - {0x2434,0x2434,0x2434}, {0x2435,0x2435,0x2435}, - {0x2436,0x2436,0x2436}, {0x2437,0x2437,0x2437}, - {0x2438,0x2438,0x2438}, {0x2439,0x2439,0x2439}, - {0x243A,0x243A,0x243A}, {0x243B,0x243B,0x243B}, - {0x243C,0x243C,0x243C}, {0x243D,0x243D,0x243D}, - {0x243E,0x243E,0x243E}, {0x243F,0x243F,0x243F}, - {0x2440,0x2440,0x2440}, {0x2441,0x2441,0x2441}, - {0x2442,0x2442,0x2442}, {0x2443,0x2443,0x2443}, - {0x2444,0x2444,0x2444}, {0x2445,0x2445,0x2445}, - {0x2446,0x2446,0x2446}, {0x2447,0x2447,0x2447}, - {0x2448,0x2448,0x2448}, {0x2449,0x2449,0x2449}, - {0x244A,0x244A,0x244A}, {0x244B,0x244B,0x244B}, - {0x244C,0x244C,0x244C}, {0x244D,0x244D,0x244D}, - {0x244E,0x244E,0x244E}, {0x244F,0x244F,0x244F}, - {0x2450,0x2450,0x2450}, {0x2451,0x2451,0x2451}, - {0x2452,0x2452,0x2452}, {0x2453,0x2453,0x2453}, - {0x2454,0x2454,0x2454}, {0x2455,0x2455,0x2455}, - {0x2456,0x2456,0x2456}, {0x2457,0x2457,0x2457}, - {0x2458,0x2458,0x2458}, {0x2459,0x2459,0x2459}, - {0x245A,0x245A,0x245A}, {0x245B,0x245B,0x245B}, - {0x245C,0x245C,0x245C}, {0x245D,0x245D,0x245D}, - {0x245E,0x245E,0x245E}, {0x245F,0x245F,0x245F}, - {0x2460,0x2460,0x2460}, {0x2461,0x2461,0x2461}, - {0x2462,0x2462,0x2462}, {0x2463,0x2463,0x2463}, - {0x2464,0x2464,0x2464}, {0x2465,0x2465,0x2465}, - {0x2466,0x2466,0x2466}, {0x2467,0x2467,0x2467}, - {0x2468,0x2468,0x2468}, {0x2469,0x2469,0x2469}, - {0x246A,0x246A,0x246A}, {0x246B,0x246B,0x246B}, - {0x246C,0x246C,0x246C}, {0x246D,0x246D,0x246D}, - {0x246E,0x246E,0x246E}, {0x246F,0x246F,0x246F}, - {0x2470,0x2470,0x2470}, {0x2471,0x2471,0x2471}, - {0x2472,0x2472,0x2472}, {0x2473,0x2473,0x2473}, - {0x2474,0x2474,0x2474}, {0x2475,0x2475,0x2475}, - {0x2476,0x2476,0x2476}, {0x2477,0x2477,0x2477}, - {0x2478,0x2478,0x2478}, {0x2479,0x2479,0x2479}, - {0x247A,0x247A,0x247A}, {0x247B,0x247B,0x247B}, - {0x247C,0x247C,0x247C}, {0x247D,0x247D,0x247D}, - {0x247E,0x247E,0x247E}, {0x247F,0x247F,0x247F}, - {0x2480,0x2480,0x2480}, {0x2481,0x2481,0x2481}, - {0x2482,0x2482,0x2482}, {0x2483,0x2483,0x2483}, - {0x2484,0x2484,0x2484}, {0x2485,0x2485,0x2485}, - {0x2486,0x2486,0x2486}, {0x2487,0x2487,0x2487}, - {0x2488,0x2488,0x2488}, {0x2489,0x2489,0x2489}, - {0x248A,0x248A,0x248A}, {0x248B,0x248B,0x248B}, - {0x248C,0x248C,0x248C}, {0x248D,0x248D,0x248D}, - {0x248E,0x248E,0x248E}, {0x248F,0x248F,0x248F}, - {0x2490,0x2490,0x2490}, {0x2491,0x2491,0x2491}, - {0x2492,0x2492,0x2492}, {0x2493,0x2493,0x2493}, - {0x2494,0x2494,0x2494}, {0x2495,0x2495,0x2495}, - {0x2496,0x2496,0x2496}, {0x2497,0x2497,0x2497}, - {0x2498,0x2498,0x2498}, {0x2499,0x2499,0x2499}, - {0x249A,0x249A,0x249A}, {0x249B,0x249B,0x249B}, - {0x249C,0x249C,0x249C}, {0x249D,0x249D,0x249D}, - {0x249E,0x249E,0x249E}, {0x249F,0x249F,0x249F}, - {0x24A0,0x24A0,0x24A0}, {0x24A1,0x24A1,0x24A1}, - {0x24A2,0x24A2,0x24A2}, {0x24A3,0x24A3,0x24A3}, - {0x24A4,0x24A4,0x24A4}, {0x24A5,0x24A5,0x24A5}, - {0x24A6,0x24A6,0x24A6}, {0x24A7,0x24A7,0x24A7}, - {0x24A8,0x24A8,0x24A8}, {0x24A9,0x24A9,0x24A9}, - {0x24AA,0x24AA,0x24AA}, {0x24AB,0x24AB,0x24AB}, - {0x24AC,0x24AC,0x24AC}, {0x24AD,0x24AD,0x24AD}, - {0x24AE,0x24AE,0x24AE}, {0x24AF,0x24AF,0x24AF}, - {0x24B0,0x24B0,0x24B0}, {0x24B1,0x24B1,0x24B1}, - {0x24B2,0x24B2,0x24B2}, {0x24B3,0x24B3,0x24B3}, - {0x24B4,0x24B4,0x24B4}, {0x24B5,0x24B5,0x24B5}, - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, - {0x24EA,0x24EA,0x24EA}, {0x24EB,0x24EB,0x24EB}, - {0x24EC,0x24EC,0x24EC}, {0x24ED,0x24ED,0x24ED}, - {0x24EE,0x24EE,0x24EE}, {0x24EF,0x24EF,0x24EF}, - {0x24F0,0x24F0,0x24F0}, {0x24F1,0x24F1,0x24F1}, - {0x24F2,0x24F2,0x24F2}, {0x24F3,0x24F3,0x24F3}, - {0x24F4,0x24F4,0x24F4}, {0x24F5,0x24F5,0x24F5}, - {0x24F6,0x24F6,0x24F6}, {0x24F7,0x24F7,0x24F7}, - {0x24F8,0x24F8,0x24F8}, {0x24F9,0x24F9,0x24F9}, - {0x24FA,0x24FA,0x24FA}, {0x24FB,0x24FB,0x24FB}, - {0x24FC,0x24FC,0x24FC}, {0x24FD,0x24FD,0x24FD}, - {0x24FE,0x24FE,0x24FE}, {0x24FF,0x24FF,0x24FF} -}; - -static MY_UNICASE_CHARACTER planeFF[]={ - {0xFF00,0xFF00,0xFF00}, {0xFF01,0xFF01,0xFF01}, - {0xFF02,0xFF02,0xFF02}, {0xFF03,0xFF03,0xFF03}, - {0xFF04,0xFF04,0xFF04}, {0xFF05,0xFF05,0xFF05}, - {0xFF06,0xFF06,0xFF06}, {0xFF07,0xFF07,0xFF07}, - {0xFF08,0xFF08,0xFF08}, {0xFF09,0xFF09,0xFF09}, - {0xFF0A,0xFF0A,0xFF0A}, {0xFF0B,0xFF0B,0xFF0B}, - {0xFF0C,0xFF0C,0xFF0C}, {0xFF0D,0xFF0D,0xFF0D}, - {0xFF0E,0xFF0E,0xFF0E}, {0xFF0F,0xFF0F,0xFF0F}, - {0xFF10,0xFF10,0xFF10}, {0xFF11,0xFF11,0xFF11}, - {0xFF12,0xFF12,0xFF12}, {0xFF13,0xFF13,0xFF13}, - {0xFF14,0xFF14,0xFF14}, {0xFF15,0xFF15,0xFF15}, - {0xFF16,0xFF16,0xFF16}, {0xFF17,0xFF17,0xFF17}, - {0xFF18,0xFF18,0xFF18}, {0xFF19,0xFF19,0xFF19}, - {0xFF1A,0xFF1A,0xFF1A}, {0xFF1B,0xFF1B,0xFF1B}, - {0xFF1C,0xFF1C,0xFF1C}, {0xFF1D,0xFF1D,0xFF1D}, - {0xFF1E,0xFF1E,0xFF1E}, {0xFF1F,0xFF1F,0xFF1F}, - {0xFF20,0xFF20,0xFF20}, {0xFF21,0xFF41,0xFF21}, - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, - {0xFF3A,0xFF5A,0xFF3A}, {0xFF3B,0xFF3B,0xFF3B}, - {0xFF3C,0xFF3C,0xFF3C}, {0xFF3D,0xFF3D,0xFF3D}, - {0xFF3E,0xFF3E,0xFF3E}, {0xFF3F,0xFF3F,0xFF3F}, - {0xFF40,0xFF40,0xFF40}, {0xFF21,0xFF41,0xFF21}, - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, - {0xFF3A,0xFF5A,0xFF3A}, {0xFF5B,0xFF5B,0xFF5B}, - {0xFF5C,0xFF5C,0xFF5C}, {0xFF5D,0xFF5D,0xFF5D}, - {0xFF5E,0xFF5E,0xFF5E}, {0xFF5F,0xFF5F,0xFF5F}, - {0xFF60,0xFF60,0xFF60}, {0xFF61,0xFF61,0xFF61}, - {0xFF62,0xFF62,0xFF62}, {0xFF63,0xFF63,0xFF63}, - {0xFF64,0xFF64,0xFF64}, {0xFF65,0xFF65,0xFF65}, - {0xFF66,0xFF66,0xFF66}, {0xFF67,0xFF67,0xFF67}, - {0xFF68,0xFF68,0xFF68}, {0xFF69,0xFF69,0xFF69}, - {0xFF6A,0xFF6A,0xFF6A}, {0xFF6B,0xFF6B,0xFF6B}, - {0xFF6C,0xFF6C,0xFF6C}, {0xFF6D,0xFF6D,0xFF6D}, - {0xFF6E,0xFF6E,0xFF6E}, {0xFF6F,0xFF6F,0xFF6F}, - {0xFF70,0xFF70,0xFF70}, {0xFF71,0xFF71,0xFF71}, - {0xFF72,0xFF72,0xFF72}, {0xFF73,0xFF73,0xFF73}, - {0xFF74,0xFF74,0xFF74}, {0xFF75,0xFF75,0xFF75}, - {0xFF76,0xFF76,0xFF76}, {0xFF77,0xFF77,0xFF77}, - {0xFF78,0xFF78,0xFF78}, {0xFF79,0xFF79,0xFF79}, - {0xFF7A,0xFF7A,0xFF7A}, {0xFF7B,0xFF7B,0xFF7B}, - {0xFF7C,0xFF7C,0xFF7C}, {0xFF7D,0xFF7D,0xFF7D}, - {0xFF7E,0xFF7E,0xFF7E}, {0xFF7F,0xFF7F,0xFF7F}, - {0xFF80,0xFF80,0xFF80}, {0xFF81,0xFF81,0xFF81}, - {0xFF82,0xFF82,0xFF82}, {0xFF83,0xFF83,0xFF83}, - {0xFF84,0xFF84,0xFF84}, {0xFF85,0xFF85,0xFF85}, - {0xFF86,0xFF86,0xFF86}, {0xFF87,0xFF87,0xFF87}, - {0xFF88,0xFF88,0xFF88}, {0xFF89,0xFF89,0xFF89}, - {0xFF8A,0xFF8A,0xFF8A}, {0xFF8B,0xFF8B,0xFF8B}, - {0xFF8C,0xFF8C,0xFF8C}, {0xFF8D,0xFF8D,0xFF8D}, - {0xFF8E,0xFF8E,0xFF8E}, {0xFF8F,0xFF8F,0xFF8F}, - {0xFF90,0xFF90,0xFF90}, {0xFF91,0xFF91,0xFF91}, - {0xFF92,0xFF92,0xFF92}, {0xFF93,0xFF93,0xFF93}, - {0xFF94,0xFF94,0xFF94}, {0xFF95,0xFF95,0xFF95}, - {0xFF96,0xFF96,0xFF96}, {0xFF97,0xFF97,0xFF97}, - {0xFF98,0xFF98,0xFF98}, {0xFF99,0xFF99,0xFF99}, - {0xFF9A,0xFF9A,0xFF9A}, {0xFF9B,0xFF9B,0xFF9B}, - {0xFF9C,0xFF9C,0xFF9C}, {0xFF9D,0xFF9D,0xFF9D}, - {0xFF9E,0xFF9E,0xFF9E}, {0xFF9F,0xFF9F,0xFF9F}, - {0xFFA0,0xFFA0,0xFFA0}, {0xFFA1,0xFFA1,0xFFA1}, - {0xFFA2,0xFFA2,0xFFA2}, {0xFFA3,0xFFA3,0xFFA3}, - {0xFFA4,0xFFA4,0xFFA4}, {0xFFA5,0xFFA5,0xFFA5}, - {0xFFA6,0xFFA6,0xFFA6}, {0xFFA7,0xFFA7,0xFFA7}, - {0xFFA8,0xFFA8,0xFFA8}, {0xFFA9,0xFFA9,0xFFA9}, - {0xFFAA,0xFFAA,0xFFAA}, {0xFFAB,0xFFAB,0xFFAB}, - {0xFFAC,0xFFAC,0xFFAC}, {0xFFAD,0xFFAD,0xFFAD}, - {0xFFAE,0xFFAE,0xFFAE}, {0xFFAF,0xFFAF,0xFFAF}, - {0xFFB0,0xFFB0,0xFFB0}, {0xFFB1,0xFFB1,0xFFB1}, - {0xFFB2,0xFFB2,0xFFB2}, {0xFFB3,0xFFB3,0xFFB3}, - {0xFFB4,0xFFB4,0xFFB4}, {0xFFB5,0xFFB5,0xFFB5}, - {0xFFB6,0xFFB6,0xFFB6}, {0xFFB7,0xFFB7,0xFFB7}, - {0xFFB8,0xFFB8,0xFFB8}, {0xFFB9,0xFFB9,0xFFB9}, - {0xFFBA,0xFFBA,0xFFBA}, {0xFFBB,0xFFBB,0xFFBB}, - {0xFFBC,0xFFBC,0xFFBC}, {0xFFBD,0xFFBD,0xFFBD}, - {0xFFBE,0xFFBE,0xFFBE}, {0xFFBF,0xFFBF,0xFFBF}, - {0xFFC0,0xFFC0,0xFFC0}, {0xFFC1,0xFFC1,0xFFC1}, - {0xFFC2,0xFFC2,0xFFC2}, {0xFFC3,0xFFC3,0xFFC3}, - {0xFFC4,0xFFC4,0xFFC4}, {0xFFC5,0xFFC5,0xFFC5}, - {0xFFC6,0xFFC6,0xFFC6}, {0xFFC7,0xFFC7,0xFFC7}, - {0xFFC8,0xFFC8,0xFFC8}, {0xFFC9,0xFFC9,0xFFC9}, - {0xFFCA,0xFFCA,0xFFCA}, {0xFFCB,0xFFCB,0xFFCB}, - {0xFFCC,0xFFCC,0xFFCC}, {0xFFCD,0xFFCD,0xFFCD}, - {0xFFCE,0xFFCE,0xFFCE}, {0xFFCF,0xFFCF,0xFFCF}, - {0xFFD0,0xFFD0,0xFFD0}, {0xFFD1,0xFFD1,0xFFD1}, - {0xFFD2,0xFFD2,0xFFD2}, {0xFFD3,0xFFD3,0xFFD3}, - {0xFFD4,0xFFD4,0xFFD4}, {0xFFD5,0xFFD5,0xFFD5}, - {0xFFD6,0xFFD6,0xFFD6}, {0xFFD7,0xFFD7,0xFFD7}, - {0xFFD8,0xFFD8,0xFFD8}, {0xFFD9,0xFFD9,0xFFD9}, - {0xFFDA,0xFFDA,0xFFDA}, {0xFFDB,0xFFDB,0xFFDB}, - {0xFFDC,0xFFDC,0xFFDC}, {0xFFDD,0xFFDD,0xFFDD}, - {0xFFDE,0xFFDE,0xFFDE}, {0xFFDF,0xFFDF,0xFFDF}, - {0xFFE0,0xFFE0,0xFFE0}, {0xFFE1,0xFFE1,0xFFE1}, - {0xFFE2,0xFFE2,0xFFE2}, {0xFFE3,0xFFE3,0xFFE3}, - {0xFFE4,0xFFE4,0xFFE4}, {0xFFE5,0xFFE5,0xFFE5}, - {0xFFE6,0xFFE6,0xFFE6}, {0xFFE7,0xFFE7,0xFFE7}, - {0xFFE8,0xFFE8,0xFFE8}, {0xFFE9,0xFFE9,0xFFE9}, - {0xFFEA,0xFFEA,0xFFEA}, {0xFFEB,0xFFEB,0xFFEB}, - {0xFFEC,0xFFEC,0xFFEC}, {0xFFED,0xFFED,0xFFED}, - {0xFFEE,0xFFEE,0xFFEE}, {0xFFEF,0xFFEF,0xFFEF}, - {0xFFF0,0xFFF0,0xFFF0}, {0xFFF1,0xFFF1,0xFFF1}, - {0xFFF2,0xFFF2,0xFFF2}, {0xFFF3,0xFFF3,0xFFF3}, - {0xFFF4,0xFFF4,0xFFF4}, {0xFFF5,0xFFF5,0xFFF5}, - {0xFFF6,0xFFF6,0xFFF6}, {0xFFF7,0xFFF7,0xFFF7}, - {0xFFF8,0xFFF8,0xFFF8}, {0xFFF9,0xFFF9,0xFFF9}, - {0xFFFA,0xFFFA,0xFFFA}, {0xFFFB,0xFFFB,0xFFFB}, - {0xFFFC,0xFFFC,0xFFFC}, {0xFFFD,0xFFFD,0xFFFD}, - {0xFFFE,0xFFFE,0xFFFE}, {0xFFFF,0xFFFF,0xFFFF} -}; - - -MY_UNICASE_CHARACTER *my_unicase_default_pages[256]= -{ - my_unicase_default_page00, - plane01, plane02, plane03, plane04, plane05, plane06, plane07, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, - NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF -}; - - -MY_UNICASE_INFO my_unicase_default= -{ - MY_UNICASE_INFO_DEFAULT_MAXCHAR, - my_unicase_default_pages -}; - - -/* - Reproduce old utf8mb3_general_ci behaviour before we fixed Bug#27877. -*/ -MY_UNICASE_CHARACTER *my_unicase_mysql500_pages[256]={ - my_unicase_mysql500_page00, - plane01, plane02, plane03, plane04, plane05, plane06, plane07, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, - NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF - -}; - - -MY_UNICASE_INFO my_unicase_mysql500= -{ - 0xFFFF, - my_unicase_mysql500_pages -}; - - -/* - Turkish lower/upper mapping: - 1. LOWER(0x0049 LATIN CAPITAL LETTER I) -> - 0x0131 LATIN SMALL LETTER DOTLESS I - 2. UPPER(0x0069 LATIN SMALL LETTER I) -> - 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE -*/ - -static MY_UNICASE_CHARACTER turk00[]= -{ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0131,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0130,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x00DF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} -}; - - - -static MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]= -{ - turk00, plane01, plane02, plane03, plane04, plane05, plane06, plane07, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, - NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF -}; - - -MY_UNICASE_INFO my_unicase_turkish= -{ - 0xFFFF, - my_unicase_pages_turkish -}; - - -/* Unicode-5.2.0 case folding information */ -static MY_UNICASE_CHARACTER u520p00[]={ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, /* 0000 */ - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, /* 0002 */ - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, /* 0004 */ - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, /* 0006 */ - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, /* 0008 */ - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, /* 000A */ - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, /* 000C */ - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, /* 000E */ - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, /* 0010 */ - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, /* 0012 */ - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, /* 0014 */ - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, /* 0016 */ - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, /* 0018 */ - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, /* 001A */ - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, /* 001C */ - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, /* 001E */ - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, /* 0020 */ - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, /* 0022 */ - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, /* 0024 */ - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, /* 0026 */ - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, /* 0028 */ - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, /* 002A */ - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, /* 002C */ - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, /* 002E */ - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, /* 0030 */ - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, /* 0032 */ - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, /* 0034 */ - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, /* 0036 */ - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, /* 0038 */ - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, /* 003A */ - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, /* 003C */ - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, /* 003E */ - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, /* 0040 */ - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, /* 0042 */ - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, /* 0044 */ - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, /* 0046 */ - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, /* 0048 */ - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, /* 004A */ - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, /* 004C */ - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, /* 004E */ - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, /* 0050 */ - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, /* 0052 */ - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, /* 0054 */ - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, /* 0056 */ - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, /* 0058 */ - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, /* 005A */ - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, /* 005C */ - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, /* 005E */ - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, /* 0060 */ - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, /* 0062 */ - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, /* 0064 */ - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, /* 0066 */ - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, /* 0068 */ - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, /* 006A */ - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, /* 006C */ - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, /* 006E */ - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, /* 0070 */ - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, /* 0072 */ - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, /* 0074 */ - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, /* 0076 */ - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, /* 0078 */ - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, /* 007A */ - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, /* 007C */ - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, /* 007E */ - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, /* 0080 */ - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, /* 0082 */ - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, /* 0084 */ - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, /* 0086 */ - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, /* 0088 */ - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, /* 008A */ - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, /* 008C */ - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, /* 008E */ - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, /* 0090 */ - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, /* 0092 */ - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, /* 0094 */ - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, /* 0096 */ - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, /* 0098 */ - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, /* 009A */ - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, /* 009C */ - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, /* 009E */ - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, /* 00A0 */ - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, /* 00A2 */ - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, /* 00A4 */ - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, /* 00A6 */ - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, /* 00A8 */ - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, /* 00AA */ - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, /* 00AC */ - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, /* 00AE */ - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, /* 00B0 */ - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, /* 00B2 */ - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, /* 00B4 */ - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, /* 00B6 */ - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, /* 00B8 */ - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, /* 00BA */ - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, /* 00BC */ - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, /* 00BE */ - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, /* 00C0 */ - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, /* 00C2 */ - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, /* 00C4 */ - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, /* 00C6 */ - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, /* 00C8 */ - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, /* 00CA */ - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, /* 00CC */ - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, /* 00CE */ - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, /* 00D0 */ - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, /* 00D2 */ - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, /* 00D4 */ - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, /* 00D6 */ - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, /* 00D8 */ - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, /* 00DA */ - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, /* 00DC */ - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x0053}, /* 00DE */ - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, /* 00E0 */ - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, /* 00E2 */ - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, /* 00E4 */ - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, /* 00E6 */ - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, /* 00E8 */ - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, /* 00EA */ - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, /* 00EC */ - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, /* 00EE */ - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, /* 00F0 */ - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, /* 00F2 */ - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, /* 00F4 */ - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, /* 00F6 */ - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, /* 00F8 */ - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, /* 00FA */ - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, /* 00FC */ - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} /* 00FE */ -}; - -static MY_UNICASE_CHARACTER u520p01[]={ - {0x0100,0x0101,0x0041}, {0x0100,0x0101,0x0041}, /* 0100 */ - {0x0102,0x0103,0x0041}, {0x0102,0x0103,0x0041}, /* 0102 */ - {0x0104,0x0105,0x0041}, {0x0104,0x0105,0x0041}, /* 0104 */ - {0x0106,0x0107,0x0043}, {0x0106,0x0107,0x0043}, /* 0106 */ - {0x0108,0x0109,0x0043}, {0x0108,0x0109,0x0043}, /* 0108 */ - {0x010A,0x010B,0x0043}, {0x010A,0x010B,0x0043}, /* 010A */ - {0x010C,0x010D,0x0043}, {0x010C,0x010D,0x0043}, /* 010C */ - {0x010E,0x010F,0x0044}, {0x010E,0x010F,0x0044}, /* 010E */ - {0x0110,0x0111,0x0110}, {0x0110,0x0111,0x0110}, /* 0110 */ - {0x0112,0x0113,0x0045}, {0x0112,0x0113,0x0045}, /* 0112 */ - {0x0114,0x0115,0x0045}, {0x0114,0x0115,0x0045}, /* 0114 */ - {0x0116,0x0117,0x0045}, {0x0116,0x0117,0x0045}, /* 0116 */ - {0x0118,0x0119,0x0045}, {0x0118,0x0119,0x0045}, /* 0118 */ - {0x011A,0x011B,0x0045}, {0x011A,0x011B,0x0045}, /* 011A */ - {0x011C,0x011D,0x0047}, {0x011C,0x011D,0x0047}, /* 011C */ - {0x011E,0x011F,0x0047}, {0x011E,0x011F,0x0047}, /* 011E */ - {0x0120,0x0121,0x0047}, {0x0120,0x0121,0x0047}, /* 0120 */ - {0x0122,0x0123,0x0047}, {0x0122,0x0123,0x0047}, /* 0122 */ - {0x0124,0x0125,0x0048}, {0x0124,0x0125,0x0048}, /* 0124 */ - {0x0126,0x0127,0x0126}, {0x0126,0x0127,0x0126}, /* 0126 */ - {0x0128,0x0129,0x0049}, {0x0128,0x0129,0x0049}, /* 0128 */ - {0x012A,0x012B,0x0049}, {0x012A,0x012B,0x0049}, /* 012A */ - {0x012C,0x012D,0x0049}, {0x012C,0x012D,0x0049}, /* 012C */ - {0x012E,0x012F,0x0049}, {0x012E,0x012F,0x0049}, /* 012E */ - {0x0130,0x0069,0x0049}, {0x0049,0x0131,0x0049}, /* 0130 */ - {0x0132,0x0133,0x0132}, {0x0132,0x0133,0x0132}, /* 0132 */ - {0x0134,0x0135,0x004A}, {0x0134,0x0135,0x004A}, /* 0134 */ - {0x0136,0x0137,0x004B}, {0x0136,0x0137,0x004B}, /* 0136 */ - {0x0138,0x0138,0x0138}, {0x0139,0x013A,0x004C}, /* 0138 */ - {0x0139,0x013A,0x004C}, {0x013B,0x013C,0x004C}, /* 013A */ - {0x013B,0x013C,0x004C}, {0x013D,0x013E,0x004C}, /* 013C */ - {0x013D,0x013E,0x004C}, {0x013F,0x0140,0x013F}, /* 013E */ - {0x013F,0x0140,0x013F}, {0x0141,0x0142,0x0141}, /* 0140 */ - {0x0141,0x0142,0x0141}, {0x0143,0x0144,0x004E}, /* 0142 */ - {0x0143,0x0144,0x004E}, {0x0145,0x0146,0x004E}, /* 0144 */ - {0x0145,0x0146,0x004E}, {0x0147,0x0148,0x004E}, /* 0146 */ - {0x0147,0x0148,0x004E}, {0x0149,0x0149,0x0149}, /* 0148 */ - {0x014A,0x014B,0x014A}, {0x014A,0x014B,0x014A}, /* 014A */ - {0x014C,0x014D,0x004F}, {0x014C,0x014D,0x004F}, /* 014C */ - {0x014E,0x014F,0x004F}, {0x014E,0x014F,0x004F}, /* 014E */ - {0x0150,0x0151,0x004F}, {0x0150,0x0151,0x004F}, /* 0150 */ - {0x0152,0x0153,0x0152}, {0x0152,0x0153,0x0152}, /* 0152 */ - {0x0154,0x0155,0x0052}, {0x0154,0x0155,0x0052}, /* 0154 */ - {0x0156,0x0157,0x0052}, {0x0156,0x0157,0x0052}, /* 0156 */ - {0x0158,0x0159,0x0052}, {0x0158,0x0159,0x0052}, /* 0158 */ - {0x015A,0x015B,0x0053}, {0x015A,0x015B,0x0053}, /* 015A */ - {0x015C,0x015D,0x0053}, {0x015C,0x015D,0x0053}, /* 015C */ - {0x015E,0x015F,0x0053}, {0x015E,0x015F,0x0053}, /* 015E */ - {0x0160,0x0161,0x0053}, {0x0160,0x0161,0x0053}, /* 0160 */ - {0x0162,0x0163,0x0054}, {0x0162,0x0163,0x0054}, /* 0162 */ - {0x0164,0x0165,0x0054}, {0x0164,0x0165,0x0054}, /* 0164 */ - {0x0166,0x0167,0x0166}, {0x0166,0x0167,0x0166}, /* 0166 */ - {0x0168,0x0169,0x0055}, {0x0168,0x0169,0x0055}, /* 0168 */ - {0x016A,0x016B,0x0055}, {0x016A,0x016B,0x0055}, /* 016A */ - {0x016C,0x016D,0x0055}, {0x016C,0x016D,0x0055}, /* 016C */ - {0x016E,0x016F,0x0055}, {0x016E,0x016F,0x0055}, /* 016E */ - {0x0170,0x0171,0x0055}, {0x0170,0x0171,0x0055}, /* 0170 */ - {0x0172,0x0173,0x0055}, {0x0172,0x0173,0x0055}, /* 0172 */ - {0x0174,0x0175,0x0057}, {0x0174,0x0175,0x0057}, /* 0174 */ - {0x0176,0x0177,0x0059}, {0x0176,0x0177,0x0059}, /* 0176 */ - {0x0178,0x00FF,0x0059}, {0x0179,0x017A,0x005A}, /* 0178 */ - {0x0179,0x017A,0x005A}, {0x017B,0x017C,0x005A}, /* 017A */ - {0x017B,0x017C,0x005A}, {0x017D,0x017E,0x005A}, /* 017C */ - {0x017D,0x017E,0x005A}, {0x0053,0x017F,0x0053}, /* 017E */ - {0x0243,0x0180,0x0243}, {0x0181,0x0253,0x0181}, /* 0180 */ - {0x0182,0x0183,0x0182}, {0x0182,0x0183,0x0182}, /* 0182 */ - {0x0184,0x0185,0x0184}, {0x0184,0x0185,0x0184}, /* 0184 */ - {0x0186,0x0254,0x0186}, {0x0187,0x0188,0x0187}, /* 0186 */ - {0x0187,0x0188,0x0187}, {0x0189,0x0256,0x0189}, /* 0188 */ - {0x018A,0x0257,0x018A}, {0x018B,0x018C,0x018B}, /* 018A */ - {0x018B,0x018C,0x018B}, {0x018D,0x018D,0x018D}, /* 018C */ - {0x018E,0x01DD,0x018E}, {0x018F,0x0259,0x018F}, /* 018E */ - {0x0190,0x025B,0x0190}, {0x0191,0x0192,0x0191}, /* 0190 */ - {0x0191,0x0192,0x0191}, {0x0193,0x0260,0x0193}, /* 0192 */ - {0x0194,0x0263,0x0194}, {0x01F6,0x0195,0x01F6}, /* 0194 */ - {0x0196,0x0269,0x0196}, {0x0197,0x0268,0x0197}, /* 0196 */ - {0x0198,0x0199,0x0198}, {0x0198,0x0199,0x0198}, /* 0198 */ - {0x023D,0x019A,0x023D}, {0x019B,0x019B,0x019B}, /* 019A */ - {0x019C,0x026F,0x019C}, {0x019D,0x0272,0x019D}, /* 019C */ - {0x0220,0x019E,0x0220}, {0x019F,0x0275,0x019F}, /* 019E */ - {0x01A0,0x01A1,0x004F}, {0x01A0,0x01A1,0x004F}, /* 01A0 */ - {0x01A2,0x01A3,0x01A2}, {0x01A2,0x01A3,0x01A2}, /* 01A2 */ - {0x01A4,0x01A5,0x01A4}, {0x01A4,0x01A5,0x01A4}, /* 01A4 */ - {0x01A6,0x0280,0x01A6}, {0x01A7,0x01A8,0x01A7}, /* 01A6 */ - {0x01A7,0x01A8,0x01A7}, {0x01A9,0x0283,0x01A9}, /* 01A8 */ - {0x01AA,0x01AA,0x01AA}, {0x01AB,0x01AB,0x01AB}, /* 01AA */ - {0x01AC,0x01AD,0x01AC}, {0x01AC,0x01AD,0x01AC}, /* 01AC */ - {0x01AE,0x0288,0x01AE}, {0x01AF,0x01B0,0x0055}, /* 01AE */ - {0x01AF,0x01B0,0x0055}, {0x01B1,0x028A,0x01B1}, /* 01B0 */ - {0x01B2,0x028B,0x01B2}, {0x01B3,0x01B4,0x01B3}, /* 01B2 */ - {0x01B3,0x01B4,0x01B3}, {0x01B5,0x01B6,0x01B5}, /* 01B4 */ - {0x01B5,0x01B6,0x01B5}, {0x01B7,0x0292,0x01B7}, /* 01B6 */ - {0x01B8,0x01B9,0x01B8}, {0x01B8,0x01B9,0x01B8}, /* 01B8 */ - {0x01BA,0x01BA,0x01BA}, {0x01BB,0x01BB,0x01BB}, /* 01BA */ - {0x01BC,0x01BD,0x01BC}, {0x01BC,0x01BD,0x01BC}, /* 01BC */ - {0x01BE,0x01BE,0x01BE}, {0x01F7,0x01BF,0x01F7}, /* 01BE */ - {0x01C0,0x01C0,0x01C0}, {0x01C1,0x01C1,0x01C1}, /* 01C0 */ - {0x01C2,0x01C2,0x01C2}, {0x01C3,0x01C3,0x01C3}, /* 01C2 */ - {0x01C4,0x01C6,0x01C4}, {0x01C4,0x01C6,0x01C4}, /* 01C4 */ - {0x01C4,0x01C6,0x01C4}, {0x01C7,0x01C9,0x01C7}, /* 01C6 */ - {0x01C7,0x01C9,0x01C7}, {0x01C7,0x01C9,0x01C7}, /* 01C8 */ - {0x01CA,0x01CC,0x01CA}, {0x01CA,0x01CC,0x01CA}, /* 01CA */ - {0x01CA,0x01CC,0x01CA}, {0x01CD,0x01CE,0x0041}, /* 01CC */ - {0x01CD,0x01CE,0x0041}, {0x01CF,0x01D0,0x0049}, /* 01CE */ - {0x01CF,0x01D0,0x0049}, {0x01D1,0x01D2,0x004F}, /* 01D0 */ - {0x01D1,0x01D2,0x004F}, {0x01D3,0x01D4,0x0055}, /* 01D2 */ - {0x01D3,0x01D4,0x0055}, {0x01D5,0x01D6,0x0055}, /* 01D4 */ - {0x01D5,0x01D6,0x0055}, {0x01D7,0x01D8,0x0055}, /* 01D6 */ - {0x01D7,0x01D8,0x0055}, {0x01D9,0x01DA,0x0055}, /* 01D8 */ - {0x01D9,0x01DA,0x0055}, {0x01DB,0x01DC,0x0055}, /* 01DA */ - {0x01DB,0x01DC,0x0055}, {0x018E,0x01DD,0x018E}, /* 01DC */ - {0x01DE,0x01DF,0x0041}, {0x01DE,0x01DF,0x0041}, /* 01DE */ - {0x01E0,0x01E1,0x0041}, {0x01E0,0x01E1,0x0041}, /* 01E0 */ - {0x01E2,0x01E3,0x00C6}, {0x01E2,0x01E3,0x00C6}, /* 01E2 */ - {0x01E4,0x01E5,0x01E4}, {0x01E4,0x01E5,0x01E4}, /* 01E4 */ - {0x01E6,0x01E7,0x0047}, {0x01E6,0x01E7,0x0047}, /* 01E6 */ - {0x01E8,0x01E9,0x004B}, {0x01E8,0x01E9,0x004B}, /* 01E8 */ - {0x01EA,0x01EB,0x004F}, {0x01EA,0x01EB,0x004F}, /* 01EA */ - {0x01EC,0x01ED,0x004F}, {0x01EC,0x01ED,0x004F}, /* 01EC */ - {0x01EE,0x01EF,0x01B7}, {0x01EE,0x01EF,0x01B7}, /* 01EE */ - {0x01F0,0x01F0,0x004A}, {0x01F1,0x01F3,0x01F1}, /* 01F0 */ - {0x01F1,0x01F3,0x01F1}, {0x01F1,0x01F3,0x01F1}, /* 01F2 */ - {0x01F4,0x01F5,0x0047}, {0x01F4,0x01F5,0x0047}, /* 01F4 */ - {0x01F6,0x0195,0x01F6}, {0x01F7,0x01BF,0x01F7}, /* 01F6 */ - {0x01F8,0x01F9,0x004E}, {0x01F8,0x01F9,0x004E}, /* 01F8 */ - {0x01FA,0x01FB,0x0041}, {0x01FA,0x01FB,0x0041}, /* 01FA */ - {0x01FC,0x01FD,0x00C6}, {0x01FC,0x01FD,0x00C6}, /* 01FC */ - {0x01FE,0x01FF,0x00D8}, {0x01FE,0x01FF,0x00D8} /* 01FE */ -}; - -static MY_UNICASE_CHARACTER u520p02[]={ - {0x0200,0x0201,0x0041}, {0x0200,0x0201,0x0041}, /* 0200 */ - {0x0202,0x0203,0x0041}, {0x0202,0x0203,0x0041}, /* 0202 */ - {0x0204,0x0205,0x0045}, {0x0204,0x0205,0x0045}, /* 0204 */ - {0x0206,0x0207,0x0045}, {0x0206,0x0207,0x0045}, /* 0206 */ - {0x0208,0x0209,0x0049}, {0x0208,0x0209,0x0049}, /* 0208 */ - {0x020A,0x020B,0x0049}, {0x020A,0x020B,0x0049}, /* 020A */ - {0x020C,0x020D,0x004F}, {0x020C,0x020D,0x004F}, /* 020C */ - {0x020E,0x020F,0x004F}, {0x020E,0x020F,0x004F}, /* 020E */ - {0x0210,0x0211,0x0052}, {0x0210,0x0211,0x0052}, /* 0210 */ - {0x0212,0x0213,0x0052}, {0x0212,0x0213,0x0052}, /* 0212 */ - {0x0214,0x0215,0x0055}, {0x0214,0x0215,0x0055}, /* 0214 */ - {0x0216,0x0217,0x0055}, {0x0216,0x0217,0x0055}, /* 0216 */ - {0x0218,0x0219,0x0053}, {0x0218,0x0219,0x0053}, /* 0218 */ - {0x021A,0x021B,0x0054}, {0x021A,0x021B,0x0054}, /* 021A */ - {0x021C,0x021D,0x021C}, {0x021C,0x021D,0x021C}, /* 021C */ - {0x021E,0x021F,0x0048}, {0x021E,0x021F,0x0048}, /* 021E */ - {0x0220,0x019E,0x0220}, {0x0221,0x0221,0x0221}, /* 0220 */ - {0x0222,0x0223,0x0222}, {0x0222,0x0223,0x0222}, /* 0222 */ - {0x0224,0x0225,0x0224}, {0x0224,0x0225,0x0224}, /* 0224 */ - {0x0226,0x0227,0x0041}, {0x0226,0x0227,0x0041}, /* 0226 */ - {0x0228,0x0229,0x0045}, {0x0228,0x0229,0x0045}, /* 0228 */ - {0x022A,0x022B,0x004F}, {0x022A,0x022B,0x004F}, /* 022A */ - {0x022C,0x022D,0x004F}, {0x022C,0x022D,0x004F}, /* 022C */ - {0x022E,0x022F,0x004F}, {0x022E,0x022F,0x004F}, /* 022E */ - {0x0230,0x0231,0x004F}, {0x0230,0x0231,0x004F}, /* 0230 */ - {0x0232,0x0233,0x0059}, {0x0232,0x0233,0x0059}, /* 0232 */ - {0x0234,0x0234,0x0234}, {0x0235,0x0235,0x0235}, /* 0234 */ - {0x0236,0x0236,0x0236}, {0x0237,0x0237,0x0237}, /* 0236 */ - {0x0238,0x0238,0x0238}, {0x0239,0x0239,0x0239}, /* 0238 */ - {0x023A,0x2C65,0x023A}, {0x023B,0x023C,0x023B}, /* 023A */ - {0x023B,0x023C,0x023B}, {0x023D,0x019A,0x023D}, /* 023C */ - {0x023E,0x2C66,0x023E}, {0x2C7E,0x023F,0x2C7E}, /* 023E */ - {0x2C7F,0x0240,0x2C7F}, {0x0241,0x0242,0x0241}, /* 0240 */ - {0x0241,0x0242,0x0241}, {0x0243,0x0180,0x0243}, /* 0242 */ - {0x0244,0x0289,0x0244}, {0x0245,0x028C,0x0245}, /* 0244 */ - {0x0246,0x0247,0x0246}, {0x0246,0x0247,0x0246}, /* 0246 */ - {0x0248,0x0249,0x0248}, {0x0248,0x0249,0x0248}, /* 0248 */ - {0x024A,0x024B,0x024A}, {0x024A,0x024B,0x024A}, /* 024A */ - {0x024C,0x024D,0x024C}, {0x024C,0x024D,0x024C}, /* 024C */ - {0x024E,0x024F,0x024E}, {0x024E,0x024F,0x024E}, /* 024E */ - {0x2C6F,0x0250,0x2C6F}, {0x2C6D,0x0251,0x2C6D}, /* 0250 */ - {0x2C70,0x0252,0x2C70}, {0x0181,0x0253,0x0181}, /* 0252 */ - {0x0186,0x0254,0x0186}, {0x0255,0x0255,0x0255}, /* 0254 */ - {0x0189,0x0256,0x0189}, {0x018A,0x0257,0x018A}, /* 0256 */ - {0x0258,0x0258,0x0258}, {0x018F,0x0259,0x018F}, /* 0258 */ - {0x025A,0x025A,0x025A}, {0x0190,0x025B,0x0190}, /* 025A */ - {0x025C,0x025C,0x025C}, {0x025D,0x025D,0x025D}, /* 025C */ - {0x025E,0x025E,0x025E}, {0x025F,0x025F,0x025F}, /* 025E */ - {0x0193,0x0260,0x0193}, {0x0261,0x0261,0x0261}, /* 0260 */ - {0x0262,0x0262,0x0262}, {0x0194,0x0263,0x0194}, /* 0262 */ - {0x0264,0x0264,0x0264}, {0x0265,0x0265,0x0265}, /* 0264 */ - {0x0266,0x0266,0x0266}, {0x0267,0x0267,0x0267}, /* 0266 */ - {0x0197,0x0268,0x0197}, {0x0196,0x0269,0x0196}, /* 0268 */ - {0x026A,0x026A,0x026A}, {0x2C62,0x026B,0x2C62}, /* 026A */ - {0x026C,0x026C,0x026C}, {0x026D,0x026D,0x026D}, /* 026C */ - {0x026E,0x026E,0x026E}, {0x019C,0x026F,0x019C}, /* 026E */ - {0x0270,0x0270,0x0270}, {0x2C6E,0x0271,0x2C6E}, /* 0270 */ - {0x019D,0x0272,0x019D}, {0x0273,0x0273,0x0273}, /* 0272 */ - {0x0274,0x0274,0x0274}, {0x019F,0x0275,0x019F}, /* 0274 */ - {0x0276,0x0276,0x0276}, {0x0277,0x0277,0x0277}, /* 0276 */ - {0x0278,0x0278,0x0278}, {0x0279,0x0279,0x0279}, /* 0278 */ - {0x027A,0x027A,0x027A}, {0x027B,0x027B,0x027B}, /* 027A */ - {0x027C,0x027C,0x027C}, {0x2C64,0x027D,0x2C64}, /* 027C */ - {0x027E,0x027E,0x027E}, {0x027F,0x027F,0x027F}, /* 027E */ - {0x01A6,0x0280,0x01A6}, {0x0281,0x0281,0x0281}, /* 0280 */ - {0x0282,0x0282,0x0282}, {0x01A9,0x0283,0x01A9}, /* 0282 */ - {0x0284,0x0284,0x0284}, {0x0285,0x0285,0x0285}, /* 0284 */ - {0x0286,0x0286,0x0286}, {0x0287,0x0287,0x0287}, /* 0286 */ - {0x01AE,0x0288,0x01AE}, {0x0244,0x0289,0x0244}, /* 0288 */ - {0x01B1,0x028A,0x01B1}, {0x01B2,0x028B,0x01B2}, /* 028A */ - {0x0245,0x028C,0x0245}, {0x028D,0x028D,0x028D}, /* 028C */ - {0x028E,0x028E,0x028E}, {0x028F,0x028F,0x028F}, /* 028E */ - {0x0290,0x0290,0x0290}, {0x0291,0x0291,0x0291}, /* 0290 */ - {0x01B7,0x0292,0x01B7}, {0x0293,0x0293,0x0293}, /* 0292 */ - {0x0294,0x0294,0x0294}, {0x0295,0x0295,0x0295}, /* 0294 */ - {0x0296,0x0296,0x0296}, {0x0297,0x0297,0x0297}, /* 0296 */ - {0x0298,0x0298,0x0298}, {0x0299,0x0299,0x0299}, /* 0298 */ - {0x029A,0x029A,0x029A}, {0x029B,0x029B,0x029B}, /* 029A */ - {0x029C,0x029C,0x029C}, {0x029D,0x029D,0x029D}, /* 029C */ - {0x029E,0x029E,0x029E}, {0x029F,0x029F,0x029F}, /* 029E */ - {0x02A0,0x02A0,0x02A0}, {0x02A1,0x02A1,0x02A1}, /* 02A0 */ - {0x02A2,0x02A2,0x02A2}, {0x02A3,0x02A3,0x02A3}, /* 02A2 */ - {0x02A4,0x02A4,0x02A4}, {0x02A5,0x02A5,0x02A5}, /* 02A4 */ - {0x02A6,0x02A6,0x02A6}, {0x02A7,0x02A7,0x02A7}, /* 02A6 */ - {0x02A8,0x02A8,0x02A8}, {0x02A9,0x02A9,0x02A9}, /* 02A8 */ - {0x02AA,0x02AA,0x02AA}, {0x02AB,0x02AB,0x02AB}, /* 02AA */ - {0x02AC,0x02AC,0x02AC}, {0x02AD,0x02AD,0x02AD}, /* 02AC */ - {0x02AE,0x02AE,0x02AE}, {0x02AF,0x02AF,0x02AF}, /* 02AE */ - {0x02B0,0x02B0,0x02B0}, {0x02B1,0x02B1,0x02B1}, /* 02B0 */ - {0x02B2,0x02B2,0x02B2}, {0x02B3,0x02B3,0x02B3}, /* 02B2 */ - {0x02B4,0x02B4,0x02B4}, {0x02B5,0x02B5,0x02B5}, /* 02B4 */ - {0x02B6,0x02B6,0x02B6}, {0x02B7,0x02B7,0x02B7}, /* 02B6 */ - {0x02B8,0x02B8,0x02B8}, {0x02B9,0x02B9,0x02B9}, /* 02B8 */ - {0x02BA,0x02BA,0x02BA}, {0x02BB,0x02BB,0x02BB}, /* 02BA */ - {0x02BC,0x02BC,0x02BC}, {0x02BD,0x02BD,0x02BD}, /* 02BC */ - {0x02BE,0x02BE,0x02BE}, {0x02BF,0x02BF,0x02BF}, /* 02BE */ - {0x02C0,0x02C0,0x02C0}, {0x02C1,0x02C1,0x02C1}, /* 02C0 */ - {0x02C2,0x02C2,0x02C2}, {0x02C3,0x02C3,0x02C3}, /* 02C2 */ - {0x02C4,0x02C4,0x02C4}, {0x02C5,0x02C5,0x02C5}, /* 02C4 */ - {0x02C6,0x02C6,0x02C6}, {0x02C7,0x02C7,0x02C7}, /* 02C6 */ - {0x02C8,0x02C8,0x02C8}, {0x02C9,0x02C9,0x02C9}, /* 02C8 */ - {0x02CA,0x02CA,0x02CA}, {0x02CB,0x02CB,0x02CB}, /* 02CA */ - {0x02CC,0x02CC,0x02CC}, {0x02CD,0x02CD,0x02CD}, /* 02CC */ - {0x02CE,0x02CE,0x02CE}, {0x02CF,0x02CF,0x02CF}, /* 02CE */ - {0x02D0,0x02D0,0x02D0}, {0x02D1,0x02D1,0x02D1}, /* 02D0 */ - {0x02D2,0x02D2,0x02D2}, {0x02D3,0x02D3,0x02D3}, /* 02D2 */ - {0x02D4,0x02D4,0x02D4}, {0x02D5,0x02D5,0x02D5}, /* 02D4 */ - {0x02D6,0x02D6,0x02D6}, {0x02D7,0x02D7,0x02D7}, /* 02D6 */ - {0x02D8,0x02D8,0x02D8}, {0x02D9,0x02D9,0x02D9}, /* 02D8 */ - {0x02DA,0x02DA,0x02DA}, {0x02DB,0x02DB,0x02DB}, /* 02DA */ - {0x02DC,0x02DC,0x02DC}, {0x02DD,0x02DD,0x02DD}, /* 02DC */ - {0x02DE,0x02DE,0x02DE}, {0x02DF,0x02DF,0x02DF}, /* 02DE */ - {0x02E0,0x02E0,0x02E0}, {0x02E1,0x02E1,0x02E1}, /* 02E0 */ - {0x02E2,0x02E2,0x02E2}, {0x02E3,0x02E3,0x02E3}, /* 02E2 */ - {0x02E4,0x02E4,0x02E4}, {0x02E5,0x02E5,0x02E5}, /* 02E4 */ - {0x02E6,0x02E6,0x02E6}, {0x02E7,0x02E7,0x02E7}, /* 02E6 */ - {0x02E8,0x02E8,0x02E8}, {0x02E9,0x02E9,0x02E9}, /* 02E8 */ - {0x02EA,0x02EA,0x02EA}, {0x02EB,0x02EB,0x02EB}, /* 02EA */ - {0x02EC,0x02EC,0x02EC}, {0x02ED,0x02ED,0x02ED}, /* 02EC */ - {0x02EE,0x02EE,0x02EE}, {0x02EF,0x02EF,0x02EF}, /* 02EE */ - {0x02F0,0x02F0,0x02F0}, {0x02F1,0x02F1,0x02F1}, /* 02F0 */ - {0x02F2,0x02F2,0x02F2}, {0x02F3,0x02F3,0x02F3}, /* 02F2 */ - {0x02F4,0x02F4,0x02F4}, {0x02F5,0x02F5,0x02F5}, /* 02F4 */ - {0x02F6,0x02F6,0x02F6}, {0x02F7,0x02F7,0x02F7}, /* 02F6 */ - {0x02F8,0x02F8,0x02F8}, {0x02F9,0x02F9,0x02F9}, /* 02F8 */ - {0x02FA,0x02FA,0x02FA}, {0x02FB,0x02FB,0x02FB}, /* 02FA */ - {0x02FC,0x02FC,0x02FC}, {0x02FD,0x02FD,0x02FD}, /* 02FC */ - {0x02FE,0x02FE,0x02FE}, {0x02FF,0x02FF,0x02FF} /* 02FE */ -}; - -static MY_UNICASE_CHARACTER u520p03[]={ - {0x0300,0x0300,0x0300}, {0x0301,0x0301,0x0301}, /* 0300 */ - {0x0302,0x0302,0x0302}, {0x0303,0x0303,0x0303}, /* 0302 */ - {0x0304,0x0304,0x0304}, {0x0305,0x0305,0x0305}, /* 0304 */ - {0x0306,0x0306,0x0306}, {0x0307,0x0307,0x0307}, /* 0306 */ - {0x0308,0x0308,0x0308}, {0x0309,0x0309,0x0309}, /* 0308 */ - {0x030A,0x030A,0x030A}, {0x030B,0x030B,0x030B}, /* 030A */ - {0x030C,0x030C,0x030C}, {0x030D,0x030D,0x030D}, /* 030C */ - {0x030E,0x030E,0x030E}, {0x030F,0x030F,0x030F}, /* 030E */ - {0x0310,0x0310,0x0310}, {0x0311,0x0311,0x0311}, /* 0310 */ - {0x0312,0x0312,0x0312}, {0x0313,0x0313,0x0313}, /* 0312 */ - {0x0314,0x0314,0x0314}, {0x0315,0x0315,0x0315}, /* 0314 */ - {0x0316,0x0316,0x0316}, {0x0317,0x0317,0x0317}, /* 0316 */ - {0x0318,0x0318,0x0318}, {0x0319,0x0319,0x0319}, /* 0318 */ - {0x031A,0x031A,0x031A}, {0x031B,0x031B,0x031B}, /* 031A */ - {0x031C,0x031C,0x031C}, {0x031D,0x031D,0x031D}, /* 031C */ - {0x031E,0x031E,0x031E}, {0x031F,0x031F,0x031F}, /* 031E */ - {0x0320,0x0320,0x0320}, {0x0321,0x0321,0x0321}, /* 0320 */ - {0x0322,0x0322,0x0322}, {0x0323,0x0323,0x0323}, /* 0322 */ - {0x0324,0x0324,0x0324}, {0x0325,0x0325,0x0325}, /* 0324 */ - {0x0326,0x0326,0x0326}, {0x0327,0x0327,0x0327}, /* 0326 */ - {0x0328,0x0328,0x0328}, {0x0329,0x0329,0x0329}, /* 0328 */ - {0x032A,0x032A,0x032A}, {0x032B,0x032B,0x032B}, /* 032A */ - {0x032C,0x032C,0x032C}, {0x032D,0x032D,0x032D}, /* 032C */ - {0x032E,0x032E,0x032E}, {0x032F,0x032F,0x032F}, /* 032E */ - {0x0330,0x0330,0x0330}, {0x0331,0x0331,0x0331}, /* 0330 */ - {0x0332,0x0332,0x0332}, {0x0333,0x0333,0x0333}, /* 0332 */ - {0x0334,0x0334,0x0334}, {0x0335,0x0335,0x0335}, /* 0334 */ - {0x0336,0x0336,0x0336}, {0x0337,0x0337,0x0337}, /* 0336 */ - {0x0338,0x0338,0x0338}, {0x0339,0x0339,0x0339}, /* 0338 */ - {0x033A,0x033A,0x033A}, {0x033B,0x033B,0x033B}, /* 033A */ - {0x033C,0x033C,0x033C}, {0x033D,0x033D,0x033D}, /* 033C */ - {0x033E,0x033E,0x033E}, {0x033F,0x033F,0x033F}, /* 033E */ - {0x0340,0x0340,0x0340}, {0x0341,0x0341,0x0341}, /* 0340 */ - {0x0342,0x0342,0x0342}, {0x0343,0x0343,0x0343}, /* 0342 */ - {0x0344,0x0344,0x0344}, {0x0399,0x0345,0x0399}, /* 0344 */ - {0x0346,0x0346,0x0346}, {0x0347,0x0347,0x0347}, /* 0346 */ - {0x0348,0x0348,0x0348}, {0x0349,0x0349,0x0349}, /* 0348 */ - {0x034A,0x034A,0x034A}, {0x034B,0x034B,0x034B}, /* 034A */ - {0x034C,0x034C,0x034C}, {0x034D,0x034D,0x034D}, /* 034C */ - {0x034E,0x034E,0x034E}, {0x034F,0x034F,0x034F}, /* 034E */ - {0x0350,0x0350,0x0350}, {0x0351,0x0351,0x0351}, /* 0350 */ - {0x0352,0x0352,0x0352}, {0x0353,0x0353,0x0353}, /* 0352 */ - {0x0354,0x0354,0x0354}, {0x0355,0x0355,0x0355}, /* 0354 */ - {0x0356,0x0356,0x0356}, {0x0357,0x0357,0x0357}, /* 0356 */ - {0x0358,0x0358,0x0358}, {0x0359,0x0359,0x0359}, /* 0358 */ - {0x035A,0x035A,0x035A}, {0x035B,0x035B,0x035B}, /* 035A */ - {0x035C,0x035C,0x035C}, {0x035D,0x035D,0x035D}, /* 035C */ - {0x035E,0x035E,0x035E}, {0x035F,0x035F,0x035F}, /* 035E */ - {0x0360,0x0360,0x0360}, {0x0361,0x0361,0x0361}, /* 0360 */ - {0x0362,0x0362,0x0362}, {0x0363,0x0363,0x0363}, /* 0362 */ - {0x0364,0x0364,0x0364}, {0x0365,0x0365,0x0365}, /* 0364 */ - {0x0366,0x0366,0x0366}, {0x0367,0x0367,0x0367}, /* 0366 */ - {0x0368,0x0368,0x0368}, {0x0369,0x0369,0x0369}, /* 0368 */ - {0x036A,0x036A,0x036A}, {0x036B,0x036B,0x036B}, /* 036A */ - {0x036C,0x036C,0x036C}, {0x036D,0x036D,0x036D}, /* 036C */ - {0x036E,0x036E,0x036E}, {0x036F,0x036F,0x036F}, /* 036E */ - {0x0370,0x0371,0x0370}, {0x0370,0x0371,0x0370}, /* 0370 */ - {0x0372,0x0373,0x0372}, {0x0372,0x0373,0x0372}, /* 0372 */ - {0x0374,0x0374,0x0374}, {0x0375,0x0375,0x0375}, /* 0374 */ - {0x0376,0x0377,0x0376}, {0x0376,0x0377,0x0376}, /* 0376 */ - {0x0378,0x0378,0x0378}, {0x0379,0x0379,0x0379}, /* 0378 */ - {0x037A,0x037A,0x037A}, {0x03FD,0x037B,0x03FD}, /* 037A */ - {0x03FE,0x037C,0x03FE}, {0x03FF,0x037D,0x03FF}, /* 037C */ - {0x037E,0x037E,0x037E}, {0x037F,0x037F,0x037F}, /* 037E */ - {0x0380,0x0380,0x0380}, {0x0381,0x0381,0x0381}, /* 0380 */ - {0x0382,0x0382,0x0382}, {0x0383,0x0383,0x0383}, /* 0382 */ - {0x0384,0x0384,0x0384}, {0x0385,0x0385,0x0385}, /* 0384 */ - {0x0386,0x03AC,0x0391}, {0x0387,0x0387,0x0387}, /* 0386 */ - {0x0388,0x03AD,0x0395}, {0x0389,0x03AE,0x0397}, /* 0388 */ - {0x038A,0x03AF,0x0399}, {0x038B,0x038B,0x038B}, /* 038A */ - {0x038C,0x03CC,0x039F}, {0x038D,0x038D,0x038D}, /* 038C */ - {0x038E,0x03CD,0x03A5}, {0x038F,0x03CE,0x03A9}, /* 038E */ - {0x0390,0x0390,0x0399}, {0x0391,0x03B1,0x0391}, /* 0390 */ - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, /* 0392 */ - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, /* 0394 */ - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, /* 0396 */ - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, /* 0398 */ - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, /* 039A */ - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, /* 039C */ - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, /* 039E */ - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, /* 03A0 */ - {0x03A2,0x03A2,0x03A2}, {0x03A3,0x03C3,0x03A3}, /* 03A2 */ - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, /* 03A4 */ - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, /* 03A6 */ - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, /* 03A8 */ - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, /* 03AA */ - {0x0386,0x03AC,0x0391}, {0x0388,0x03AD,0x0395}, /* 03AC */ - {0x0389,0x03AE,0x0397}, {0x038A,0x03AF,0x0399}, /* 03AE */ - {0x03B0,0x03B0,0x03A5}, {0x0391,0x03B1,0x0391}, /* 03B0 */ - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, /* 03B2 */ - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, /* 03B4 */ - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, /* 03B6 */ - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, /* 03B8 */ - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, /* 03BA */ - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, /* 03BC */ - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, /* 03BE */ - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, /* 03C0 */ - {0x03A3,0x03C2,0x03A3}, {0x03A3,0x03C3,0x03A3}, /* 03C2 */ - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, /* 03C4 */ - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, /* 03C6 */ - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, /* 03C8 */ - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, /* 03CA */ - {0x038C,0x03CC,0x039F}, {0x038E,0x03CD,0x03A5}, /* 03CC */ - {0x038F,0x03CE,0x03A9}, {0x03CF,0x03D7,0x03CF}, /* 03CE */ - {0x0392,0x03D0,0x0392}, {0x0398,0x03D1,0x0398}, /* 03D0 */ - {0x03D2,0x03D2,0x03D2}, {0x03D3,0x03D3,0x03D2}, /* 03D2 */ - {0x03D4,0x03D4,0x03D2}, {0x03A6,0x03D5,0x03A6}, /* 03D4 */ - {0x03A0,0x03D6,0x03A0}, {0x03CF,0x03D7,0x03CF}, /* 03D6 */ - {0x03D8,0x03D9,0x03D8}, {0x03D8,0x03D9,0x03D8}, /* 03D8 */ - {0x03DA,0x03DB,0x03DA}, {0x03DA,0x03DB,0x03DA}, /* 03DA */ - {0x03DC,0x03DD,0x03DC}, {0x03DC,0x03DD,0x03DC}, /* 03DC */ - {0x03DE,0x03DF,0x03DE}, {0x03DE,0x03DF,0x03DE}, /* 03DE */ - {0x03E0,0x03E1,0x03E0}, {0x03E0,0x03E1,0x03E0}, /* 03E0 */ - {0x03E2,0x03E3,0x03E2}, {0x03E2,0x03E3,0x03E2}, /* 03E2 */ - {0x03E4,0x03E5,0x03E4}, {0x03E4,0x03E5,0x03E4}, /* 03E4 */ - {0x03E6,0x03E7,0x03E6}, {0x03E6,0x03E7,0x03E6}, /* 03E6 */ - {0x03E8,0x03E9,0x03E8}, {0x03E8,0x03E9,0x03E8}, /* 03E8 */ - {0x03EA,0x03EB,0x03EA}, {0x03EA,0x03EB,0x03EA}, /* 03EA */ - {0x03EC,0x03ED,0x03EC}, {0x03EC,0x03ED,0x03EC}, /* 03EC */ - {0x03EE,0x03EF,0x03EE}, {0x03EE,0x03EF,0x03EE}, /* 03EE */ - {0x039A,0x03F0,0x039A}, {0x03A1,0x03F1,0x03A1}, /* 03F0 */ - {0x03F9,0x03F2,0x03F9}, {0x03F3,0x03F3,0x03F3}, /* 03F2 */ - {0x03F4,0x03B8,0x03F4}, {0x0395,0x03F5,0x0395}, /* 03F4 */ - {0x03F6,0x03F6,0x03F6}, {0x03F7,0x03F8,0x03F7}, /* 03F6 */ - {0x03F7,0x03F8,0x03F7}, {0x03F9,0x03F2,0x03F9}, /* 03F8 */ - {0x03FA,0x03FB,0x03FA}, {0x03FA,0x03FB,0x03FA}, /* 03FA */ - {0x03FC,0x03FC,0x03FC}, {0x03FD,0x037B,0x03FD}, /* 03FC */ - {0x03FE,0x037C,0x03FE}, {0x03FF,0x037D,0x03FF} /* 03FE */ -}; - -static MY_UNICASE_CHARACTER u520p04[]={ - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, /* 0400 */ - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, /* 0402 */ - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, /* 0404 */ - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, /* 0406 */ - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, /* 0408 */ - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, /* 040A */ - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, /* 040C */ - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, /* 040E */ - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, /* 0410 */ - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, /* 0412 */ - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, /* 0414 */ - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, /* 0416 */ - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, /* 0418 */ - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, /* 041A */ - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, /* 041C */ - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, /* 041E */ - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, /* 0420 */ - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, /* 0422 */ - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, /* 0424 */ - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, /* 0426 */ - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, /* 0428 */ - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, /* 042A */ - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, /* 042C */ - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, /* 042E */ - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, /* 0430 */ - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, /* 0432 */ - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, /* 0434 */ - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, /* 0436 */ - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, /* 0438 */ - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, /* 043A */ - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, /* 043C */ - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, /* 043E */ - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, /* 0440 */ - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, /* 0442 */ - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, /* 0444 */ - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, /* 0446 */ - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, /* 0448 */ - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, /* 044A */ - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, /* 044C */ - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, /* 044E */ - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, /* 0450 */ - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, /* 0452 */ - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, /* 0454 */ - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, /* 0456 */ - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, /* 0458 */ - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, /* 045A */ - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, /* 045C */ - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, /* 045E */ - {0x0460,0x0461,0x0460}, {0x0460,0x0461,0x0460}, /* 0460 */ - {0x0462,0x0463,0x0462}, {0x0462,0x0463,0x0462}, /* 0462 */ - {0x0464,0x0465,0x0464}, {0x0464,0x0465,0x0464}, /* 0464 */ - {0x0466,0x0467,0x0466}, {0x0466,0x0467,0x0466}, /* 0466 */ - {0x0468,0x0469,0x0468}, {0x0468,0x0469,0x0468}, /* 0468 */ - {0x046A,0x046B,0x046A}, {0x046A,0x046B,0x046A}, /* 046A */ - {0x046C,0x046D,0x046C}, {0x046C,0x046D,0x046C}, /* 046C */ - {0x046E,0x046F,0x046E}, {0x046E,0x046F,0x046E}, /* 046E */ - {0x0470,0x0471,0x0470}, {0x0470,0x0471,0x0470}, /* 0470 */ - {0x0472,0x0473,0x0472}, {0x0472,0x0473,0x0472}, /* 0472 */ - {0x0474,0x0475,0x0474}, {0x0474,0x0475,0x0474}, /* 0474 */ - {0x0476,0x0477,0x0474}, {0x0476,0x0477,0x0474}, /* 0476 */ - {0x0478,0x0479,0x0478}, {0x0478,0x0479,0x0478}, /* 0478 */ - {0x047A,0x047B,0x047A}, {0x047A,0x047B,0x047A}, /* 047A */ - {0x047C,0x047D,0x047C}, {0x047C,0x047D,0x047C}, /* 047C */ - {0x047E,0x047F,0x047E}, {0x047E,0x047F,0x047E}, /* 047E */ - {0x0480,0x0481,0x0480}, {0x0480,0x0481,0x0480}, /* 0480 */ - {0x0482,0x0482,0x0482}, {0x0483,0x0483,0x0483}, /* 0482 */ - {0x0484,0x0484,0x0484}, {0x0485,0x0485,0x0485}, /* 0484 */ - {0x0486,0x0486,0x0486}, {0x0487,0x0487,0x0487}, /* 0486 */ - {0x0488,0x0488,0x0488}, {0x0489,0x0489,0x0489}, /* 0488 */ - {0x048A,0x048B,0x048A}, {0x048A,0x048B,0x048A}, /* 048A */ - {0x048C,0x048D,0x048C}, {0x048C,0x048D,0x048C}, /* 048C */ - {0x048E,0x048F,0x048E}, {0x048E,0x048F,0x048E}, /* 048E */ - {0x0490,0x0491,0x0490}, {0x0490,0x0491,0x0490}, /* 0490 */ - {0x0492,0x0493,0x0492}, {0x0492,0x0493,0x0492}, /* 0492 */ - {0x0494,0x0495,0x0494}, {0x0494,0x0495,0x0494}, /* 0494 */ - {0x0496,0x0497,0x0496}, {0x0496,0x0497,0x0496}, /* 0496 */ - {0x0498,0x0499,0x0498}, {0x0498,0x0499,0x0498}, /* 0498 */ - {0x049A,0x049B,0x049A}, {0x049A,0x049B,0x049A}, /* 049A */ - {0x049C,0x049D,0x049C}, {0x049C,0x049D,0x049C}, /* 049C */ - {0x049E,0x049F,0x049E}, {0x049E,0x049F,0x049E}, /* 049E */ - {0x04A0,0x04A1,0x04A0}, {0x04A0,0x04A1,0x04A0}, /* 04A0 */ - {0x04A2,0x04A3,0x04A2}, {0x04A2,0x04A3,0x04A2}, /* 04A2 */ - {0x04A4,0x04A5,0x04A4}, {0x04A4,0x04A5,0x04A4}, /* 04A4 */ - {0x04A6,0x04A7,0x04A6}, {0x04A6,0x04A7,0x04A6}, /* 04A6 */ - {0x04A8,0x04A9,0x04A8}, {0x04A8,0x04A9,0x04A8}, /* 04A8 */ - {0x04AA,0x04AB,0x04AA}, {0x04AA,0x04AB,0x04AA}, /* 04AA */ - {0x04AC,0x04AD,0x04AC}, {0x04AC,0x04AD,0x04AC}, /* 04AC */ - {0x04AE,0x04AF,0x04AE}, {0x04AE,0x04AF,0x04AE}, /* 04AE */ - {0x04B0,0x04B1,0x04B0}, {0x04B0,0x04B1,0x04B0}, /* 04B0 */ - {0x04B2,0x04B3,0x04B2}, {0x04B2,0x04B3,0x04B2}, /* 04B2 */ - {0x04B4,0x04B5,0x04B4}, {0x04B4,0x04B5,0x04B4}, /* 04B4 */ - {0x04B6,0x04B7,0x04B6}, {0x04B6,0x04B7,0x04B6}, /* 04B6 */ - {0x04B8,0x04B9,0x04B8}, {0x04B8,0x04B9,0x04B8}, /* 04B8 */ - {0x04BA,0x04BB,0x04BA}, {0x04BA,0x04BB,0x04BA}, /* 04BA */ - {0x04BC,0x04BD,0x04BC}, {0x04BC,0x04BD,0x04BC}, /* 04BC */ - {0x04BE,0x04BF,0x04BE}, {0x04BE,0x04BF,0x04BE}, /* 04BE */ - {0x04C0,0x04CF,0x04C0}, {0x04C1,0x04C2,0x0416}, /* 04C0 */ - {0x04C1,0x04C2,0x0416}, {0x04C3,0x04C4,0x04C3}, /* 04C2 */ - {0x04C3,0x04C4,0x04C3}, {0x04C5,0x04C6,0x04C5}, /* 04C4 */ - {0x04C5,0x04C6,0x04C5}, {0x04C7,0x04C8,0x04C7}, /* 04C6 */ - {0x04C7,0x04C8,0x04C7}, {0x04C9,0x04CA,0x04C9}, /* 04C8 */ - {0x04C9,0x04CA,0x04C9}, {0x04CB,0x04CC,0x04CB}, /* 04CA */ - {0x04CB,0x04CC,0x04CB}, {0x04CD,0x04CE,0x04CD}, /* 04CC */ - {0x04CD,0x04CE,0x04CD}, {0x04C0,0x04CF,0x04C0}, /* 04CE */ - {0x04D0,0x04D1,0x0410}, {0x04D0,0x04D1,0x0410}, /* 04D0 */ - {0x04D2,0x04D3,0x0410}, {0x04D2,0x04D3,0x0410}, /* 04D2 */ - {0x04D4,0x04D5,0x04D4}, {0x04D4,0x04D5,0x04D4}, /* 04D4 */ - {0x04D6,0x04D7,0x0415}, {0x04D6,0x04D7,0x0415}, /* 04D6 */ - {0x04D8,0x04D9,0x04D8}, {0x04D8,0x04D9,0x04D8}, /* 04D8 */ - {0x04DA,0x04DB,0x04D8}, {0x04DA,0x04DB,0x04D8}, /* 04DA */ - {0x04DC,0x04DD,0x0416}, {0x04DC,0x04DD,0x0416}, /* 04DC */ - {0x04DE,0x04DF,0x0417}, {0x04DE,0x04DF,0x0417}, /* 04DE */ - {0x04E0,0x04E1,0x04E0}, {0x04E0,0x04E1,0x04E0}, /* 04E0 */ - {0x04E2,0x04E3,0x0418}, {0x04E2,0x04E3,0x0418}, /* 04E2 */ - {0x04E4,0x04E5,0x0418}, {0x04E4,0x04E5,0x0418}, /* 04E4 */ - {0x04E6,0x04E7,0x041E}, {0x04E6,0x04E7,0x041E}, /* 04E6 */ - {0x04E8,0x04E9,0x04E8}, {0x04E8,0x04E9,0x04E8}, /* 04E8 */ - {0x04EA,0x04EB,0x04E8}, {0x04EA,0x04EB,0x04E8}, /* 04EA */ - {0x04EC,0x04ED,0x042D}, {0x04EC,0x04ED,0x042D}, /* 04EC */ - {0x04EE,0x04EF,0x0423}, {0x04EE,0x04EF,0x0423}, /* 04EE */ - {0x04F0,0x04F1,0x0423}, {0x04F0,0x04F1,0x0423}, /* 04F0 */ - {0x04F2,0x04F3,0x0423}, {0x04F2,0x04F3,0x0423}, /* 04F2 */ - {0x04F4,0x04F5,0x0427}, {0x04F4,0x04F5,0x0427}, /* 04F4 */ - {0x04F6,0x04F7,0x04F6}, {0x04F6,0x04F7,0x04F6}, /* 04F6 */ - {0x04F8,0x04F9,0x042B}, {0x04F8,0x04F9,0x042B}, /* 04F8 */ - {0x04FA,0x04FB,0x04FA}, {0x04FA,0x04FB,0x04FA}, /* 04FA */ - {0x04FC,0x04FD,0x04FC}, {0x04FC,0x04FD,0x04FC}, /* 04FC */ - {0x04FE,0x04FF,0x04FE}, {0x04FE,0x04FF,0x04FE} /* 04FE */ -}; - -static MY_UNICASE_CHARACTER u520p05[]={ - {0x0500,0x0501,0x0500}, {0x0500,0x0501,0x0500}, /* 0500 */ - {0x0502,0x0503,0x0502}, {0x0502,0x0503,0x0502}, /* 0502 */ - {0x0504,0x0505,0x0504}, {0x0504,0x0505,0x0504}, /* 0504 */ - {0x0506,0x0507,0x0506}, {0x0506,0x0507,0x0506}, /* 0506 */ - {0x0508,0x0509,0x0508}, {0x0508,0x0509,0x0508}, /* 0508 */ - {0x050A,0x050B,0x050A}, {0x050A,0x050B,0x050A}, /* 050A */ - {0x050C,0x050D,0x050C}, {0x050C,0x050D,0x050C}, /* 050C */ - {0x050E,0x050F,0x050E}, {0x050E,0x050F,0x050E}, /* 050E */ - {0x0510,0x0511,0x0510}, {0x0510,0x0511,0x0510}, /* 0510 */ - {0x0512,0x0513,0x0512}, {0x0512,0x0513,0x0512}, /* 0512 */ - {0x0514,0x0515,0x0514}, {0x0514,0x0515,0x0514}, /* 0514 */ - {0x0516,0x0517,0x0516}, {0x0516,0x0517,0x0516}, /* 0516 */ - {0x0518,0x0519,0x0518}, {0x0518,0x0519,0x0518}, /* 0518 */ - {0x051A,0x051B,0x051A}, {0x051A,0x051B,0x051A}, /* 051A */ - {0x051C,0x051D,0x051C}, {0x051C,0x051D,0x051C}, /* 051C */ - {0x051E,0x051F,0x051E}, {0x051E,0x051F,0x051E}, /* 051E */ - {0x0520,0x0521,0x0520}, {0x0520,0x0521,0x0520}, /* 0520 */ - {0x0522,0x0523,0x0522}, {0x0522,0x0523,0x0522}, /* 0522 */ - {0x0524,0x0525,0x0524}, {0x0524,0x0525,0x0524}, /* 0524 */ - {0x0526,0x0526,0x0526}, {0x0527,0x0527,0x0527}, /* 0526 */ - {0x0528,0x0528,0x0528}, {0x0529,0x0529,0x0529}, /* 0528 */ - {0x052A,0x052A,0x052A}, {0x052B,0x052B,0x052B}, /* 052A */ - {0x052C,0x052C,0x052C}, {0x052D,0x052D,0x052D}, /* 052C */ - {0x052E,0x052E,0x052E}, {0x052F,0x052F,0x052F}, /* 052E */ - {0x0530,0x0530,0x0530}, {0x0531,0x0561,0x0531}, /* 0530 */ - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, /* 0532 */ - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, /* 0534 */ - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, /* 0536 */ - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, /* 0538 */ - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, /* 053A */ - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, /* 053C */ - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, /* 053E */ - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, /* 0540 */ - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, /* 0542 */ - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, /* 0544 */ - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, /* 0546 */ - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, /* 0548 */ - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, /* 054A */ - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, /* 054C */ - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, /* 054E */ - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, /* 0550 */ - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, /* 0552 */ - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, /* 0554 */ - {0x0556,0x0586,0x0556}, {0x0557,0x0557,0x0557}, /* 0556 */ - {0x0558,0x0558,0x0558}, {0x0559,0x0559,0x0559}, /* 0558 */ - {0x055A,0x055A,0x055A}, {0x055B,0x055B,0x055B}, /* 055A */ - {0x055C,0x055C,0x055C}, {0x055D,0x055D,0x055D}, /* 055C */ - {0x055E,0x055E,0x055E}, {0x055F,0x055F,0x055F}, /* 055E */ - {0x0560,0x0560,0x0560}, {0x0531,0x0561,0x0531}, /* 0560 */ - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, /* 0562 */ - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, /* 0564 */ - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, /* 0566 */ - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, /* 0568 */ - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, /* 056A */ - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, /* 056C */ - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, /* 056E */ - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, /* 0570 */ - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, /* 0572 */ - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, /* 0574 */ - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, /* 0576 */ - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, /* 0578 */ - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, /* 057A */ - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, /* 057C */ - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, /* 057E */ - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, /* 0580 */ - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, /* 0582 */ - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, /* 0584 */ - {0x0556,0x0586,0x0556}, {0x0587,0x0587,0x0587}, /* 0586 */ - {0x0588,0x0588,0x0588}, {0x0589,0x0589,0x0589}, /* 0588 */ - {0x058A,0x058A,0x058A}, {0x058B,0x058B,0x058B}, /* 058A */ - {0x058C,0x058C,0x058C}, {0x058D,0x058D,0x058D}, /* 058C */ - {0x058E,0x058E,0x058E}, {0x058F,0x058F,0x058F}, /* 058E */ - {0x0590,0x0590,0x0590}, {0x0591,0x0591,0x0591}, /* 0590 */ - {0x0592,0x0592,0x0592}, {0x0593,0x0593,0x0593}, /* 0592 */ - {0x0594,0x0594,0x0594}, {0x0595,0x0595,0x0595}, /* 0594 */ - {0x0596,0x0596,0x0596}, {0x0597,0x0597,0x0597}, /* 0596 */ - {0x0598,0x0598,0x0598}, {0x0599,0x0599,0x0599}, /* 0598 */ - {0x059A,0x059A,0x059A}, {0x059B,0x059B,0x059B}, /* 059A */ - {0x059C,0x059C,0x059C}, {0x059D,0x059D,0x059D}, /* 059C */ - {0x059E,0x059E,0x059E}, {0x059F,0x059F,0x059F}, /* 059E */ - {0x05A0,0x05A0,0x05A0}, {0x05A1,0x05A1,0x05A1}, /* 05A0 */ - {0x05A2,0x05A2,0x05A2}, {0x05A3,0x05A3,0x05A3}, /* 05A2 */ - {0x05A4,0x05A4,0x05A4}, {0x05A5,0x05A5,0x05A5}, /* 05A4 */ - {0x05A6,0x05A6,0x05A6}, {0x05A7,0x05A7,0x05A7}, /* 05A6 */ - {0x05A8,0x05A8,0x05A8}, {0x05A9,0x05A9,0x05A9}, /* 05A8 */ - {0x05AA,0x05AA,0x05AA}, {0x05AB,0x05AB,0x05AB}, /* 05AA */ - {0x05AC,0x05AC,0x05AC}, {0x05AD,0x05AD,0x05AD}, /* 05AC */ - {0x05AE,0x05AE,0x05AE}, {0x05AF,0x05AF,0x05AF}, /* 05AE */ - {0x05B0,0x05B0,0x05B0}, {0x05B1,0x05B1,0x05B1}, /* 05B0 */ - {0x05B2,0x05B2,0x05B2}, {0x05B3,0x05B3,0x05B3}, /* 05B2 */ - {0x05B4,0x05B4,0x05B4}, {0x05B5,0x05B5,0x05B5}, /* 05B4 */ - {0x05B6,0x05B6,0x05B6}, {0x05B7,0x05B7,0x05B7}, /* 05B6 */ - {0x05B8,0x05B8,0x05B8}, {0x05B9,0x05B9,0x05B9}, /* 05B8 */ - {0x05BA,0x05BA,0x05BA}, {0x05BB,0x05BB,0x05BB}, /* 05BA */ - {0x05BC,0x05BC,0x05BC}, {0x05BD,0x05BD,0x05BD}, /* 05BC */ - {0x05BE,0x05BE,0x05BE}, {0x05BF,0x05BF,0x05BF}, /* 05BE */ - {0x05C0,0x05C0,0x05C0}, {0x05C1,0x05C1,0x05C1}, /* 05C0 */ - {0x05C2,0x05C2,0x05C2}, {0x05C3,0x05C3,0x05C3}, /* 05C2 */ - {0x05C4,0x05C4,0x05C4}, {0x05C5,0x05C5,0x05C5}, /* 05C4 */ - {0x05C6,0x05C6,0x05C6}, {0x05C7,0x05C7,0x05C7}, /* 05C6 */ - {0x05C8,0x05C8,0x05C8}, {0x05C9,0x05C9,0x05C9}, /* 05C8 */ - {0x05CA,0x05CA,0x05CA}, {0x05CB,0x05CB,0x05CB}, /* 05CA */ - {0x05CC,0x05CC,0x05CC}, {0x05CD,0x05CD,0x05CD}, /* 05CC */ - {0x05CE,0x05CE,0x05CE}, {0x05CF,0x05CF,0x05CF}, /* 05CE */ - {0x05D0,0x05D0,0x05D0}, {0x05D1,0x05D1,0x05D1}, /* 05D0 */ - {0x05D2,0x05D2,0x05D2}, {0x05D3,0x05D3,0x05D3}, /* 05D2 */ - {0x05D4,0x05D4,0x05D4}, {0x05D5,0x05D5,0x05D5}, /* 05D4 */ - {0x05D6,0x05D6,0x05D6}, {0x05D7,0x05D7,0x05D7}, /* 05D6 */ - {0x05D8,0x05D8,0x05D8}, {0x05D9,0x05D9,0x05D9}, /* 05D8 */ - {0x05DA,0x05DA,0x05DA}, {0x05DB,0x05DB,0x05DB}, /* 05DA */ - {0x05DC,0x05DC,0x05DC}, {0x05DD,0x05DD,0x05DD}, /* 05DC */ - {0x05DE,0x05DE,0x05DE}, {0x05DF,0x05DF,0x05DF}, /* 05DE */ - {0x05E0,0x05E0,0x05E0}, {0x05E1,0x05E1,0x05E1}, /* 05E0 */ - {0x05E2,0x05E2,0x05E2}, {0x05E3,0x05E3,0x05E3}, /* 05E2 */ - {0x05E4,0x05E4,0x05E4}, {0x05E5,0x05E5,0x05E5}, /* 05E4 */ - {0x05E6,0x05E6,0x05E6}, {0x05E7,0x05E7,0x05E7}, /* 05E6 */ - {0x05E8,0x05E8,0x05E8}, {0x05E9,0x05E9,0x05E9}, /* 05E8 */ - {0x05EA,0x05EA,0x05EA}, {0x05EB,0x05EB,0x05EB}, /* 05EA */ - {0x05EC,0x05EC,0x05EC}, {0x05ED,0x05ED,0x05ED}, /* 05EC */ - {0x05EE,0x05EE,0x05EE}, {0x05EF,0x05EF,0x05EF}, /* 05EE */ - {0x05F0,0x05F0,0x05F0}, {0x05F1,0x05F1,0x05F1}, /* 05F0 */ - {0x05F2,0x05F2,0x05F2}, {0x05F3,0x05F3,0x05F3}, /* 05F2 */ - {0x05F4,0x05F4,0x05F4}, {0x05F5,0x05F5,0x05F5}, /* 05F4 */ - {0x05F6,0x05F6,0x05F6}, {0x05F7,0x05F7,0x05F7}, /* 05F6 */ - {0x05F8,0x05F8,0x05F8}, {0x05F9,0x05F9,0x05F9}, /* 05F8 */ - {0x05FA,0x05FA,0x05FA}, {0x05FB,0x05FB,0x05FB}, /* 05FA */ - {0x05FC,0x05FC,0x05FC}, {0x05FD,0x05FD,0x05FD}, /* 05FC */ - {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF} /* 05FE */ -}; - -static MY_UNICASE_CHARACTER u520p10[]={ - {0x1000,0x1000,0x1000}, {0x1001,0x1001,0x1001}, /* 1000 */ - {0x1002,0x1002,0x1002}, {0x1003,0x1003,0x1003}, /* 1002 */ - {0x1004,0x1004,0x1004}, {0x1005,0x1005,0x1005}, /* 1004 */ - {0x1006,0x1006,0x1006}, {0x1007,0x1007,0x1007}, /* 1006 */ - {0x1008,0x1008,0x1008}, {0x1009,0x1009,0x1009}, /* 1008 */ - {0x100A,0x100A,0x100A}, {0x100B,0x100B,0x100B}, /* 100A */ - {0x100C,0x100C,0x100C}, {0x100D,0x100D,0x100D}, /* 100C */ - {0x100E,0x100E,0x100E}, {0x100F,0x100F,0x100F}, /* 100E */ - {0x1010,0x1010,0x1010}, {0x1011,0x1011,0x1011}, /* 1010 */ - {0x1012,0x1012,0x1012}, {0x1013,0x1013,0x1013}, /* 1012 */ - {0x1014,0x1014,0x1014}, {0x1015,0x1015,0x1015}, /* 1014 */ - {0x1016,0x1016,0x1016}, {0x1017,0x1017,0x1017}, /* 1016 */ - {0x1018,0x1018,0x1018}, {0x1019,0x1019,0x1019}, /* 1018 */ - {0x101A,0x101A,0x101A}, {0x101B,0x101B,0x101B}, /* 101A */ - {0x101C,0x101C,0x101C}, {0x101D,0x101D,0x101D}, /* 101C */ - {0x101E,0x101E,0x101E}, {0x101F,0x101F,0x101F}, /* 101E */ - {0x1020,0x1020,0x1020}, {0x1021,0x1021,0x1021}, /* 1020 */ - {0x1022,0x1022,0x1022}, {0x1023,0x1023,0x1023}, /* 1022 */ - {0x1024,0x1024,0x1024}, {0x1025,0x1025,0x1025}, /* 1024 */ - {0x1026,0x1026,0x1026}, {0x1027,0x1027,0x1027}, /* 1026 */ - {0x1028,0x1028,0x1028}, {0x1029,0x1029,0x1029}, /* 1028 */ - {0x102A,0x102A,0x102A}, {0x102B,0x102B,0x102B}, /* 102A */ - {0x102C,0x102C,0x102C}, {0x102D,0x102D,0x102D}, /* 102C */ - {0x102E,0x102E,0x102E}, {0x102F,0x102F,0x102F}, /* 102E */ - {0x1030,0x1030,0x1030}, {0x1031,0x1031,0x1031}, /* 1030 */ - {0x1032,0x1032,0x1032}, {0x1033,0x1033,0x1033}, /* 1032 */ - {0x1034,0x1034,0x1034}, {0x1035,0x1035,0x1035}, /* 1034 */ - {0x1036,0x1036,0x1036}, {0x1037,0x1037,0x1037}, /* 1036 */ - {0x1038,0x1038,0x1038}, {0x1039,0x1039,0x1039}, /* 1038 */ - {0x103A,0x103A,0x103A}, {0x103B,0x103B,0x103B}, /* 103A */ - {0x103C,0x103C,0x103C}, {0x103D,0x103D,0x103D}, /* 103C */ - {0x103E,0x103E,0x103E}, {0x103F,0x103F,0x103F}, /* 103E */ - {0x1040,0x1040,0x1040}, {0x1041,0x1041,0x1041}, /* 1040 */ - {0x1042,0x1042,0x1042}, {0x1043,0x1043,0x1043}, /* 1042 */ - {0x1044,0x1044,0x1044}, {0x1045,0x1045,0x1045}, /* 1044 */ - {0x1046,0x1046,0x1046}, {0x1047,0x1047,0x1047}, /* 1046 */ - {0x1048,0x1048,0x1048}, {0x1049,0x1049,0x1049}, /* 1048 */ - {0x104A,0x104A,0x104A}, {0x104B,0x104B,0x104B}, /* 104A */ - {0x104C,0x104C,0x104C}, {0x104D,0x104D,0x104D}, /* 104C */ - {0x104E,0x104E,0x104E}, {0x104F,0x104F,0x104F}, /* 104E */ - {0x1050,0x1050,0x1050}, {0x1051,0x1051,0x1051}, /* 1050 */ - {0x1052,0x1052,0x1052}, {0x1053,0x1053,0x1053}, /* 1052 */ - {0x1054,0x1054,0x1054}, {0x1055,0x1055,0x1055}, /* 1054 */ - {0x1056,0x1056,0x1056}, {0x1057,0x1057,0x1057}, /* 1056 */ - {0x1058,0x1058,0x1058}, {0x1059,0x1059,0x1059}, /* 1058 */ - {0x105A,0x105A,0x105A}, {0x105B,0x105B,0x105B}, /* 105A */ - {0x105C,0x105C,0x105C}, {0x105D,0x105D,0x105D}, /* 105C */ - {0x105E,0x105E,0x105E}, {0x105F,0x105F,0x105F}, /* 105E */ - {0x1060,0x1060,0x1060}, {0x1061,0x1061,0x1061}, /* 1060 */ - {0x1062,0x1062,0x1062}, {0x1063,0x1063,0x1063}, /* 1062 */ - {0x1064,0x1064,0x1064}, {0x1065,0x1065,0x1065}, /* 1064 */ - {0x1066,0x1066,0x1066}, {0x1067,0x1067,0x1067}, /* 1066 */ - {0x1068,0x1068,0x1068}, {0x1069,0x1069,0x1069}, /* 1068 */ - {0x106A,0x106A,0x106A}, {0x106B,0x106B,0x106B}, /* 106A */ - {0x106C,0x106C,0x106C}, {0x106D,0x106D,0x106D}, /* 106C */ - {0x106E,0x106E,0x106E}, {0x106F,0x106F,0x106F}, /* 106E */ - {0x1070,0x1070,0x1070}, {0x1071,0x1071,0x1071}, /* 1070 */ - {0x1072,0x1072,0x1072}, {0x1073,0x1073,0x1073}, /* 1072 */ - {0x1074,0x1074,0x1074}, {0x1075,0x1075,0x1075}, /* 1074 */ - {0x1076,0x1076,0x1076}, {0x1077,0x1077,0x1077}, /* 1076 */ - {0x1078,0x1078,0x1078}, {0x1079,0x1079,0x1079}, /* 1078 */ - {0x107A,0x107A,0x107A}, {0x107B,0x107B,0x107B}, /* 107A */ - {0x107C,0x107C,0x107C}, {0x107D,0x107D,0x107D}, /* 107C */ - {0x107E,0x107E,0x107E}, {0x107F,0x107F,0x107F}, /* 107E */ - {0x1080,0x1080,0x1080}, {0x1081,0x1081,0x1081}, /* 1080 */ - {0x1082,0x1082,0x1082}, {0x1083,0x1083,0x1083}, /* 1082 */ - {0x1084,0x1084,0x1084}, {0x1085,0x1085,0x1085}, /* 1084 */ - {0x1086,0x1086,0x1086}, {0x1087,0x1087,0x1087}, /* 1086 */ - {0x1088,0x1088,0x1088}, {0x1089,0x1089,0x1089}, /* 1088 */ - {0x108A,0x108A,0x108A}, {0x108B,0x108B,0x108B}, /* 108A */ - {0x108C,0x108C,0x108C}, {0x108D,0x108D,0x108D}, /* 108C */ - {0x108E,0x108E,0x108E}, {0x108F,0x108F,0x108F}, /* 108E */ - {0x1090,0x1090,0x1090}, {0x1091,0x1091,0x1091}, /* 1090 */ - {0x1092,0x1092,0x1092}, {0x1093,0x1093,0x1093}, /* 1092 */ - {0x1094,0x1094,0x1094}, {0x1095,0x1095,0x1095}, /* 1094 */ - {0x1096,0x1096,0x1096}, {0x1097,0x1097,0x1097}, /* 1096 */ - {0x1098,0x1098,0x1098}, {0x1099,0x1099,0x1099}, /* 1098 */ - {0x109A,0x109A,0x109A}, {0x109B,0x109B,0x109B}, /* 109A */ - {0x109C,0x109C,0x109C}, {0x109D,0x109D,0x109D}, /* 109C */ - {0x109E,0x109E,0x109E}, {0x109F,0x109F,0x109F}, /* 109E */ - {0x10A0,0x2D00,0x10A0}, {0x10A1,0x2D01,0x10A1}, /* 10A0 */ - {0x10A2,0x2D02,0x10A2}, {0x10A3,0x2D03,0x10A3}, /* 10A2 */ - {0x10A4,0x2D04,0x10A4}, {0x10A5,0x2D05,0x10A5}, /* 10A4 */ - {0x10A6,0x2D06,0x10A6}, {0x10A7,0x2D07,0x10A7}, /* 10A6 */ - {0x10A8,0x2D08,0x10A8}, {0x10A9,0x2D09,0x10A9}, /* 10A8 */ - {0x10AA,0x2D0A,0x10AA}, {0x10AB,0x2D0B,0x10AB}, /* 10AA */ - {0x10AC,0x2D0C,0x10AC}, {0x10AD,0x2D0D,0x10AD}, /* 10AC */ - {0x10AE,0x2D0E,0x10AE}, {0x10AF,0x2D0F,0x10AF}, /* 10AE */ - {0x10B0,0x2D10,0x10B0}, {0x10B1,0x2D11,0x10B1}, /* 10B0 */ - {0x10B2,0x2D12,0x10B2}, {0x10B3,0x2D13,0x10B3}, /* 10B2 */ - {0x10B4,0x2D14,0x10B4}, {0x10B5,0x2D15,0x10B5}, /* 10B4 */ - {0x10B6,0x2D16,0x10B6}, {0x10B7,0x2D17,0x10B7}, /* 10B6 */ - {0x10B8,0x2D18,0x10B8}, {0x10B9,0x2D19,0x10B9}, /* 10B8 */ - {0x10BA,0x2D1A,0x10BA}, {0x10BB,0x2D1B,0x10BB}, /* 10BA */ - {0x10BC,0x2D1C,0x10BC}, {0x10BD,0x2D1D,0x10BD}, /* 10BC */ - {0x10BE,0x2D1E,0x10BE}, {0x10BF,0x2D1F,0x10BF}, /* 10BE */ - {0x10C0,0x2D20,0x10C0}, {0x10C1,0x2D21,0x10C1}, /* 10C0 */ - {0x10C2,0x2D22,0x10C2}, {0x10C3,0x2D23,0x10C3}, /* 10C2 */ - {0x10C4,0x2D24,0x10C4}, {0x10C5,0x2D25,0x10C5}, /* 10C4 */ - {0x10C6,0x10C6,0x10C6}, {0x10C7,0x10C7,0x10C7}, /* 10C6 */ - {0x10C8,0x10C8,0x10C8}, {0x10C9,0x10C9,0x10C9}, /* 10C8 */ - {0x10CA,0x10CA,0x10CA}, {0x10CB,0x10CB,0x10CB}, /* 10CA */ - {0x10CC,0x10CC,0x10CC}, {0x10CD,0x10CD,0x10CD}, /* 10CC */ - {0x10CE,0x10CE,0x10CE}, {0x10CF,0x10CF,0x10CF}, /* 10CE */ - {0x10D0,0x10D0,0x10D0}, {0x10D1,0x10D1,0x10D1}, /* 10D0 */ - {0x10D2,0x10D2,0x10D2}, {0x10D3,0x10D3,0x10D3}, /* 10D2 */ - {0x10D4,0x10D4,0x10D4}, {0x10D5,0x10D5,0x10D5}, /* 10D4 */ - {0x10D6,0x10D6,0x10D6}, {0x10D7,0x10D7,0x10D7}, /* 10D6 */ - {0x10D8,0x10D8,0x10D8}, {0x10D9,0x10D9,0x10D9}, /* 10D8 */ - {0x10DA,0x10DA,0x10DA}, {0x10DB,0x10DB,0x10DB}, /* 10DA */ - {0x10DC,0x10DC,0x10DC}, {0x10DD,0x10DD,0x10DD}, /* 10DC */ - {0x10DE,0x10DE,0x10DE}, {0x10DF,0x10DF,0x10DF}, /* 10DE */ - {0x10E0,0x10E0,0x10E0}, {0x10E1,0x10E1,0x10E1}, /* 10E0 */ - {0x10E2,0x10E2,0x10E2}, {0x10E3,0x10E3,0x10E3}, /* 10E2 */ - {0x10E4,0x10E4,0x10E4}, {0x10E5,0x10E5,0x10E5}, /* 10E4 */ - {0x10E6,0x10E6,0x10E6}, {0x10E7,0x10E7,0x10E7}, /* 10E6 */ - {0x10E8,0x10E8,0x10E8}, {0x10E9,0x10E9,0x10E9}, /* 10E8 */ - {0x10EA,0x10EA,0x10EA}, {0x10EB,0x10EB,0x10EB}, /* 10EA */ - {0x10EC,0x10EC,0x10EC}, {0x10ED,0x10ED,0x10ED}, /* 10EC */ - {0x10EE,0x10EE,0x10EE}, {0x10EF,0x10EF,0x10EF}, /* 10EE */ - {0x10F0,0x10F0,0x10F0}, {0x10F1,0x10F1,0x10F1}, /* 10F0 */ - {0x10F2,0x10F2,0x10F2}, {0x10F3,0x10F3,0x10F3}, /* 10F2 */ - {0x10F4,0x10F4,0x10F4}, {0x10F5,0x10F5,0x10F5}, /* 10F4 */ - {0x10F6,0x10F6,0x10F6}, {0x10F7,0x10F7,0x10F7}, /* 10F6 */ - {0x10F8,0x10F8,0x10F8}, {0x10F9,0x10F9,0x10F9}, /* 10F8 */ - {0x10FA,0x10FA,0x10FA}, {0x10FB,0x10FB,0x10FB}, /* 10FA */ - {0x10FC,0x10FC,0x10FC}, {0x10FD,0x10FD,0x10FD}, /* 10FC */ - {0x10FE,0x10FE,0x10FE}, {0x10FF,0x10FF,0x10FF} /* 10FE */ -}; - -static MY_UNICASE_CHARACTER u520p1D[]={ - {0x1D00,0x1D00,0x1D00}, {0x1D01,0x1D01,0x1D01}, /* 1D00 */ - {0x1D02,0x1D02,0x1D02}, {0x1D03,0x1D03,0x1D03}, /* 1D02 */ - {0x1D04,0x1D04,0x1D04}, {0x1D05,0x1D05,0x1D05}, /* 1D04 */ - {0x1D06,0x1D06,0x1D06}, {0x1D07,0x1D07,0x1D07}, /* 1D06 */ - {0x1D08,0x1D08,0x1D08}, {0x1D09,0x1D09,0x1D09}, /* 1D08 */ - {0x1D0A,0x1D0A,0x1D0A}, {0x1D0B,0x1D0B,0x1D0B}, /* 1D0A */ - {0x1D0C,0x1D0C,0x1D0C}, {0x1D0D,0x1D0D,0x1D0D}, /* 1D0C */ - {0x1D0E,0x1D0E,0x1D0E}, {0x1D0F,0x1D0F,0x1D0F}, /* 1D0E */ - {0x1D10,0x1D10,0x1D10}, {0x1D11,0x1D11,0x1D11}, /* 1D10 */ - {0x1D12,0x1D12,0x1D12}, {0x1D13,0x1D13,0x1D13}, /* 1D12 */ - {0x1D14,0x1D14,0x1D14}, {0x1D15,0x1D15,0x1D15}, /* 1D14 */ - {0x1D16,0x1D16,0x1D16}, {0x1D17,0x1D17,0x1D17}, /* 1D16 */ - {0x1D18,0x1D18,0x1D18}, {0x1D19,0x1D19,0x1D19}, /* 1D18 */ - {0x1D1A,0x1D1A,0x1D1A}, {0x1D1B,0x1D1B,0x1D1B}, /* 1D1A */ - {0x1D1C,0x1D1C,0x1D1C}, {0x1D1D,0x1D1D,0x1D1D}, /* 1D1C */ - {0x1D1E,0x1D1E,0x1D1E}, {0x1D1F,0x1D1F,0x1D1F}, /* 1D1E */ - {0x1D20,0x1D20,0x1D20}, {0x1D21,0x1D21,0x1D21}, /* 1D20 */ - {0x1D22,0x1D22,0x1D22}, {0x1D23,0x1D23,0x1D23}, /* 1D22 */ - {0x1D24,0x1D24,0x1D24}, {0x1D25,0x1D25,0x1D25}, /* 1D24 */ - {0x1D26,0x1D26,0x1D26}, {0x1D27,0x1D27,0x1D27}, /* 1D26 */ - {0x1D28,0x1D28,0x1D28}, {0x1D29,0x1D29,0x1D29}, /* 1D28 */ - {0x1D2A,0x1D2A,0x1D2A}, {0x1D2B,0x1D2B,0x1D2B}, /* 1D2A */ - {0x1D2C,0x1D2C,0x1D2C}, {0x1D2D,0x1D2D,0x1D2D}, /* 1D2C */ - {0x1D2E,0x1D2E,0x1D2E}, {0x1D2F,0x1D2F,0x1D2F}, /* 1D2E */ - {0x1D30,0x1D30,0x1D30}, {0x1D31,0x1D31,0x1D31}, /* 1D30 */ - {0x1D32,0x1D32,0x1D32}, {0x1D33,0x1D33,0x1D33}, /* 1D32 */ - {0x1D34,0x1D34,0x1D34}, {0x1D35,0x1D35,0x1D35}, /* 1D34 */ - {0x1D36,0x1D36,0x1D36}, {0x1D37,0x1D37,0x1D37}, /* 1D36 */ - {0x1D38,0x1D38,0x1D38}, {0x1D39,0x1D39,0x1D39}, /* 1D38 */ - {0x1D3A,0x1D3A,0x1D3A}, {0x1D3B,0x1D3B,0x1D3B}, /* 1D3A */ - {0x1D3C,0x1D3C,0x1D3C}, {0x1D3D,0x1D3D,0x1D3D}, /* 1D3C */ - {0x1D3E,0x1D3E,0x1D3E}, {0x1D3F,0x1D3F,0x1D3F}, /* 1D3E */ - {0x1D40,0x1D40,0x1D40}, {0x1D41,0x1D41,0x1D41}, /* 1D40 */ - {0x1D42,0x1D42,0x1D42}, {0x1D43,0x1D43,0x1D43}, /* 1D42 */ - {0x1D44,0x1D44,0x1D44}, {0x1D45,0x1D45,0x1D45}, /* 1D44 */ - {0x1D46,0x1D46,0x1D46}, {0x1D47,0x1D47,0x1D47}, /* 1D46 */ - {0x1D48,0x1D48,0x1D48}, {0x1D49,0x1D49,0x1D49}, /* 1D48 */ - {0x1D4A,0x1D4A,0x1D4A}, {0x1D4B,0x1D4B,0x1D4B}, /* 1D4A */ - {0x1D4C,0x1D4C,0x1D4C}, {0x1D4D,0x1D4D,0x1D4D}, /* 1D4C */ - {0x1D4E,0x1D4E,0x1D4E}, {0x1D4F,0x1D4F,0x1D4F}, /* 1D4E */ - {0x1D50,0x1D50,0x1D50}, {0x1D51,0x1D51,0x1D51}, /* 1D50 */ - {0x1D52,0x1D52,0x1D52}, {0x1D53,0x1D53,0x1D53}, /* 1D52 */ - {0x1D54,0x1D54,0x1D54}, {0x1D55,0x1D55,0x1D55}, /* 1D54 */ - {0x1D56,0x1D56,0x1D56}, {0x1D57,0x1D57,0x1D57}, /* 1D56 */ - {0x1D58,0x1D58,0x1D58}, {0x1D59,0x1D59,0x1D59}, /* 1D58 */ - {0x1D5A,0x1D5A,0x1D5A}, {0x1D5B,0x1D5B,0x1D5B}, /* 1D5A */ - {0x1D5C,0x1D5C,0x1D5C}, {0x1D5D,0x1D5D,0x1D5D}, /* 1D5C */ - {0x1D5E,0x1D5E,0x1D5E}, {0x1D5F,0x1D5F,0x1D5F}, /* 1D5E */ - {0x1D60,0x1D60,0x1D60}, {0x1D61,0x1D61,0x1D61}, /* 1D60 */ - {0x1D62,0x1D62,0x1D62}, {0x1D63,0x1D63,0x1D63}, /* 1D62 */ - {0x1D64,0x1D64,0x1D64}, {0x1D65,0x1D65,0x1D65}, /* 1D64 */ - {0x1D66,0x1D66,0x1D66}, {0x1D67,0x1D67,0x1D67}, /* 1D66 */ - {0x1D68,0x1D68,0x1D68}, {0x1D69,0x1D69,0x1D69}, /* 1D68 */ - {0x1D6A,0x1D6A,0x1D6A}, {0x1D6B,0x1D6B,0x1D6B}, /* 1D6A */ - {0x1D6C,0x1D6C,0x1D6C}, {0x1D6D,0x1D6D,0x1D6D}, /* 1D6C */ - {0x1D6E,0x1D6E,0x1D6E}, {0x1D6F,0x1D6F,0x1D6F}, /* 1D6E */ - {0x1D70,0x1D70,0x1D70}, {0x1D71,0x1D71,0x1D71}, /* 1D70 */ - {0x1D72,0x1D72,0x1D72}, {0x1D73,0x1D73,0x1D73}, /* 1D72 */ - {0x1D74,0x1D74,0x1D74}, {0x1D75,0x1D75,0x1D75}, /* 1D74 */ - {0x1D76,0x1D76,0x1D76}, {0x1D77,0x1D77,0x1D77}, /* 1D76 */ - {0x1D78,0x1D78,0x1D78}, {0xA77D,0x1D79,0xA77D}, /* 1D78 */ - {0x1D7A,0x1D7A,0x1D7A}, {0x1D7B,0x1D7B,0x1D7B}, /* 1D7A */ - {0x1D7C,0x1D7C,0x1D7C}, {0x2C63,0x1D7D,0x2C63}, /* 1D7C */ - {0x1D7E,0x1D7E,0x1D7E}, {0x1D7F,0x1D7F,0x1D7F}, /* 1D7E */ - {0x1D80,0x1D80,0x1D80}, {0x1D81,0x1D81,0x1D81}, /* 1D80 */ - {0x1D82,0x1D82,0x1D82}, {0x1D83,0x1D83,0x1D83}, /* 1D82 */ - {0x1D84,0x1D84,0x1D84}, {0x1D85,0x1D85,0x1D85}, /* 1D84 */ - {0x1D86,0x1D86,0x1D86}, {0x1D87,0x1D87,0x1D87}, /* 1D86 */ - {0x1D88,0x1D88,0x1D88}, {0x1D89,0x1D89,0x1D89}, /* 1D88 */ - {0x1D8A,0x1D8A,0x1D8A}, {0x1D8B,0x1D8B,0x1D8B}, /* 1D8A */ - {0x1D8C,0x1D8C,0x1D8C}, {0x1D8D,0x1D8D,0x1D8D}, /* 1D8C */ - {0x1D8E,0x1D8E,0x1D8E}, {0x1D8F,0x1D8F,0x1D8F}, /* 1D8E */ - {0x1D90,0x1D90,0x1D90}, {0x1D91,0x1D91,0x1D91}, /* 1D90 */ - {0x1D92,0x1D92,0x1D92}, {0x1D93,0x1D93,0x1D93}, /* 1D92 */ - {0x1D94,0x1D94,0x1D94}, {0x1D95,0x1D95,0x1D95}, /* 1D94 */ - {0x1D96,0x1D96,0x1D96}, {0x1D97,0x1D97,0x1D97}, /* 1D96 */ - {0x1D98,0x1D98,0x1D98}, {0x1D99,0x1D99,0x1D99}, /* 1D98 */ - {0x1D9A,0x1D9A,0x1D9A}, {0x1D9B,0x1D9B,0x1D9B}, /* 1D9A */ - {0x1D9C,0x1D9C,0x1D9C}, {0x1D9D,0x1D9D,0x1D9D}, /* 1D9C */ - {0x1D9E,0x1D9E,0x1D9E}, {0x1D9F,0x1D9F,0x1D9F}, /* 1D9E */ - {0x1DA0,0x1DA0,0x1DA0}, {0x1DA1,0x1DA1,0x1DA1}, /* 1DA0 */ - {0x1DA2,0x1DA2,0x1DA2}, {0x1DA3,0x1DA3,0x1DA3}, /* 1DA2 */ - {0x1DA4,0x1DA4,0x1DA4}, {0x1DA5,0x1DA5,0x1DA5}, /* 1DA4 */ - {0x1DA6,0x1DA6,0x1DA6}, {0x1DA7,0x1DA7,0x1DA7}, /* 1DA6 */ - {0x1DA8,0x1DA8,0x1DA8}, {0x1DA9,0x1DA9,0x1DA9}, /* 1DA8 */ - {0x1DAA,0x1DAA,0x1DAA}, {0x1DAB,0x1DAB,0x1DAB}, /* 1DAA */ - {0x1DAC,0x1DAC,0x1DAC}, {0x1DAD,0x1DAD,0x1DAD}, /* 1DAC */ - {0x1DAE,0x1DAE,0x1DAE}, {0x1DAF,0x1DAF,0x1DAF}, /* 1DAE */ - {0x1DB0,0x1DB0,0x1DB0}, {0x1DB1,0x1DB1,0x1DB1}, /* 1DB0 */ - {0x1DB2,0x1DB2,0x1DB2}, {0x1DB3,0x1DB3,0x1DB3}, /* 1DB2 */ - {0x1DB4,0x1DB4,0x1DB4}, {0x1DB5,0x1DB5,0x1DB5}, /* 1DB4 */ - {0x1DB6,0x1DB6,0x1DB6}, {0x1DB7,0x1DB7,0x1DB7}, /* 1DB6 */ - {0x1DB8,0x1DB8,0x1DB8}, {0x1DB9,0x1DB9,0x1DB9}, /* 1DB8 */ - {0x1DBA,0x1DBA,0x1DBA}, {0x1DBB,0x1DBB,0x1DBB}, /* 1DBA */ - {0x1DBC,0x1DBC,0x1DBC}, {0x1DBD,0x1DBD,0x1DBD}, /* 1DBC */ - {0x1DBE,0x1DBE,0x1DBE}, {0x1DBF,0x1DBF,0x1DBF}, /* 1DBE */ - {0x1DC0,0x1DC0,0x1DC0}, {0x1DC1,0x1DC1,0x1DC1}, /* 1DC0 */ - {0x1DC2,0x1DC2,0x1DC2}, {0x1DC3,0x1DC3,0x1DC3}, /* 1DC2 */ - {0x1DC4,0x1DC4,0x1DC4}, {0x1DC5,0x1DC5,0x1DC5}, /* 1DC4 */ - {0x1DC6,0x1DC6,0x1DC6}, {0x1DC7,0x1DC7,0x1DC7}, /* 1DC6 */ - {0x1DC8,0x1DC8,0x1DC8}, {0x1DC9,0x1DC9,0x1DC9}, /* 1DC8 */ - {0x1DCA,0x1DCA,0x1DCA}, {0x1DCB,0x1DCB,0x1DCB}, /* 1DCA */ - {0x1DCC,0x1DCC,0x1DCC}, {0x1DCD,0x1DCD,0x1DCD}, /* 1DCC */ - {0x1DCE,0x1DCE,0x1DCE}, {0x1DCF,0x1DCF,0x1DCF}, /* 1DCE */ - {0x1DD0,0x1DD0,0x1DD0}, {0x1DD1,0x1DD1,0x1DD1}, /* 1DD0 */ - {0x1DD2,0x1DD2,0x1DD2}, {0x1DD3,0x1DD3,0x1DD3}, /* 1DD2 */ - {0x1DD4,0x1DD4,0x1DD4}, {0x1DD5,0x1DD5,0x1DD5}, /* 1DD4 */ - {0x1DD6,0x1DD6,0x1DD6}, {0x1DD7,0x1DD7,0x1DD7}, /* 1DD6 */ - {0x1DD8,0x1DD8,0x1DD8}, {0x1DD9,0x1DD9,0x1DD9}, /* 1DD8 */ - {0x1DDA,0x1DDA,0x1DDA}, {0x1DDB,0x1DDB,0x1DDB}, /* 1DDA */ - {0x1DDC,0x1DDC,0x1DDC}, {0x1DDD,0x1DDD,0x1DDD}, /* 1DDC */ - {0x1DDE,0x1DDE,0x1DDE}, {0x1DDF,0x1DDF,0x1DDF}, /* 1DDE */ - {0x1DE0,0x1DE0,0x1DE0}, {0x1DE1,0x1DE1,0x1DE1}, /* 1DE0 */ - {0x1DE2,0x1DE2,0x1DE2}, {0x1DE3,0x1DE3,0x1DE3}, /* 1DE2 */ - {0x1DE4,0x1DE4,0x1DE4}, {0x1DE5,0x1DE5,0x1DE5}, /* 1DE4 */ - {0x1DE6,0x1DE6,0x1DE6}, {0x1DE7,0x1DE7,0x1DE7}, /* 1DE6 */ - {0x1DE8,0x1DE8,0x1DE8}, {0x1DE9,0x1DE9,0x1DE9}, /* 1DE8 */ - {0x1DEA,0x1DEA,0x1DEA}, {0x1DEB,0x1DEB,0x1DEB}, /* 1DEA */ - {0x1DEC,0x1DEC,0x1DEC}, {0x1DED,0x1DED,0x1DED}, /* 1DEC */ - {0x1DEE,0x1DEE,0x1DEE}, {0x1DEF,0x1DEF,0x1DEF}, /* 1DEE */ - {0x1DF0,0x1DF0,0x1DF0}, {0x1DF1,0x1DF1,0x1DF1}, /* 1DF0 */ - {0x1DF2,0x1DF2,0x1DF2}, {0x1DF3,0x1DF3,0x1DF3}, /* 1DF2 */ - {0x1DF4,0x1DF4,0x1DF4}, {0x1DF5,0x1DF5,0x1DF5}, /* 1DF4 */ - {0x1DF6,0x1DF6,0x1DF6}, {0x1DF7,0x1DF7,0x1DF7}, /* 1DF6 */ - {0x1DF8,0x1DF8,0x1DF8}, {0x1DF9,0x1DF9,0x1DF9}, /* 1DF8 */ - {0x1DFA,0x1DFA,0x1DFA}, {0x1DFB,0x1DFB,0x1DFB}, /* 1DFA */ - {0x1DFC,0x1DFC,0x1DFC}, {0x1DFD,0x1DFD,0x1DFD}, /* 1DFC */ - {0x1DFE,0x1DFE,0x1DFE}, {0x1DFF,0x1DFF,0x1DFF} /* 1DFE */ -}; - -static MY_UNICASE_CHARACTER u520p1E[]={ - {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, /* 1E00 */ - {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, /* 1E02 */ - {0x1E04,0x1E05,0x0042}, {0x1E04,0x1E05,0x0042}, /* 1E04 */ - {0x1E06,0x1E07,0x0042}, {0x1E06,0x1E07,0x0042}, /* 1E06 */ - {0x1E08,0x1E09,0x0043}, {0x1E08,0x1E09,0x0043}, /* 1E08 */ - {0x1E0A,0x1E0B,0x0044}, {0x1E0A,0x1E0B,0x0044}, /* 1E0A */ - {0x1E0C,0x1E0D,0x0044}, {0x1E0C,0x1E0D,0x0044}, /* 1E0C */ - {0x1E0E,0x1E0F,0x0044}, {0x1E0E,0x1E0F,0x0044}, /* 1E0E */ - {0x1E10,0x1E11,0x0044}, {0x1E10,0x1E11,0x0044}, /* 1E10 */ - {0x1E12,0x1E13,0x0044}, {0x1E12,0x1E13,0x0044}, /* 1E12 */ - {0x1E14,0x1E15,0x0045}, {0x1E14,0x1E15,0x0045}, /* 1E14 */ - {0x1E16,0x1E17,0x0045}, {0x1E16,0x1E17,0x0045}, /* 1E16 */ - {0x1E18,0x1E19,0x0045}, {0x1E18,0x1E19,0x0045}, /* 1E18 */ - {0x1E1A,0x1E1B,0x0045}, {0x1E1A,0x1E1B,0x0045}, /* 1E1A */ - {0x1E1C,0x1E1D,0x0045}, {0x1E1C,0x1E1D,0x0045}, /* 1E1C */ - {0x1E1E,0x1E1F,0x0046}, {0x1E1E,0x1E1F,0x0046}, /* 1E1E */ - {0x1E20,0x1E21,0x0047}, {0x1E20,0x1E21,0x0047}, /* 1E20 */ - {0x1E22,0x1E23,0x0048}, {0x1E22,0x1E23,0x0048}, /* 1E22 */ - {0x1E24,0x1E25,0x0048}, {0x1E24,0x1E25,0x0048}, /* 1E24 */ - {0x1E26,0x1E27,0x0048}, {0x1E26,0x1E27,0x0048}, /* 1E26 */ - {0x1E28,0x1E29,0x0048}, {0x1E28,0x1E29,0x0048}, /* 1E28 */ - {0x1E2A,0x1E2B,0x0048}, {0x1E2A,0x1E2B,0x0048}, /* 1E2A */ - {0x1E2C,0x1E2D,0x0049}, {0x1E2C,0x1E2D,0x0049}, /* 1E2C */ - {0x1E2E,0x1E2F,0x0049}, {0x1E2E,0x1E2F,0x0049}, /* 1E2E */ - {0x1E30,0x1E31,0x004B}, {0x1E30,0x1E31,0x004B}, /* 1E30 */ - {0x1E32,0x1E33,0x004B}, {0x1E32,0x1E33,0x004B}, /* 1E32 */ - {0x1E34,0x1E35,0x004B}, {0x1E34,0x1E35,0x004B}, /* 1E34 */ - {0x1E36,0x1E37,0x004C}, {0x1E36,0x1E37,0x004C}, /* 1E36 */ - {0x1E38,0x1E39,0x004C}, {0x1E38,0x1E39,0x004C}, /* 1E38 */ - {0x1E3A,0x1E3B,0x004C}, {0x1E3A,0x1E3B,0x004C}, /* 1E3A */ - {0x1E3C,0x1E3D,0x004C}, {0x1E3C,0x1E3D,0x004C}, /* 1E3C */ - {0x1E3E,0x1E3F,0x004D}, {0x1E3E,0x1E3F,0x004D}, /* 1E3E */ - {0x1E40,0x1E41,0x004D}, {0x1E40,0x1E41,0x004D}, /* 1E40 */ - {0x1E42,0x1E43,0x004D}, {0x1E42,0x1E43,0x004D}, /* 1E42 */ - {0x1E44,0x1E45,0x004E}, {0x1E44,0x1E45,0x004E}, /* 1E44 */ - {0x1E46,0x1E47,0x004E}, {0x1E46,0x1E47,0x004E}, /* 1E46 */ - {0x1E48,0x1E49,0x004E}, {0x1E48,0x1E49,0x004E}, /* 1E48 */ - {0x1E4A,0x1E4B,0x004E}, {0x1E4A,0x1E4B,0x004E}, /* 1E4A */ - {0x1E4C,0x1E4D,0x004F}, {0x1E4C,0x1E4D,0x004F}, /* 1E4C */ - {0x1E4E,0x1E4F,0x004F}, {0x1E4E,0x1E4F,0x004F}, /* 1E4E */ - {0x1E50,0x1E51,0x004F}, {0x1E50,0x1E51,0x004F}, /* 1E50 */ - {0x1E52,0x1E53,0x004F}, {0x1E52,0x1E53,0x004F}, /* 1E52 */ - {0x1E54,0x1E55,0x0050}, {0x1E54,0x1E55,0x0050}, /* 1E54 */ - {0x1E56,0x1E57,0x0050}, {0x1E56,0x1E57,0x0050}, /* 1E56 */ - {0x1E58,0x1E59,0x0052}, {0x1E58,0x1E59,0x0052}, /* 1E58 */ - {0x1E5A,0x1E5B,0x0052}, {0x1E5A,0x1E5B,0x0052}, /* 1E5A */ - {0x1E5C,0x1E5D,0x0052}, {0x1E5C,0x1E5D,0x0052}, /* 1E5C */ - {0x1E5E,0x1E5F,0x0052}, {0x1E5E,0x1E5F,0x0052}, /* 1E5E */ - {0x1E60,0x1E61,0x0053}, {0x1E60,0x1E61,0x0053}, /* 1E60 */ - {0x1E62,0x1E63,0x0053}, {0x1E62,0x1E63,0x0053}, /* 1E62 */ - {0x1E64,0x1E65,0x0053}, {0x1E64,0x1E65,0x0053}, /* 1E64 */ - {0x1E66,0x1E67,0x0053}, {0x1E66,0x1E67,0x0053}, /* 1E66 */ - {0x1E68,0x1E69,0x0053}, {0x1E68,0x1E69,0x0053}, /* 1E68 */ - {0x1E6A,0x1E6B,0x0054}, {0x1E6A,0x1E6B,0x0054}, /* 1E6A */ - {0x1E6C,0x1E6D,0x0054}, {0x1E6C,0x1E6D,0x0054}, /* 1E6C */ - {0x1E6E,0x1E6F,0x0054}, {0x1E6E,0x1E6F,0x0054}, /* 1E6E */ - {0x1E70,0x1E71,0x0054}, {0x1E70,0x1E71,0x0054}, /* 1E70 */ - {0x1E72,0x1E73,0x0055}, {0x1E72,0x1E73,0x0055}, /* 1E72 */ - {0x1E74,0x1E75,0x0055}, {0x1E74,0x1E75,0x0055}, /* 1E74 */ - {0x1E76,0x1E77,0x0055}, {0x1E76,0x1E77,0x0055}, /* 1E76 */ - {0x1E78,0x1E79,0x0055}, {0x1E78,0x1E79,0x0055}, /* 1E78 */ - {0x1E7A,0x1E7B,0x0055}, {0x1E7A,0x1E7B,0x0055}, /* 1E7A */ - {0x1E7C,0x1E7D,0x0056}, {0x1E7C,0x1E7D,0x0056}, /* 1E7C */ - {0x1E7E,0x1E7F,0x0056}, {0x1E7E,0x1E7F,0x0056}, /* 1E7E */ - {0x1E80,0x1E81,0x0057}, {0x1E80,0x1E81,0x0057}, /* 1E80 */ - {0x1E82,0x1E83,0x0057}, {0x1E82,0x1E83,0x0057}, /* 1E82 */ - {0x1E84,0x1E85,0x0057}, {0x1E84,0x1E85,0x0057}, /* 1E84 */ - {0x1E86,0x1E87,0x0057}, {0x1E86,0x1E87,0x0057}, /* 1E86 */ - {0x1E88,0x1E89,0x0057}, {0x1E88,0x1E89,0x0057}, /* 1E88 */ - {0x1E8A,0x1E8B,0x0058}, {0x1E8A,0x1E8B,0x0058}, /* 1E8A */ - {0x1E8C,0x1E8D,0x0058}, {0x1E8C,0x1E8D,0x0058}, /* 1E8C */ - {0x1E8E,0x1E8F,0x0059}, {0x1E8E,0x1E8F,0x0059}, /* 1E8E */ - {0x1E90,0x1E91,0x005A}, {0x1E90,0x1E91,0x005A}, /* 1E90 */ - {0x1E92,0x1E93,0x005A}, {0x1E92,0x1E93,0x005A}, /* 1E92 */ - {0x1E94,0x1E95,0x005A}, {0x1E94,0x1E95,0x005A}, /* 1E94 */ - {0x1E96,0x1E96,0x0048}, {0x1E97,0x1E97,0x0054}, /* 1E96 */ - {0x1E98,0x1E98,0x0057}, {0x1E99,0x1E99,0x0059}, /* 1E98 */ - {0x1E9A,0x1E9A,0x1E9A}, {0x1E60,0x1E9B,0x0053}, /* 1E9A */ - {0x1E9C,0x1E9C,0x1E9C}, {0x1E9D,0x1E9D,0x1E9D}, /* 1E9C */ - {0x1E9E,0x00DF,0x1E9E}, {0x1E9F,0x1E9F,0x1E9F}, /* 1E9E */ - {0x1EA0,0x1EA1,0x0041}, {0x1EA0,0x1EA1,0x0041}, /* 1EA0 */ - {0x1EA2,0x1EA3,0x0041}, {0x1EA2,0x1EA3,0x0041}, /* 1EA2 */ - {0x1EA4,0x1EA5,0x0041}, {0x1EA4,0x1EA5,0x0041}, /* 1EA4 */ - {0x1EA6,0x1EA7,0x0041}, {0x1EA6,0x1EA7,0x0041}, /* 1EA6 */ - {0x1EA8,0x1EA9,0x0041}, {0x1EA8,0x1EA9,0x0041}, /* 1EA8 */ - {0x1EAA,0x1EAB,0x0041}, {0x1EAA,0x1EAB,0x0041}, /* 1EAA */ - {0x1EAC,0x1EAD,0x0041}, {0x1EAC,0x1EAD,0x0041}, /* 1EAC */ - {0x1EAE,0x1EAF,0x0041}, {0x1EAE,0x1EAF,0x0041}, /* 1EAE */ - {0x1EB0,0x1EB1,0x0041}, {0x1EB0,0x1EB1,0x0041}, /* 1EB0 */ - {0x1EB2,0x1EB3,0x0041}, {0x1EB2,0x1EB3,0x0041}, /* 1EB2 */ - {0x1EB4,0x1EB5,0x0041}, {0x1EB4,0x1EB5,0x0041}, /* 1EB4 */ - {0x1EB6,0x1EB7,0x0041}, {0x1EB6,0x1EB7,0x0041}, /* 1EB6 */ - {0x1EB8,0x1EB9,0x0045}, {0x1EB8,0x1EB9,0x0045}, /* 1EB8 */ - {0x1EBA,0x1EBB,0x0045}, {0x1EBA,0x1EBB,0x0045}, /* 1EBA */ - {0x1EBC,0x1EBD,0x0045}, {0x1EBC,0x1EBD,0x0045}, /* 1EBC */ - {0x1EBE,0x1EBF,0x0045}, {0x1EBE,0x1EBF,0x0045}, /* 1EBE */ - {0x1EC0,0x1EC1,0x0045}, {0x1EC0,0x1EC1,0x0045}, /* 1EC0 */ - {0x1EC2,0x1EC3,0x0045}, {0x1EC2,0x1EC3,0x0045}, /* 1EC2 */ - {0x1EC4,0x1EC5,0x0045}, {0x1EC4,0x1EC5,0x0045}, /* 1EC4 */ - {0x1EC6,0x1EC7,0x0045}, {0x1EC6,0x1EC7,0x0045}, /* 1EC6 */ - {0x1EC8,0x1EC9,0x0049}, {0x1EC8,0x1EC9,0x0049}, /* 1EC8 */ - {0x1ECA,0x1ECB,0x0049}, {0x1ECA,0x1ECB,0x0049}, /* 1ECA */ - {0x1ECC,0x1ECD,0x004F}, {0x1ECC,0x1ECD,0x004F}, /* 1ECC */ - {0x1ECE,0x1ECF,0x004F}, {0x1ECE,0x1ECF,0x004F}, /* 1ECE */ - {0x1ED0,0x1ED1,0x004F}, {0x1ED0,0x1ED1,0x004F}, /* 1ED0 */ - {0x1ED2,0x1ED3,0x004F}, {0x1ED2,0x1ED3,0x004F}, /* 1ED2 */ - {0x1ED4,0x1ED5,0x004F}, {0x1ED4,0x1ED5,0x004F}, /* 1ED4 */ - {0x1ED6,0x1ED7,0x004F}, {0x1ED6,0x1ED7,0x004F}, /* 1ED6 */ - {0x1ED8,0x1ED9,0x004F}, {0x1ED8,0x1ED9,0x004F}, /* 1ED8 */ - {0x1EDA,0x1EDB,0x004F}, {0x1EDA,0x1EDB,0x004F}, /* 1EDA */ - {0x1EDC,0x1EDD,0x004F}, {0x1EDC,0x1EDD,0x004F}, /* 1EDC */ - {0x1EDE,0x1EDF,0x004F}, {0x1EDE,0x1EDF,0x004F}, /* 1EDE */ - {0x1EE0,0x1EE1,0x004F}, {0x1EE0,0x1EE1,0x004F}, /* 1EE0 */ - {0x1EE2,0x1EE3,0x004F}, {0x1EE2,0x1EE3,0x004F}, /* 1EE2 */ - {0x1EE4,0x1EE5,0x0055}, {0x1EE4,0x1EE5,0x0055}, /* 1EE4 */ - {0x1EE6,0x1EE7,0x0055}, {0x1EE6,0x1EE7,0x0055}, /* 1EE6 */ - {0x1EE8,0x1EE9,0x0055}, {0x1EE8,0x1EE9,0x0055}, /* 1EE8 */ - {0x1EEA,0x1EEB,0x0055}, {0x1EEA,0x1EEB,0x0055}, /* 1EEA */ - {0x1EEC,0x1EED,0x0055}, {0x1EEC,0x1EED,0x0055}, /* 1EEC */ - {0x1EEE,0x1EEF,0x0055}, {0x1EEE,0x1EEF,0x0055}, /* 1EEE */ - {0x1EF0,0x1EF1,0x0055}, {0x1EF0,0x1EF1,0x0055}, /* 1EF0 */ - {0x1EF2,0x1EF3,0x0059}, {0x1EF2,0x1EF3,0x0059}, /* 1EF2 */ - {0x1EF4,0x1EF5,0x0059}, {0x1EF4,0x1EF5,0x0059}, /* 1EF4 */ - {0x1EF6,0x1EF7,0x0059}, {0x1EF6,0x1EF7,0x0059}, /* 1EF6 */ - {0x1EF8,0x1EF9,0x0059}, {0x1EF8,0x1EF9,0x0059}, /* 1EF8 */ - {0x1EFA,0x1EFB,0x1EFA}, {0x1EFA,0x1EFB,0x1EFA}, /* 1EFA */ - {0x1EFC,0x1EFD,0x1EFC}, {0x1EFC,0x1EFD,0x1EFC}, /* 1EFC */ - {0x1EFE,0x1EFF,0x1EFE}, {0x1EFE,0x1EFF,0x1EFE} /* 1EFE */ -}; - -static MY_UNICASE_CHARACTER u520p1F[]={ - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, /* 1F00 */ - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, /* 1F02 */ - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, /* 1F04 */ - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, /* 1F06 */ - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, /* 1F08 */ - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, /* 1F0A */ - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, /* 1F0C */ - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, /* 1F0E */ - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, /* 1F10 */ - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, /* 1F12 */ - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, /* 1F14 */ - {0x1F16,0x1F16,0x1F16}, {0x1F17,0x1F17,0x1F17}, /* 1F16 */ - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, /* 1F18 */ - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, /* 1F1A */ - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, /* 1F1C */ - {0x1F1E,0x1F1E,0x1F1E}, {0x1F1F,0x1F1F,0x1F1F}, /* 1F1E */ - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, /* 1F20 */ - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, /* 1F22 */ - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, /* 1F24 */ - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, /* 1F26 */ - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, /* 1F28 */ - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, /* 1F2A */ - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, /* 1F2C */ - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, /* 1F2E */ - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, /* 1F30 */ - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, /* 1F32 */ - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, /* 1F34 */ - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, /* 1F36 */ - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, /* 1F38 */ - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, /* 1F3A */ - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, /* 1F3C */ - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, /* 1F3E */ - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, /* 1F40 */ - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, /* 1F42 */ - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, /* 1F44 */ - {0x1F46,0x1F46,0x1F46}, {0x1F47,0x1F47,0x1F47}, /* 1F46 */ - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, /* 1F48 */ - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, /* 1F4A */ - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, /* 1F4C */ - {0x1F4E,0x1F4E,0x1F4E}, {0x1F4F,0x1F4F,0x1F4F}, /* 1F4E */ - {0x1F50,0x1F50,0x03A5}, {0x1F59,0x1F51,0x03A5}, /* 1F50 */ - {0x1F52,0x1F52,0x03A5}, {0x1F5B,0x1F53,0x03A5}, /* 1F52 */ - {0x1F54,0x1F54,0x03A5}, {0x1F5D,0x1F55,0x03A5}, /* 1F54 */ - {0x1F56,0x1F56,0x03A5}, {0x1F5F,0x1F57,0x03A5}, /* 1F56 */ - {0x1F58,0x1F58,0x1F58}, {0x1F59,0x1F51,0x03A5}, /* 1F58 */ - {0x1F5A,0x1F5A,0x1F5A}, {0x1F5B,0x1F53,0x03A5}, /* 1F5A */ - {0x1F5C,0x1F5C,0x1F5C}, {0x1F5D,0x1F55,0x03A5}, /* 1F5C */ - {0x1F5E,0x1F5E,0x1F5E}, {0x1F5F,0x1F57,0x03A5}, /* 1F5E */ - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, /* 1F60 */ - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, /* 1F62 */ - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, /* 1F64 */ - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, /* 1F66 */ - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, /* 1F68 */ - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, /* 1F6A */ - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, /* 1F6C */ - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, /* 1F6E */ - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, /* 1F70 */ - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, /* 1F72 */ - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, /* 1F74 */ - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, /* 1F76 */ - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, /* 1F78 */ - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, /* 1F7A */ - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, /* 1F7C */ - {0x1F7E,0x1F7E,0x1F7E}, {0x1F7F,0x1F7F,0x1F7F}, /* 1F7E */ - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, /* 1F80 */ - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, /* 1F82 */ - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, /* 1F84 */ - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, /* 1F86 */ - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, /* 1F88 */ - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, /* 1F8A */ - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, /* 1F8C */ - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, /* 1F8E */ - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, /* 1F90 */ - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, /* 1F92 */ - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, /* 1F94 */ - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, /* 1F96 */ - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, /* 1F98 */ - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, /* 1F9A */ - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, /* 1F9C */ - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, /* 1F9E */ - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, /* 1FA0 */ - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, /* 1FA2 */ - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, /* 1FA4 */ - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, /* 1FA6 */ - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, /* 1FA8 */ - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, /* 1FAA */ - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, /* 1FAC */ - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, /* 1FAE */ - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, /* 1FB0 */ - {0x1FB2,0x1FB2,0x0391}, {0x1FBC,0x1FB3,0x0391}, /* 1FB2 */ - {0x1FB4,0x1FB4,0x0391}, {0x1FB5,0x1FB5,0x1FB5}, /* 1FB4 */ - {0x1FB6,0x1FB6,0x0391}, {0x1FB7,0x1FB7,0x0391}, /* 1FB6 */ - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, /* 1FB8 */ - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, /* 1FBA */ - {0x1FBC,0x1FB3,0x0391}, {0x1FBD,0x1FBD,0x1FBD}, /* 1FBC */ - {0x0399,0x1FBE,0x0399}, {0x1FBF,0x1FBF,0x1FBF}, /* 1FBE */ - {0x1FC0,0x1FC0,0x1FC0}, {0x1FC1,0x1FC1,0x1FC1}, /* 1FC0 */ - {0x1FC2,0x1FC2,0x0397}, {0x1FCC,0x1FC3,0x0397}, /* 1FC2 */ - {0x1FC4,0x1FC4,0x0397}, {0x1FC5,0x1FC5,0x1FC5}, /* 1FC4 */ - {0x1FC6,0x1FC6,0x0397}, {0x1FC7,0x1FC7,0x0397}, /* 1FC6 */ - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, /* 1FC8 */ - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, /* 1FCA */ - {0x1FCC,0x1FC3,0x0397}, {0x1FCD,0x1FCD,0x1FCD}, /* 1FCC */ - {0x1FCE,0x1FCE,0x1FCE}, {0x1FCF,0x1FCF,0x1FCF}, /* 1FCE */ - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, /* 1FD0 */ - {0x1FD2,0x1FD2,0x0399}, {0x1FD3,0x1FD3,0x1FD3}, /* 1FD2 */ - {0x1FD4,0x1FD4,0x1FD4}, {0x1FD5,0x1FD5,0x1FD5}, /* 1FD4 */ - {0x1FD6,0x1FD6,0x0399}, {0x1FD7,0x1FD7,0x0399}, /* 1FD6 */ - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, /* 1FD8 */ - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, /* 1FDA */ - {0x1FDC,0x1FDC,0x1FDC}, {0x1FDD,0x1FDD,0x1FDD}, /* 1FDC */ - {0x1FDE,0x1FDE,0x1FDE}, {0x1FDF,0x1FDF,0x1FDF}, /* 1FDE */ - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, /* 1FE0 */ - {0x1FE2,0x1FE2,0x03A5}, {0x1FE3,0x1FE3,0x1FE3}, /* 1FE2 */ - {0x1FE4,0x1FE4,0x03A1}, {0x1FEC,0x1FE5,0x03A1}, /* 1FE4 */ - {0x1FE6,0x1FE6,0x03A5}, {0x1FE7,0x1FE7,0x03A5}, /* 1FE6 */ - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, /* 1FE8 */ - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, /* 1FEA */ - {0x1FEC,0x1FE5,0x03A1}, {0x1FED,0x1FED,0x1FED}, /* 1FEC */ - {0x1FEE,0x1FEE,0x1FEE}, {0x1FEF,0x1FEF,0x1FEF}, /* 1FEE */ - {0x1FF0,0x1FF0,0x1FF0}, {0x1FF1,0x1FF1,0x1FF1}, /* 1FF0 */ - {0x1FF2,0x1FF2,0x03A9}, {0x1FFC,0x1FF3,0x03A9}, /* 1FF2 */ - {0x1FF4,0x1FF4,0x03A9}, {0x1FF5,0x1FF5,0x1FF5}, /* 1FF4 */ - {0x1FF6,0x1FF6,0x03A9}, {0x1FF7,0x1FF7,0x03A9}, /* 1FF6 */ - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, /* 1FF8 */ - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, /* 1FFA */ - {0x1FFC,0x1FF3,0x03A9}, {0x1FFD,0x1FFD,0x1FFD}, /* 1FFC */ - {0x1FFE,0x1FFE,0x1FFE}, {0x1FFF,0x1FFF,0x1FFF} /* 1FFE */ -}; - -static MY_UNICASE_CHARACTER u520p21[]={ - {0x2100,0x2100,0x2100}, {0x2101,0x2101,0x2101}, /* 2100 */ - {0x2102,0x2102,0x2102}, {0x2103,0x2103,0x2103}, /* 2102 */ - {0x2104,0x2104,0x2104}, {0x2105,0x2105,0x2105}, /* 2104 */ - {0x2106,0x2106,0x2106}, {0x2107,0x2107,0x2107}, /* 2106 */ - {0x2108,0x2108,0x2108}, {0x2109,0x2109,0x2109}, /* 2108 */ - {0x210A,0x210A,0x210A}, {0x210B,0x210B,0x210B}, /* 210A */ - {0x210C,0x210C,0x210C}, {0x210D,0x210D,0x210D}, /* 210C */ - {0x210E,0x210E,0x210E}, {0x210F,0x210F,0x210F}, /* 210E */ - {0x2110,0x2110,0x2110}, {0x2111,0x2111,0x2111}, /* 2110 */ - {0x2112,0x2112,0x2112}, {0x2113,0x2113,0x2113}, /* 2112 */ - {0x2114,0x2114,0x2114}, {0x2115,0x2115,0x2115}, /* 2114 */ - {0x2116,0x2116,0x2116}, {0x2117,0x2117,0x2117}, /* 2116 */ - {0x2118,0x2118,0x2118}, {0x2119,0x2119,0x2119}, /* 2118 */ - {0x211A,0x211A,0x211A}, {0x211B,0x211B,0x211B}, /* 211A */ - {0x211C,0x211C,0x211C}, {0x211D,0x211D,0x211D}, /* 211C */ - {0x211E,0x211E,0x211E}, {0x211F,0x211F,0x211F}, /* 211E */ - {0x2120,0x2120,0x2120}, {0x2121,0x2121,0x2121}, /* 2120 */ - {0x2122,0x2122,0x2122}, {0x2123,0x2123,0x2123}, /* 2122 */ - {0x2124,0x2124,0x2124}, {0x2125,0x2125,0x2125}, /* 2124 */ - {0x2126,0x03C9,0x2126}, {0x2127,0x2127,0x2127}, /* 2126 */ - {0x2128,0x2128,0x2128}, {0x2129,0x2129,0x2129}, /* 2128 */ - {0x212A,0x006B,0x212A}, {0x212B,0x00E5,0x212B}, /* 212A */ - {0x212C,0x212C,0x212C}, {0x212D,0x212D,0x212D}, /* 212C */ - {0x212E,0x212E,0x212E}, {0x212F,0x212F,0x212F}, /* 212E */ - {0x2130,0x2130,0x2130}, {0x2131,0x2131,0x2131}, /* 2130 */ - {0x2132,0x214E,0x2132}, {0x2133,0x2133,0x2133}, /* 2132 */ - {0x2134,0x2134,0x2134}, {0x2135,0x2135,0x2135}, /* 2134 */ - {0x2136,0x2136,0x2136}, {0x2137,0x2137,0x2137}, /* 2136 */ - {0x2138,0x2138,0x2138}, {0x2139,0x2139,0x2139}, /* 2138 */ - {0x213A,0x213A,0x213A}, {0x213B,0x213B,0x213B}, /* 213A */ - {0x213C,0x213C,0x213C}, {0x213D,0x213D,0x213D}, /* 213C */ - {0x213E,0x213E,0x213E}, {0x213F,0x213F,0x213F}, /* 213E */ - {0x2140,0x2140,0x2140}, {0x2141,0x2141,0x2141}, /* 2140 */ - {0x2142,0x2142,0x2142}, {0x2143,0x2143,0x2143}, /* 2142 */ - {0x2144,0x2144,0x2144}, {0x2145,0x2145,0x2145}, /* 2144 */ - {0x2146,0x2146,0x2146}, {0x2147,0x2147,0x2147}, /* 2146 */ - {0x2148,0x2148,0x2148}, {0x2149,0x2149,0x2149}, /* 2148 */ - {0x214A,0x214A,0x214A}, {0x214B,0x214B,0x214B}, /* 214A */ - {0x214C,0x214C,0x214C}, {0x214D,0x214D,0x214D}, /* 214C */ - {0x2132,0x214E,0x2132}, {0x214F,0x214F,0x214F}, /* 214E */ - {0x2150,0x2150,0x2150}, {0x2151,0x2151,0x2151}, /* 2150 */ - {0x2152,0x2152,0x2152}, {0x2153,0x2153,0x2153}, /* 2152 */ - {0x2154,0x2154,0x2154}, {0x2155,0x2155,0x2155}, /* 2154 */ - {0x2156,0x2156,0x2156}, {0x2157,0x2157,0x2157}, /* 2156 */ - {0x2158,0x2158,0x2158}, {0x2159,0x2159,0x2159}, /* 2158 */ - {0x215A,0x215A,0x215A}, {0x215B,0x215B,0x215B}, /* 215A */ - {0x215C,0x215C,0x215C}, {0x215D,0x215D,0x215D}, /* 215C */ - {0x215E,0x215E,0x215E}, {0x215F,0x215F,0x215F}, /* 215E */ - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, /* 2160 */ - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, /* 2162 */ - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, /* 2164 */ - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, /* 2166 */ - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, /* 2168 */ - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, /* 216A */ - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, /* 216C */ - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, /* 216E */ - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, /* 2170 */ - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, /* 2172 */ - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, /* 2174 */ - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, /* 2176 */ - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, /* 2178 */ - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, /* 217A */ - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, /* 217C */ - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, /* 217E */ - {0x2180,0x2180,0x2180}, {0x2181,0x2181,0x2181}, /* 2180 */ - {0x2182,0x2182,0x2182}, {0x2183,0x2184,0x2183}, /* 2182 */ - {0x2183,0x2184,0x2183}, {0x2185,0x2185,0x2185}, /* 2184 */ - {0x2186,0x2186,0x2186}, {0x2187,0x2187,0x2187}, /* 2186 */ - {0x2188,0x2188,0x2188}, {0x2189,0x2189,0x2189}, /* 2188 */ - {0x218A,0x218A,0x218A}, {0x218B,0x218B,0x218B}, /* 218A */ - {0x218C,0x218C,0x218C}, {0x218D,0x218D,0x218D}, /* 218C */ - {0x218E,0x218E,0x218E}, {0x218F,0x218F,0x218F}, /* 218E */ - {0x2190,0x2190,0x2190}, {0x2191,0x2191,0x2191}, /* 2190 */ - {0x2192,0x2192,0x2192}, {0x2193,0x2193,0x2193}, /* 2192 */ - {0x2194,0x2194,0x2194}, {0x2195,0x2195,0x2195}, /* 2194 */ - {0x2196,0x2196,0x2196}, {0x2197,0x2197,0x2197}, /* 2196 */ - {0x2198,0x2198,0x2198}, {0x2199,0x2199,0x2199}, /* 2198 */ - {0x219A,0x219A,0x219A}, {0x219B,0x219B,0x219B}, /* 219A */ - {0x219C,0x219C,0x219C}, {0x219D,0x219D,0x219D}, /* 219C */ - {0x219E,0x219E,0x219E}, {0x219F,0x219F,0x219F}, /* 219E */ - {0x21A0,0x21A0,0x21A0}, {0x21A1,0x21A1,0x21A1}, /* 21A0 */ - {0x21A2,0x21A2,0x21A2}, {0x21A3,0x21A3,0x21A3}, /* 21A2 */ - {0x21A4,0x21A4,0x21A4}, {0x21A5,0x21A5,0x21A5}, /* 21A4 */ - {0x21A6,0x21A6,0x21A6}, {0x21A7,0x21A7,0x21A7}, /* 21A6 */ - {0x21A8,0x21A8,0x21A8}, {0x21A9,0x21A9,0x21A9}, /* 21A8 */ - {0x21AA,0x21AA,0x21AA}, {0x21AB,0x21AB,0x21AB}, /* 21AA */ - {0x21AC,0x21AC,0x21AC}, {0x21AD,0x21AD,0x21AD}, /* 21AC */ - {0x21AE,0x21AE,0x21AE}, {0x21AF,0x21AF,0x21AF}, /* 21AE */ - {0x21B0,0x21B0,0x21B0}, {0x21B1,0x21B1,0x21B1}, /* 21B0 */ - {0x21B2,0x21B2,0x21B2}, {0x21B3,0x21B3,0x21B3}, /* 21B2 */ - {0x21B4,0x21B4,0x21B4}, {0x21B5,0x21B5,0x21B5}, /* 21B4 */ - {0x21B6,0x21B6,0x21B6}, {0x21B7,0x21B7,0x21B7}, /* 21B6 */ - {0x21B8,0x21B8,0x21B8}, {0x21B9,0x21B9,0x21B9}, /* 21B8 */ - {0x21BA,0x21BA,0x21BA}, {0x21BB,0x21BB,0x21BB}, /* 21BA */ - {0x21BC,0x21BC,0x21BC}, {0x21BD,0x21BD,0x21BD}, /* 21BC */ - {0x21BE,0x21BE,0x21BE}, {0x21BF,0x21BF,0x21BF}, /* 21BE */ - {0x21C0,0x21C0,0x21C0}, {0x21C1,0x21C1,0x21C1}, /* 21C0 */ - {0x21C2,0x21C2,0x21C2}, {0x21C3,0x21C3,0x21C3}, /* 21C2 */ - {0x21C4,0x21C4,0x21C4}, {0x21C5,0x21C5,0x21C5}, /* 21C4 */ - {0x21C6,0x21C6,0x21C6}, {0x21C7,0x21C7,0x21C7}, /* 21C6 */ - {0x21C8,0x21C8,0x21C8}, {0x21C9,0x21C9,0x21C9}, /* 21C8 */ - {0x21CA,0x21CA,0x21CA}, {0x21CB,0x21CB,0x21CB}, /* 21CA */ - {0x21CC,0x21CC,0x21CC}, {0x21CD,0x21CD,0x21CD}, /* 21CC */ - {0x21CE,0x21CE,0x21CE}, {0x21CF,0x21CF,0x21CF}, /* 21CE */ - {0x21D0,0x21D0,0x21D0}, {0x21D1,0x21D1,0x21D1}, /* 21D0 */ - {0x21D2,0x21D2,0x21D2}, {0x21D3,0x21D3,0x21D3}, /* 21D2 */ - {0x21D4,0x21D4,0x21D4}, {0x21D5,0x21D5,0x21D5}, /* 21D4 */ - {0x21D6,0x21D6,0x21D6}, {0x21D7,0x21D7,0x21D7}, /* 21D6 */ - {0x21D8,0x21D8,0x21D8}, {0x21D9,0x21D9,0x21D9}, /* 21D8 */ - {0x21DA,0x21DA,0x21DA}, {0x21DB,0x21DB,0x21DB}, /* 21DA */ - {0x21DC,0x21DC,0x21DC}, {0x21DD,0x21DD,0x21DD}, /* 21DC */ - {0x21DE,0x21DE,0x21DE}, {0x21DF,0x21DF,0x21DF}, /* 21DE */ - {0x21E0,0x21E0,0x21E0}, {0x21E1,0x21E1,0x21E1}, /* 21E0 */ - {0x21E2,0x21E2,0x21E2}, {0x21E3,0x21E3,0x21E3}, /* 21E2 */ - {0x21E4,0x21E4,0x21E4}, {0x21E5,0x21E5,0x21E5}, /* 21E4 */ - {0x21E6,0x21E6,0x21E6}, {0x21E7,0x21E7,0x21E7}, /* 21E6 */ - {0x21E8,0x21E8,0x21E8}, {0x21E9,0x21E9,0x21E9}, /* 21E8 */ - {0x21EA,0x21EA,0x21EA}, {0x21EB,0x21EB,0x21EB}, /* 21EA */ - {0x21EC,0x21EC,0x21EC}, {0x21ED,0x21ED,0x21ED}, /* 21EC */ - {0x21EE,0x21EE,0x21EE}, {0x21EF,0x21EF,0x21EF}, /* 21EE */ - {0x21F0,0x21F0,0x21F0}, {0x21F1,0x21F1,0x21F1}, /* 21F0 */ - {0x21F2,0x21F2,0x21F2}, {0x21F3,0x21F3,0x21F3}, /* 21F2 */ - {0x21F4,0x21F4,0x21F4}, {0x21F5,0x21F5,0x21F5}, /* 21F4 */ - {0x21F6,0x21F6,0x21F6}, {0x21F7,0x21F7,0x21F7}, /* 21F6 */ - {0x21F8,0x21F8,0x21F8}, {0x21F9,0x21F9,0x21F9}, /* 21F8 */ - {0x21FA,0x21FA,0x21FA}, {0x21FB,0x21FB,0x21FB}, /* 21FA */ - {0x21FC,0x21FC,0x21FC}, {0x21FD,0x21FD,0x21FD}, /* 21FC */ - {0x21FE,0x21FE,0x21FE}, {0x21FF,0x21FF,0x21FF} /* 21FE */ -}; - -static MY_UNICASE_CHARACTER u520p24[]={ - {0x2400,0x2400,0x2400}, {0x2401,0x2401,0x2401}, /* 2400 */ - {0x2402,0x2402,0x2402}, {0x2403,0x2403,0x2403}, /* 2402 */ - {0x2404,0x2404,0x2404}, {0x2405,0x2405,0x2405}, /* 2404 */ - {0x2406,0x2406,0x2406}, {0x2407,0x2407,0x2407}, /* 2406 */ - {0x2408,0x2408,0x2408}, {0x2409,0x2409,0x2409}, /* 2408 */ - {0x240A,0x240A,0x240A}, {0x240B,0x240B,0x240B}, /* 240A */ - {0x240C,0x240C,0x240C}, {0x240D,0x240D,0x240D}, /* 240C */ - {0x240E,0x240E,0x240E}, {0x240F,0x240F,0x240F}, /* 240E */ - {0x2410,0x2410,0x2410}, {0x2411,0x2411,0x2411}, /* 2410 */ - {0x2412,0x2412,0x2412}, {0x2413,0x2413,0x2413}, /* 2412 */ - {0x2414,0x2414,0x2414}, {0x2415,0x2415,0x2415}, /* 2414 */ - {0x2416,0x2416,0x2416}, {0x2417,0x2417,0x2417}, /* 2416 */ - {0x2418,0x2418,0x2418}, {0x2419,0x2419,0x2419}, /* 2418 */ - {0x241A,0x241A,0x241A}, {0x241B,0x241B,0x241B}, /* 241A */ - {0x241C,0x241C,0x241C}, {0x241D,0x241D,0x241D}, /* 241C */ - {0x241E,0x241E,0x241E}, {0x241F,0x241F,0x241F}, /* 241E */ - {0x2420,0x2420,0x2420}, {0x2421,0x2421,0x2421}, /* 2420 */ - {0x2422,0x2422,0x2422}, {0x2423,0x2423,0x2423}, /* 2422 */ - {0x2424,0x2424,0x2424}, {0x2425,0x2425,0x2425}, /* 2424 */ - {0x2426,0x2426,0x2426}, {0x2427,0x2427,0x2427}, /* 2426 */ - {0x2428,0x2428,0x2428}, {0x2429,0x2429,0x2429}, /* 2428 */ - {0x242A,0x242A,0x242A}, {0x242B,0x242B,0x242B}, /* 242A */ - {0x242C,0x242C,0x242C}, {0x242D,0x242D,0x242D}, /* 242C */ - {0x242E,0x242E,0x242E}, {0x242F,0x242F,0x242F}, /* 242E */ - {0x2430,0x2430,0x2430}, {0x2431,0x2431,0x2431}, /* 2430 */ - {0x2432,0x2432,0x2432}, {0x2433,0x2433,0x2433}, /* 2432 */ - {0x2434,0x2434,0x2434}, {0x2435,0x2435,0x2435}, /* 2434 */ - {0x2436,0x2436,0x2436}, {0x2437,0x2437,0x2437}, /* 2436 */ - {0x2438,0x2438,0x2438}, {0x2439,0x2439,0x2439}, /* 2438 */ - {0x243A,0x243A,0x243A}, {0x243B,0x243B,0x243B}, /* 243A */ - {0x243C,0x243C,0x243C}, {0x243D,0x243D,0x243D}, /* 243C */ - {0x243E,0x243E,0x243E}, {0x243F,0x243F,0x243F}, /* 243E */ - {0x2440,0x2440,0x2440}, {0x2441,0x2441,0x2441}, /* 2440 */ - {0x2442,0x2442,0x2442}, {0x2443,0x2443,0x2443}, /* 2442 */ - {0x2444,0x2444,0x2444}, {0x2445,0x2445,0x2445}, /* 2444 */ - {0x2446,0x2446,0x2446}, {0x2447,0x2447,0x2447}, /* 2446 */ - {0x2448,0x2448,0x2448}, {0x2449,0x2449,0x2449}, /* 2448 */ - {0x244A,0x244A,0x244A}, {0x244B,0x244B,0x244B}, /* 244A */ - {0x244C,0x244C,0x244C}, {0x244D,0x244D,0x244D}, /* 244C */ - {0x244E,0x244E,0x244E}, {0x244F,0x244F,0x244F}, /* 244E */ - {0x2450,0x2450,0x2450}, {0x2451,0x2451,0x2451}, /* 2450 */ - {0x2452,0x2452,0x2452}, {0x2453,0x2453,0x2453}, /* 2452 */ - {0x2454,0x2454,0x2454}, {0x2455,0x2455,0x2455}, /* 2454 */ - {0x2456,0x2456,0x2456}, {0x2457,0x2457,0x2457}, /* 2456 */ - {0x2458,0x2458,0x2458}, {0x2459,0x2459,0x2459}, /* 2458 */ - {0x245A,0x245A,0x245A}, {0x245B,0x245B,0x245B}, /* 245A */ - {0x245C,0x245C,0x245C}, {0x245D,0x245D,0x245D}, /* 245C */ - {0x245E,0x245E,0x245E}, {0x245F,0x245F,0x245F}, /* 245E */ - {0x2460,0x2460,0x2460}, {0x2461,0x2461,0x2461}, /* 2460 */ - {0x2462,0x2462,0x2462}, {0x2463,0x2463,0x2463}, /* 2462 */ - {0x2464,0x2464,0x2464}, {0x2465,0x2465,0x2465}, /* 2464 */ - {0x2466,0x2466,0x2466}, {0x2467,0x2467,0x2467}, /* 2466 */ - {0x2468,0x2468,0x2468}, {0x2469,0x2469,0x2469}, /* 2468 */ - {0x246A,0x246A,0x246A}, {0x246B,0x246B,0x246B}, /* 246A */ - {0x246C,0x246C,0x246C}, {0x246D,0x246D,0x246D}, /* 246C */ - {0x246E,0x246E,0x246E}, {0x246F,0x246F,0x246F}, /* 246E */ - {0x2470,0x2470,0x2470}, {0x2471,0x2471,0x2471}, /* 2470 */ - {0x2472,0x2472,0x2472}, {0x2473,0x2473,0x2473}, /* 2472 */ - {0x2474,0x2474,0x2474}, {0x2475,0x2475,0x2475}, /* 2474 */ - {0x2476,0x2476,0x2476}, {0x2477,0x2477,0x2477}, /* 2476 */ - {0x2478,0x2478,0x2478}, {0x2479,0x2479,0x2479}, /* 2478 */ - {0x247A,0x247A,0x247A}, {0x247B,0x247B,0x247B}, /* 247A */ - {0x247C,0x247C,0x247C}, {0x247D,0x247D,0x247D}, /* 247C */ - {0x247E,0x247E,0x247E}, {0x247F,0x247F,0x247F}, /* 247E */ - {0x2480,0x2480,0x2480}, {0x2481,0x2481,0x2481}, /* 2480 */ - {0x2482,0x2482,0x2482}, {0x2483,0x2483,0x2483}, /* 2482 */ - {0x2484,0x2484,0x2484}, {0x2485,0x2485,0x2485}, /* 2484 */ - {0x2486,0x2486,0x2486}, {0x2487,0x2487,0x2487}, /* 2486 */ - {0x2488,0x2488,0x2488}, {0x2489,0x2489,0x2489}, /* 2488 */ - {0x248A,0x248A,0x248A}, {0x248B,0x248B,0x248B}, /* 248A */ - {0x248C,0x248C,0x248C}, {0x248D,0x248D,0x248D}, /* 248C */ - {0x248E,0x248E,0x248E}, {0x248F,0x248F,0x248F}, /* 248E */ - {0x2490,0x2490,0x2490}, {0x2491,0x2491,0x2491}, /* 2490 */ - {0x2492,0x2492,0x2492}, {0x2493,0x2493,0x2493}, /* 2492 */ - {0x2494,0x2494,0x2494}, {0x2495,0x2495,0x2495}, /* 2494 */ - {0x2496,0x2496,0x2496}, {0x2497,0x2497,0x2497}, /* 2496 */ - {0x2498,0x2498,0x2498}, {0x2499,0x2499,0x2499}, /* 2498 */ - {0x249A,0x249A,0x249A}, {0x249B,0x249B,0x249B}, /* 249A */ - {0x249C,0x249C,0x249C}, {0x249D,0x249D,0x249D}, /* 249C */ - {0x249E,0x249E,0x249E}, {0x249F,0x249F,0x249F}, /* 249E */ - {0x24A0,0x24A0,0x24A0}, {0x24A1,0x24A1,0x24A1}, /* 24A0 */ - {0x24A2,0x24A2,0x24A2}, {0x24A3,0x24A3,0x24A3}, /* 24A2 */ - {0x24A4,0x24A4,0x24A4}, {0x24A5,0x24A5,0x24A5}, /* 24A4 */ - {0x24A6,0x24A6,0x24A6}, {0x24A7,0x24A7,0x24A7}, /* 24A6 */ - {0x24A8,0x24A8,0x24A8}, {0x24A9,0x24A9,0x24A9}, /* 24A8 */ - {0x24AA,0x24AA,0x24AA}, {0x24AB,0x24AB,0x24AB}, /* 24AA */ - {0x24AC,0x24AC,0x24AC}, {0x24AD,0x24AD,0x24AD}, /* 24AC */ - {0x24AE,0x24AE,0x24AE}, {0x24AF,0x24AF,0x24AF}, /* 24AE */ - {0x24B0,0x24B0,0x24B0}, {0x24B1,0x24B1,0x24B1}, /* 24B0 */ - {0x24B2,0x24B2,0x24B2}, {0x24B3,0x24B3,0x24B3}, /* 24B2 */ - {0x24B4,0x24B4,0x24B4}, {0x24B5,0x24B5,0x24B5}, /* 24B4 */ - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, /* 24B6 */ - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, /* 24B8 */ - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, /* 24BA */ - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, /* 24BC */ - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, /* 24BE */ - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, /* 24C0 */ - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, /* 24C2 */ - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, /* 24C4 */ - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, /* 24C6 */ - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, /* 24C8 */ - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, /* 24CA */ - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, /* 24CC */ - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, /* 24CE */ - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, /* 24D0 */ - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, /* 24D2 */ - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, /* 24D4 */ - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, /* 24D6 */ - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, /* 24D8 */ - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, /* 24DA */ - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, /* 24DC */ - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, /* 24DE */ - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, /* 24E0 */ - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, /* 24E2 */ - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, /* 24E4 */ - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, /* 24E6 */ - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, /* 24E8 */ - {0x24EA,0x24EA,0x24EA}, {0x24EB,0x24EB,0x24EB}, /* 24EA */ - {0x24EC,0x24EC,0x24EC}, {0x24ED,0x24ED,0x24ED}, /* 24EC */ - {0x24EE,0x24EE,0x24EE}, {0x24EF,0x24EF,0x24EF}, /* 24EE */ - {0x24F0,0x24F0,0x24F0}, {0x24F1,0x24F1,0x24F1}, /* 24F0 */ - {0x24F2,0x24F2,0x24F2}, {0x24F3,0x24F3,0x24F3}, /* 24F2 */ - {0x24F4,0x24F4,0x24F4}, {0x24F5,0x24F5,0x24F5}, /* 24F4 */ - {0x24F6,0x24F6,0x24F6}, {0x24F7,0x24F7,0x24F7}, /* 24F6 */ - {0x24F8,0x24F8,0x24F8}, {0x24F9,0x24F9,0x24F9}, /* 24F8 */ - {0x24FA,0x24FA,0x24FA}, {0x24FB,0x24FB,0x24FB}, /* 24FA */ - {0x24FC,0x24FC,0x24FC}, {0x24FD,0x24FD,0x24FD}, /* 24FC */ - {0x24FE,0x24FE,0x24FE}, {0x24FF,0x24FF,0x24FF} /* 24FE */ -}; - -static MY_UNICASE_CHARACTER u520p2C[]={ - {0x2C00,0x2C30,0x2C00}, {0x2C01,0x2C31,0x2C01}, /* 2C00 */ - {0x2C02,0x2C32,0x2C02}, {0x2C03,0x2C33,0x2C03}, /* 2C02 */ - {0x2C04,0x2C34,0x2C04}, {0x2C05,0x2C35,0x2C05}, /* 2C04 */ - {0x2C06,0x2C36,0x2C06}, {0x2C07,0x2C37,0x2C07}, /* 2C06 */ - {0x2C08,0x2C38,0x2C08}, {0x2C09,0x2C39,0x2C09}, /* 2C08 */ - {0x2C0A,0x2C3A,0x2C0A}, {0x2C0B,0x2C3B,0x2C0B}, /* 2C0A */ - {0x2C0C,0x2C3C,0x2C0C}, {0x2C0D,0x2C3D,0x2C0D}, /* 2C0C */ - {0x2C0E,0x2C3E,0x2C0E}, {0x2C0F,0x2C3F,0x2C0F}, /* 2C0E */ - {0x2C10,0x2C40,0x2C10}, {0x2C11,0x2C41,0x2C11}, /* 2C10 */ - {0x2C12,0x2C42,0x2C12}, {0x2C13,0x2C43,0x2C13}, /* 2C12 */ - {0x2C14,0x2C44,0x2C14}, {0x2C15,0x2C45,0x2C15}, /* 2C14 */ - {0x2C16,0x2C46,0x2C16}, {0x2C17,0x2C47,0x2C17}, /* 2C16 */ - {0x2C18,0x2C48,0x2C18}, {0x2C19,0x2C49,0x2C19}, /* 2C18 */ - {0x2C1A,0x2C4A,0x2C1A}, {0x2C1B,0x2C4B,0x2C1B}, /* 2C1A */ - {0x2C1C,0x2C4C,0x2C1C}, {0x2C1D,0x2C4D,0x2C1D}, /* 2C1C */ - {0x2C1E,0x2C4E,0x2C1E}, {0x2C1F,0x2C4F,0x2C1F}, /* 2C1E */ - {0x2C20,0x2C50,0x2C20}, {0x2C21,0x2C51,0x2C21}, /* 2C20 */ - {0x2C22,0x2C52,0x2C22}, {0x2C23,0x2C53,0x2C23}, /* 2C22 */ - {0x2C24,0x2C54,0x2C24}, {0x2C25,0x2C55,0x2C25}, /* 2C24 */ - {0x2C26,0x2C56,0x2C26}, {0x2C27,0x2C57,0x2C27}, /* 2C26 */ - {0x2C28,0x2C58,0x2C28}, {0x2C29,0x2C59,0x2C29}, /* 2C28 */ - {0x2C2A,0x2C5A,0x2C2A}, {0x2C2B,0x2C5B,0x2C2B}, /* 2C2A */ - {0x2C2C,0x2C5C,0x2C2C}, {0x2C2D,0x2C5D,0x2C2D}, /* 2C2C */ - {0x2C2E,0x2C5E,0x2C2E}, {0x2C2F,0x2C2F,0x2C2F}, /* 2C2E */ - {0x2C00,0x2C30,0x2C00}, {0x2C01,0x2C31,0x2C01}, /* 2C30 */ - {0x2C02,0x2C32,0x2C02}, {0x2C03,0x2C33,0x2C03}, /* 2C32 */ - {0x2C04,0x2C34,0x2C04}, {0x2C05,0x2C35,0x2C05}, /* 2C34 */ - {0x2C06,0x2C36,0x2C06}, {0x2C07,0x2C37,0x2C07}, /* 2C36 */ - {0x2C08,0x2C38,0x2C08}, {0x2C09,0x2C39,0x2C09}, /* 2C38 */ - {0x2C0A,0x2C3A,0x2C0A}, {0x2C0B,0x2C3B,0x2C0B}, /* 2C3A */ - {0x2C0C,0x2C3C,0x2C0C}, {0x2C0D,0x2C3D,0x2C0D}, /* 2C3C */ - {0x2C0E,0x2C3E,0x2C0E}, {0x2C0F,0x2C3F,0x2C0F}, /* 2C3E */ - {0x2C10,0x2C40,0x2C10}, {0x2C11,0x2C41,0x2C11}, /* 2C40 */ - {0x2C12,0x2C42,0x2C12}, {0x2C13,0x2C43,0x2C13}, /* 2C42 */ - {0x2C14,0x2C44,0x2C14}, {0x2C15,0x2C45,0x2C15}, /* 2C44 */ - {0x2C16,0x2C46,0x2C16}, {0x2C17,0x2C47,0x2C17}, /* 2C46 */ - {0x2C18,0x2C48,0x2C18}, {0x2C19,0x2C49,0x2C19}, /* 2C48 */ - {0x2C1A,0x2C4A,0x2C1A}, {0x2C1B,0x2C4B,0x2C1B}, /* 2C4A */ - {0x2C1C,0x2C4C,0x2C1C}, {0x2C1D,0x2C4D,0x2C1D}, /* 2C4C */ - {0x2C1E,0x2C4E,0x2C1E}, {0x2C1F,0x2C4F,0x2C1F}, /* 2C4E */ - {0x2C20,0x2C50,0x2C20}, {0x2C21,0x2C51,0x2C21}, /* 2C50 */ - {0x2C22,0x2C52,0x2C22}, {0x2C23,0x2C53,0x2C23}, /* 2C52 */ - {0x2C24,0x2C54,0x2C24}, {0x2C25,0x2C55,0x2C25}, /* 2C54 */ - {0x2C26,0x2C56,0x2C26}, {0x2C27,0x2C57,0x2C27}, /* 2C56 */ - {0x2C28,0x2C58,0x2C28}, {0x2C29,0x2C59,0x2C29}, /* 2C58 */ - {0x2C2A,0x2C5A,0x2C2A}, {0x2C2B,0x2C5B,0x2C2B}, /* 2C5A */ - {0x2C2C,0x2C5C,0x2C2C}, {0x2C2D,0x2C5D,0x2C2D}, /* 2C5C */ - {0x2C2E,0x2C5E,0x2C2E}, {0x2C5F,0x2C5F,0x2C5F}, /* 2C5E */ - {0x2C60,0x2C61,0x2C60}, {0x2C60,0x2C61,0x2C60}, /* 2C60 */ - {0x2C62,0x026B,0x2C62}, {0x2C63,0x1D7D,0x2C63}, /* 2C62 */ - {0x2C64,0x027D,0x2C64}, {0x023A,0x2C65,0x023A}, /* 2C64 */ - {0x023E,0x2C66,0x023E}, {0x2C67,0x2C68,0x2C67}, /* 2C66 */ - {0x2C67,0x2C68,0x2C67}, {0x2C69,0x2C6A,0x2C69}, /* 2C68 */ - {0x2C69,0x2C6A,0x2C69}, {0x2C6B,0x2C6C,0x2C6B}, /* 2C6A */ - {0x2C6B,0x2C6C,0x2C6B}, {0x2C6D,0x0251,0x2C6D}, /* 2C6C */ - {0x2C6E,0x0271,0x2C6E}, {0x2C6F,0x0250,0x2C6F}, /* 2C6E */ - {0x2C70,0x0252,0x2C70}, {0x2C71,0x2C71,0x2C71}, /* 2C70 */ - {0x2C72,0x2C73,0x2C72}, {0x2C72,0x2C73,0x2C72}, /* 2C72 */ - {0x2C74,0x2C74,0x2C74}, {0x2C75,0x2C76,0x2C75}, /* 2C74 */ - {0x2C75,0x2C76,0x2C75}, {0x2C77,0x2C77,0x2C77}, /* 2C76 */ - {0x2C78,0x2C78,0x2C78}, {0x2C79,0x2C79,0x2C79}, /* 2C78 */ - {0x2C7A,0x2C7A,0x2C7A}, {0x2C7B,0x2C7B,0x2C7B}, /* 2C7A */ - {0x2C7C,0x2C7C,0x2C7C}, {0x2C7D,0x2C7D,0x2C7D}, /* 2C7C */ - {0x2C7E,0x023F,0x2C7E}, {0x2C7F,0x0240,0x2C7F}, /* 2C7E */ - {0x2C80,0x2C81,0x2C80}, {0x2C80,0x2C81,0x2C80}, /* 2C80 */ - {0x2C82,0x2C83,0x2C82}, {0x2C82,0x2C83,0x2C82}, /* 2C82 */ - {0x2C84,0x2C85,0x2C84}, {0x2C84,0x2C85,0x2C84}, /* 2C84 */ - {0x2C86,0x2C87,0x2C86}, {0x2C86,0x2C87,0x2C86}, /* 2C86 */ - {0x2C88,0x2C89,0x2C88}, {0x2C88,0x2C89,0x2C88}, /* 2C88 */ - {0x2C8A,0x2C8B,0x2C8A}, {0x2C8A,0x2C8B,0x2C8A}, /* 2C8A */ - {0x2C8C,0x2C8D,0x2C8C}, {0x2C8C,0x2C8D,0x2C8C}, /* 2C8C */ - {0x2C8E,0x2C8F,0x2C8E}, {0x2C8E,0x2C8F,0x2C8E}, /* 2C8E */ - {0x2C90,0x2C91,0x2C90}, {0x2C90,0x2C91,0x2C90}, /* 2C90 */ - {0x2C92,0x2C93,0x2C92}, {0x2C92,0x2C93,0x2C92}, /* 2C92 */ - {0x2C94,0x2C95,0x2C94}, {0x2C94,0x2C95,0x2C94}, /* 2C94 */ - {0x2C96,0x2C97,0x2C96}, {0x2C96,0x2C97,0x2C96}, /* 2C96 */ - {0x2C98,0x2C99,0x2C98}, {0x2C98,0x2C99,0x2C98}, /* 2C98 */ - {0x2C9A,0x2C9B,0x2C9A}, {0x2C9A,0x2C9B,0x2C9A}, /* 2C9A */ - {0x2C9C,0x2C9D,0x2C9C}, {0x2C9C,0x2C9D,0x2C9C}, /* 2C9C */ - {0x2C9E,0x2C9F,0x2C9E}, {0x2C9E,0x2C9F,0x2C9E}, /* 2C9E */ - {0x2CA0,0x2CA1,0x2CA0}, {0x2CA0,0x2CA1,0x2CA0}, /* 2CA0 */ - {0x2CA2,0x2CA3,0x2CA2}, {0x2CA2,0x2CA3,0x2CA2}, /* 2CA2 */ - {0x2CA4,0x2CA5,0x2CA4}, {0x2CA4,0x2CA5,0x2CA4}, /* 2CA4 */ - {0x2CA6,0x2CA7,0x2CA6}, {0x2CA6,0x2CA7,0x2CA6}, /* 2CA6 */ - {0x2CA8,0x2CA9,0x2CA8}, {0x2CA8,0x2CA9,0x2CA8}, /* 2CA8 */ - {0x2CAA,0x2CAB,0x2CAA}, {0x2CAA,0x2CAB,0x2CAA}, /* 2CAA */ - {0x2CAC,0x2CAD,0x2CAC}, {0x2CAC,0x2CAD,0x2CAC}, /* 2CAC */ - {0x2CAE,0x2CAF,0x2CAE}, {0x2CAE,0x2CAF,0x2CAE}, /* 2CAE */ - {0x2CB0,0x2CB1,0x2CB0}, {0x2CB0,0x2CB1,0x2CB0}, /* 2CB0 */ - {0x2CB2,0x2CB3,0x2CB2}, {0x2CB2,0x2CB3,0x2CB2}, /* 2CB2 */ - {0x2CB4,0x2CB5,0x2CB4}, {0x2CB4,0x2CB5,0x2CB4}, /* 2CB4 */ - {0x2CB6,0x2CB7,0x2CB6}, {0x2CB6,0x2CB7,0x2CB6}, /* 2CB6 */ - {0x2CB8,0x2CB9,0x2CB8}, {0x2CB8,0x2CB9,0x2CB8}, /* 2CB8 */ - {0x2CBA,0x2CBB,0x2CBA}, {0x2CBA,0x2CBB,0x2CBA}, /* 2CBA */ - {0x2CBC,0x2CBD,0x2CBC}, {0x2CBC,0x2CBD,0x2CBC}, /* 2CBC */ - {0x2CBE,0x2CBF,0x2CBE}, {0x2CBE,0x2CBF,0x2CBE}, /* 2CBE */ - {0x2CC0,0x2CC1,0x2CC0}, {0x2CC0,0x2CC1,0x2CC0}, /* 2CC0 */ - {0x2CC2,0x2CC3,0x2CC2}, {0x2CC2,0x2CC3,0x2CC2}, /* 2CC2 */ - {0x2CC4,0x2CC5,0x2CC4}, {0x2CC4,0x2CC5,0x2CC4}, /* 2CC4 */ - {0x2CC6,0x2CC7,0x2CC6}, {0x2CC6,0x2CC7,0x2CC6}, /* 2CC6 */ - {0x2CC8,0x2CC9,0x2CC8}, {0x2CC8,0x2CC9,0x2CC8}, /* 2CC8 */ - {0x2CCA,0x2CCB,0x2CCA}, {0x2CCA,0x2CCB,0x2CCA}, /* 2CCA */ - {0x2CCC,0x2CCD,0x2CCC}, {0x2CCC,0x2CCD,0x2CCC}, /* 2CCC */ - {0x2CCE,0x2CCF,0x2CCE}, {0x2CCE,0x2CCF,0x2CCE}, /* 2CCE */ - {0x2CD0,0x2CD1,0x2CD0}, {0x2CD0,0x2CD1,0x2CD0}, /* 2CD0 */ - {0x2CD2,0x2CD3,0x2CD2}, {0x2CD2,0x2CD3,0x2CD2}, /* 2CD2 */ - {0x2CD4,0x2CD5,0x2CD4}, {0x2CD4,0x2CD5,0x2CD4}, /* 2CD4 */ - {0x2CD6,0x2CD7,0x2CD6}, {0x2CD6,0x2CD7,0x2CD6}, /* 2CD6 */ - {0x2CD8,0x2CD9,0x2CD8}, {0x2CD8,0x2CD9,0x2CD8}, /* 2CD8 */ - {0x2CDA,0x2CDB,0x2CDA}, {0x2CDA,0x2CDB,0x2CDA}, /* 2CDA */ - {0x2CDC,0x2CDD,0x2CDC}, {0x2CDC,0x2CDD,0x2CDC}, /* 2CDC */ - {0x2CDE,0x2CDF,0x2CDE}, {0x2CDE,0x2CDF,0x2CDE}, /* 2CDE */ - {0x2CE0,0x2CE1,0x2CE0}, {0x2CE0,0x2CE1,0x2CE0}, /* 2CE0 */ - {0x2CE2,0x2CE3,0x2CE2}, {0x2CE2,0x2CE3,0x2CE2}, /* 2CE2 */ - {0x2CE4,0x2CE4,0x2CE4}, {0x2CE5,0x2CE5,0x2CE5}, /* 2CE4 */ - {0x2CE6,0x2CE6,0x2CE6}, {0x2CE7,0x2CE7,0x2CE7}, /* 2CE6 */ - {0x2CE8,0x2CE8,0x2CE8}, {0x2CE9,0x2CE9,0x2CE9}, /* 2CE8 */ - {0x2CEA,0x2CEA,0x2CEA}, {0x2CEB,0x2CEC,0x2CEB}, /* 2CEA */ - {0x2CEB,0x2CEC,0x2CEB}, {0x2CED,0x2CEE,0x2CED}, /* 2CEC */ - {0x2CED,0x2CEE,0x2CED}, {0x2CEF,0x2CEF,0x2CEF}, /* 2CEE */ - {0x2CF0,0x2CF0,0x2CF0}, {0x2CF1,0x2CF1,0x2CF1}, /* 2CF0 */ - {0x2CF2,0x2CF2,0x2CF2}, {0x2CF3,0x2CF3,0x2CF3}, /* 2CF2 */ - {0x2CF4,0x2CF4,0x2CF4}, {0x2CF5,0x2CF5,0x2CF5}, /* 2CF4 */ - {0x2CF6,0x2CF6,0x2CF6}, {0x2CF7,0x2CF7,0x2CF7}, /* 2CF6 */ - {0x2CF8,0x2CF8,0x2CF8}, {0x2CF9,0x2CF9,0x2CF9}, /* 2CF8 */ - {0x2CFA,0x2CFA,0x2CFA}, {0x2CFB,0x2CFB,0x2CFB}, /* 2CFA */ - {0x2CFC,0x2CFC,0x2CFC}, {0x2CFD,0x2CFD,0x2CFD}, /* 2CFC */ - {0x2CFE,0x2CFE,0x2CFE}, {0x2CFF,0x2CFF,0x2CFF} /* 2CFE */ -}; - -static MY_UNICASE_CHARACTER u520p2D[]={ - {0x10A0,0x2D00,0x10A0}, {0x10A1,0x2D01,0x10A1}, /* 2D00 */ - {0x10A2,0x2D02,0x10A2}, {0x10A3,0x2D03,0x10A3}, /* 2D02 */ - {0x10A4,0x2D04,0x10A4}, {0x10A5,0x2D05,0x10A5}, /* 2D04 */ - {0x10A6,0x2D06,0x10A6}, {0x10A7,0x2D07,0x10A7}, /* 2D06 */ - {0x10A8,0x2D08,0x10A8}, {0x10A9,0x2D09,0x10A9}, /* 2D08 */ - {0x10AA,0x2D0A,0x10AA}, {0x10AB,0x2D0B,0x10AB}, /* 2D0A */ - {0x10AC,0x2D0C,0x10AC}, {0x10AD,0x2D0D,0x10AD}, /* 2D0C */ - {0x10AE,0x2D0E,0x10AE}, {0x10AF,0x2D0F,0x10AF}, /* 2D0E */ - {0x10B0,0x2D10,0x10B0}, {0x10B1,0x2D11,0x10B1}, /* 2D10 */ - {0x10B2,0x2D12,0x10B2}, {0x10B3,0x2D13,0x10B3}, /* 2D12 */ - {0x10B4,0x2D14,0x10B4}, {0x10B5,0x2D15,0x10B5}, /* 2D14 */ - {0x10B6,0x2D16,0x10B6}, {0x10B7,0x2D17,0x10B7}, /* 2D16 */ - {0x10B8,0x2D18,0x10B8}, {0x10B9,0x2D19,0x10B9}, /* 2D18 */ - {0x10BA,0x2D1A,0x10BA}, {0x10BB,0x2D1B,0x10BB}, /* 2D1A */ - {0x10BC,0x2D1C,0x10BC}, {0x10BD,0x2D1D,0x10BD}, /* 2D1C */ - {0x10BE,0x2D1E,0x10BE}, {0x10BF,0x2D1F,0x10BF}, /* 2D1E */ - {0x10C0,0x2D20,0x10C0}, {0x10C1,0x2D21,0x10C1}, /* 2D20 */ - {0x10C2,0x2D22,0x10C2}, {0x10C3,0x2D23,0x10C3}, /* 2D22 */ - {0x10C4,0x2D24,0x10C4}, {0x10C5,0x2D25,0x10C5}, /* 2D24 */ - {0x2D26,0x2D26,0x2D26}, {0x2D27,0x2D27,0x2D27}, /* 2D26 */ - {0x2D28,0x2D28,0x2D28}, {0x2D29,0x2D29,0x2D29}, /* 2D28 */ - {0x2D2A,0x2D2A,0x2D2A}, {0x2D2B,0x2D2B,0x2D2B}, /* 2D2A */ - {0x2D2C,0x2D2C,0x2D2C}, {0x2D2D,0x2D2D,0x2D2D}, /* 2D2C */ - {0x2D2E,0x2D2E,0x2D2E}, {0x2D2F,0x2D2F,0x2D2F}, /* 2D2E */ - {0x2D30,0x2D30,0x2D30}, {0x2D31,0x2D31,0x2D31}, /* 2D30 */ - {0x2D32,0x2D32,0x2D32}, {0x2D33,0x2D33,0x2D33}, /* 2D32 */ - {0x2D34,0x2D34,0x2D34}, {0x2D35,0x2D35,0x2D35}, /* 2D34 */ - {0x2D36,0x2D36,0x2D36}, {0x2D37,0x2D37,0x2D37}, /* 2D36 */ - {0x2D38,0x2D38,0x2D38}, {0x2D39,0x2D39,0x2D39}, /* 2D38 */ - {0x2D3A,0x2D3A,0x2D3A}, {0x2D3B,0x2D3B,0x2D3B}, /* 2D3A */ - {0x2D3C,0x2D3C,0x2D3C}, {0x2D3D,0x2D3D,0x2D3D}, /* 2D3C */ - {0x2D3E,0x2D3E,0x2D3E}, {0x2D3F,0x2D3F,0x2D3F}, /* 2D3E */ - {0x2D40,0x2D40,0x2D40}, {0x2D41,0x2D41,0x2D41}, /* 2D40 */ - {0x2D42,0x2D42,0x2D42}, {0x2D43,0x2D43,0x2D43}, /* 2D42 */ - {0x2D44,0x2D44,0x2D44}, {0x2D45,0x2D45,0x2D45}, /* 2D44 */ - {0x2D46,0x2D46,0x2D46}, {0x2D47,0x2D47,0x2D47}, /* 2D46 */ - {0x2D48,0x2D48,0x2D48}, {0x2D49,0x2D49,0x2D49}, /* 2D48 */ - {0x2D4A,0x2D4A,0x2D4A}, {0x2D4B,0x2D4B,0x2D4B}, /* 2D4A */ - {0x2D4C,0x2D4C,0x2D4C}, {0x2D4D,0x2D4D,0x2D4D}, /* 2D4C */ - {0x2D4E,0x2D4E,0x2D4E}, {0x2D4F,0x2D4F,0x2D4F}, /* 2D4E */ - {0x2D50,0x2D50,0x2D50}, {0x2D51,0x2D51,0x2D51}, /* 2D50 */ - {0x2D52,0x2D52,0x2D52}, {0x2D53,0x2D53,0x2D53}, /* 2D52 */ - {0x2D54,0x2D54,0x2D54}, {0x2D55,0x2D55,0x2D55}, /* 2D54 */ - {0x2D56,0x2D56,0x2D56}, {0x2D57,0x2D57,0x2D57}, /* 2D56 */ - {0x2D58,0x2D58,0x2D58}, {0x2D59,0x2D59,0x2D59}, /* 2D58 */ - {0x2D5A,0x2D5A,0x2D5A}, {0x2D5B,0x2D5B,0x2D5B}, /* 2D5A */ - {0x2D5C,0x2D5C,0x2D5C}, {0x2D5D,0x2D5D,0x2D5D}, /* 2D5C */ - {0x2D5E,0x2D5E,0x2D5E}, {0x2D5F,0x2D5F,0x2D5F}, /* 2D5E */ - {0x2D60,0x2D60,0x2D60}, {0x2D61,0x2D61,0x2D61}, /* 2D60 */ - {0x2D62,0x2D62,0x2D62}, {0x2D63,0x2D63,0x2D63}, /* 2D62 */ - {0x2D64,0x2D64,0x2D64}, {0x2D65,0x2D65,0x2D65}, /* 2D64 */ - {0x2D66,0x2D66,0x2D66}, {0x2D67,0x2D67,0x2D67}, /* 2D66 */ - {0x2D68,0x2D68,0x2D68}, {0x2D69,0x2D69,0x2D69}, /* 2D68 */ - {0x2D6A,0x2D6A,0x2D6A}, {0x2D6B,0x2D6B,0x2D6B}, /* 2D6A */ - {0x2D6C,0x2D6C,0x2D6C}, {0x2D6D,0x2D6D,0x2D6D}, /* 2D6C */ - {0x2D6E,0x2D6E,0x2D6E}, {0x2D6F,0x2D6F,0x2D6F}, /* 2D6E */ - {0x2D70,0x2D70,0x2D70}, {0x2D71,0x2D71,0x2D71}, /* 2D70 */ - {0x2D72,0x2D72,0x2D72}, {0x2D73,0x2D73,0x2D73}, /* 2D72 */ - {0x2D74,0x2D74,0x2D74}, {0x2D75,0x2D75,0x2D75}, /* 2D74 */ - {0x2D76,0x2D76,0x2D76}, {0x2D77,0x2D77,0x2D77}, /* 2D76 */ - {0x2D78,0x2D78,0x2D78}, {0x2D79,0x2D79,0x2D79}, /* 2D78 */ - {0x2D7A,0x2D7A,0x2D7A}, {0x2D7B,0x2D7B,0x2D7B}, /* 2D7A */ - {0x2D7C,0x2D7C,0x2D7C}, {0x2D7D,0x2D7D,0x2D7D}, /* 2D7C */ - {0x2D7E,0x2D7E,0x2D7E}, {0x2D7F,0x2D7F,0x2D7F}, /* 2D7E */ - {0x2D80,0x2D80,0x2D80}, {0x2D81,0x2D81,0x2D81}, /* 2D80 */ - {0x2D82,0x2D82,0x2D82}, {0x2D83,0x2D83,0x2D83}, /* 2D82 */ - {0x2D84,0x2D84,0x2D84}, {0x2D85,0x2D85,0x2D85}, /* 2D84 */ - {0x2D86,0x2D86,0x2D86}, {0x2D87,0x2D87,0x2D87}, /* 2D86 */ - {0x2D88,0x2D88,0x2D88}, {0x2D89,0x2D89,0x2D89}, /* 2D88 */ - {0x2D8A,0x2D8A,0x2D8A}, {0x2D8B,0x2D8B,0x2D8B}, /* 2D8A */ - {0x2D8C,0x2D8C,0x2D8C}, {0x2D8D,0x2D8D,0x2D8D}, /* 2D8C */ - {0x2D8E,0x2D8E,0x2D8E}, {0x2D8F,0x2D8F,0x2D8F}, /* 2D8E */ - {0x2D90,0x2D90,0x2D90}, {0x2D91,0x2D91,0x2D91}, /* 2D90 */ - {0x2D92,0x2D92,0x2D92}, {0x2D93,0x2D93,0x2D93}, /* 2D92 */ - {0x2D94,0x2D94,0x2D94}, {0x2D95,0x2D95,0x2D95}, /* 2D94 */ - {0x2D96,0x2D96,0x2D96}, {0x2D97,0x2D97,0x2D97}, /* 2D96 */ - {0x2D98,0x2D98,0x2D98}, {0x2D99,0x2D99,0x2D99}, /* 2D98 */ - {0x2D9A,0x2D9A,0x2D9A}, {0x2D9B,0x2D9B,0x2D9B}, /* 2D9A */ - {0x2D9C,0x2D9C,0x2D9C}, {0x2D9D,0x2D9D,0x2D9D}, /* 2D9C */ - {0x2D9E,0x2D9E,0x2D9E}, {0x2D9F,0x2D9F,0x2D9F}, /* 2D9E */ - {0x2DA0,0x2DA0,0x2DA0}, {0x2DA1,0x2DA1,0x2DA1}, /* 2DA0 */ - {0x2DA2,0x2DA2,0x2DA2}, {0x2DA3,0x2DA3,0x2DA3}, /* 2DA2 */ - {0x2DA4,0x2DA4,0x2DA4}, {0x2DA5,0x2DA5,0x2DA5}, /* 2DA4 */ - {0x2DA6,0x2DA6,0x2DA6}, {0x2DA7,0x2DA7,0x2DA7}, /* 2DA6 */ - {0x2DA8,0x2DA8,0x2DA8}, {0x2DA9,0x2DA9,0x2DA9}, /* 2DA8 */ - {0x2DAA,0x2DAA,0x2DAA}, {0x2DAB,0x2DAB,0x2DAB}, /* 2DAA */ - {0x2DAC,0x2DAC,0x2DAC}, {0x2DAD,0x2DAD,0x2DAD}, /* 2DAC */ - {0x2DAE,0x2DAE,0x2DAE}, {0x2DAF,0x2DAF,0x2DAF}, /* 2DAE */ - {0x2DB0,0x2DB0,0x2DB0}, {0x2DB1,0x2DB1,0x2DB1}, /* 2DB0 */ - {0x2DB2,0x2DB2,0x2DB2}, {0x2DB3,0x2DB3,0x2DB3}, /* 2DB2 */ - {0x2DB4,0x2DB4,0x2DB4}, {0x2DB5,0x2DB5,0x2DB5}, /* 2DB4 */ - {0x2DB6,0x2DB6,0x2DB6}, {0x2DB7,0x2DB7,0x2DB7}, /* 2DB6 */ - {0x2DB8,0x2DB8,0x2DB8}, {0x2DB9,0x2DB9,0x2DB9}, /* 2DB8 */ - {0x2DBA,0x2DBA,0x2DBA}, {0x2DBB,0x2DBB,0x2DBB}, /* 2DBA */ - {0x2DBC,0x2DBC,0x2DBC}, {0x2DBD,0x2DBD,0x2DBD}, /* 2DBC */ - {0x2DBE,0x2DBE,0x2DBE}, {0x2DBF,0x2DBF,0x2DBF}, /* 2DBE */ - {0x2DC0,0x2DC0,0x2DC0}, {0x2DC1,0x2DC1,0x2DC1}, /* 2DC0 */ - {0x2DC2,0x2DC2,0x2DC2}, {0x2DC3,0x2DC3,0x2DC3}, /* 2DC2 */ - {0x2DC4,0x2DC4,0x2DC4}, {0x2DC5,0x2DC5,0x2DC5}, /* 2DC4 */ - {0x2DC6,0x2DC6,0x2DC6}, {0x2DC7,0x2DC7,0x2DC7}, /* 2DC6 */ - {0x2DC8,0x2DC8,0x2DC8}, {0x2DC9,0x2DC9,0x2DC9}, /* 2DC8 */ - {0x2DCA,0x2DCA,0x2DCA}, {0x2DCB,0x2DCB,0x2DCB}, /* 2DCA */ - {0x2DCC,0x2DCC,0x2DCC}, {0x2DCD,0x2DCD,0x2DCD}, /* 2DCC */ - {0x2DCE,0x2DCE,0x2DCE}, {0x2DCF,0x2DCF,0x2DCF}, /* 2DCE */ - {0x2DD0,0x2DD0,0x2DD0}, {0x2DD1,0x2DD1,0x2DD1}, /* 2DD0 */ - {0x2DD2,0x2DD2,0x2DD2}, {0x2DD3,0x2DD3,0x2DD3}, /* 2DD2 */ - {0x2DD4,0x2DD4,0x2DD4}, {0x2DD5,0x2DD5,0x2DD5}, /* 2DD4 */ - {0x2DD6,0x2DD6,0x2DD6}, {0x2DD7,0x2DD7,0x2DD7}, /* 2DD6 */ - {0x2DD8,0x2DD8,0x2DD8}, {0x2DD9,0x2DD9,0x2DD9}, /* 2DD8 */ - {0x2DDA,0x2DDA,0x2DDA}, {0x2DDB,0x2DDB,0x2DDB}, /* 2DDA */ - {0x2DDC,0x2DDC,0x2DDC}, {0x2DDD,0x2DDD,0x2DDD}, /* 2DDC */ - {0x2DDE,0x2DDE,0x2DDE}, {0x2DDF,0x2DDF,0x2DDF}, /* 2DDE */ - {0x2DE0,0x2DE0,0x2DE0}, {0x2DE1,0x2DE1,0x2DE1}, /* 2DE0 */ - {0x2DE2,0x2DE2,0x2DE2}, {0x2DE3,0x2DE3,0x2DE3}, /* 2DE2 */ - {0x2DE4,0x2DE4,0x2DE4}, {0x2DE5,0x2DE5,0x2DE5}, /* 2DE4 */ - {0x2DE6,0x2DE6,0x2DE6}, {0x2DE7,0x2DE7,0x2DE7}, /* 2DE6 */ - {0x2DE8,0x2DE8,0x2DE8}, {0x2DE9,0x2DE9,0x2DE9}, /* 2DE8 */ - {0x2DEA,0x2DEA,0x2DEA}, {0x2DEB,0x2DEB,0x2DEB}, /* 2DEA */ - {0x2DEC,0x2DEC,0x2DEC}, {0x2DED,0x2DED,0x2DED}, /* 2DEC */ - {0x2DEE,0x2DEE,0x2DEE}, {0x2DEF,0x2DEF,0x2DEF}, /* 2DEE */ - {0x2DF0,0x2DF0,0x2DF0}, {0x2DF1,0x2DF1,0x2DF1}, /* 2DF0 */ - {0x2DF2,0x2DF2,0x2DF2}, {0x2DF3,0x2DF3,0x2DF3}, /* 2DF2 */ - {0x2DF4,0x2DF4,0x2DF4}, {0x2DF5,0x2DF5,0x2DF5}, /* 2DF4 */ - {0x2DF6,0x2DF6,0x2DF6}, {0x2DF7,0x2DF7,0x2DF7}, /* 2DF6 */ - {0x2DF8,0x2DF8,0x2DF8}, {0x2DF9,0x2DF9,0x2DF9}, /* 2DF8 */ - {0x2DFA,0x2DFA,0x2DFA}, {0x2DFB,0x2DFB,0x2DFB}, /* 2DFA */ - {0x2DFC,0x2DFC,0x2DFC}, {0x2DFD,0x2DFD,0x2DFD}, /* 2DFC */ - {0x2DFE,0x2DFE,0x2DFE}, {0x2DFF,0x2DFF,0x2DFF} /* 2DFE */ -}; - -static MY_UNICASE_CHARACTER u520pA6[]={ - {0xA600,0xA600,0xA600}, {0xA601,0xA601,0xA601}, /* A600 */ - {0xA602,0xA602,0xA602}, {0xA603,0xA603,0xA603}, /* A602 */ - {0xA604,0xA604,0xA604}, {0xA605,0xA605,0xA605}, /* A604 */ - {0xA606,0xA606,0xA606}, {0xA607,0xA607,0xA607}, /* A606 */ - {0xA608,0xA608,0xA608}, {0xA609,0xA609,0xA609}, /* A608 */ - {0xA60A,0xA60A,0xA60A}, {0xA60B,0xA60B,0xA60B}, /* A60A */ - {0xA60C,0xA60C,0xA60C}, {0xA60D,0xA60D,0xA60D}, /* A60C */ - {0xA60E,0xA60E,0xA60E}, {0xA60F,0xA60F,0xA60F}, /* A60E */ - {0xA610,0xA610,0xA610}, {0xA611,0xA611,0xA611}, /* A610 */ - {0xA612,0xA612,0xA612}, {0xA613,0xA613,0xA613}, /* A612 */ - {0xA614,0xA614,0xA614}, {0xA615,0xA615,0xA615}, /* A614 */ - {0xA616,0xA616,0xA616}, {0xA617,0xA617,0xA617}, /* A616 */ - {0xA618,0xA618,0xA618}, {0xA619,0xA619,0xA619}, /* A618 */ - {0xA61A,0xA61A,0xA61A}, {0xA61B,0xA61B,0xA61B}, /* A61A */ - {0xA61C,0xA61C,0xA61C}, {0xA61D,0xA61D,0xA61D}, /* A61C */ - {0xA61E,0xA61E,0xA61E}, {0xA61F,0xA61F,0xA61F}, /* A61E */ - {0xA620,0xA620,0xA620}, {0xA621,0xA621,0xA621}, /* A620 */ - {0xA622,0xA622,0xA622}, {0xA623,0xA623,0xA623}, /* A622 */ - {0xA624,0xA624,0xA624}, {0xA625,0xA625,0xA625}, /* A624 */ - {0xA626,0xA626,0xA626}, {0xA627,0xA627,0xA627}, /* A626 */ - {0xA628,0xA628,0xA628}, {0xA629,0xA629,0xA629}, /* A628 */ - {0xA62A,0xA62A,0xA62A}, {0xA62B,0xA62B,0xA62B}, /* A62A */ - {0xA62C,0xA62C,0xA62C}, {0xA62D,0xA62D,0xA62D}, /* A62C */ - {0xA62E,0xA62E,0xA62E}, {0xA62F,0xA62F,0xA62F}, /* A62E */ - {0xA630,0xA630,0xA630}, {0xA631,0xA631,0xA631}, /* A630 */ - {0xA632,0xA632,0xA632}, {0xA633,0xA633,0xA633}, /* A632 */ - {0xA634,0xA634,0xA634}, {0xA635,0xA635,0xA635}, /* A634 */ - {0xA636,0xA636,0xA636}, {0xA637,0xA637,0xA637}, /* A636 */ - {0xA638,0xA638,0xA638}, {0xA639,0xA639,0xA639}, /* A638 */ - {0xA63A,0xA63A,0xA63A}, {0xA63B,0xA63B,0xA63B}, /* A63A */ - {0xA63C,0xA63C,0xA63C}, {0xA63D,0xA63D,0xA63D}, /* A63C */ - {0xA63E,0xA63E,0xA63E}, {0xA63F,0xA63F,0xA63F}, /* A63E */ - {0xA640,0xA641,0xA640}, {0xA640,0xA641,0xA640}, /* A640 */ - {0xA642,0xA643,0xA642}, {0xA642,0xA643,0xA642}, /* A642 */ - {0xA644,0xA645,0xA644}, {0xA644,0xA645,0xA644}, /* A644 */ - {0xA646,0xA647,0xA646}, {0xA646,0xA647,0xA646}, /* A646 */ - {0xA648,0xA649,0xA648}, {0xA648,0xA649,0xA648}, /* A648 */ - {0xA64A,0xA64B,0xA64A}, {0xA64A,0xA64B,0xA64A}, /* A64A */ - {0xA64C,0xA64D,0xA64C}, {0xA64C,0xA64D,0xA64C}, /* A64C */ - {0xA64E,0xA64F,0xA64E}, {0xA64E,0xA64F,0xA64E}, /* A64E */ - {0xA650,0xA651,0xA650}, {0xA650,0xA651,0xA650}, /* A650 */ - {0xA652,0xA653,0xA652}, {0xA652,0xA653,0xA652}, /* A652 */ - {0xA654,0xA655,0xA654}, {0xA654,0xA655,0xA654}, /* A654 */ - {0xA656,0xA657,0xA656}, {0xA656,0xA657,0xA656}, /* A656 */ - {0xA658,0xA659,0xA658}, {0xA658,0xA659,0xA658}, /* A658 */ - {0xA65A,0xA65B,0xA65A}, {0xA65A,0xA65B,0xA65A}, /* A65A */ - {0xA65C,0xA65D,0xA65C}, {0xA65C,0xA65D,0xA65C}, /* A65C */ - {0xA65E,0xA65F,0xA65E}, {0xA65E,0xA65F,0xA65E}, /* A65E */ - {0xA660,0xA660,0xA660}, {0xA661,0xA661,0xA661}, /* A660 */ - {0xA662,0xA663,0xA662}, {0xA662,0xA663,0xA662}, /* A662 */ - {0xA664,0xA665,0xA664}, {0xA664,0xA665,0xA664}, /* A664 */ - {0xA666,0xA667,0xA666}, {0xA666,0xA667,0xA666}, /* A666 */ - {0xA668,0xA669,0xA668}, {0xA668,0xA669,0xA668}, /* A668 */ - {0xA66A,0xA66B,0xA66A}, {0xA66A,0xA66B,0xA66A}, /* A66A */ - {0xA66C,0xA66D,0xA66C}, {0xA66C,0xA66D,0xA66C}, /* A66C */ - {0xA66E,0xA66E,0xA66E}, {0xA66F,0xA66F,0xA66F}, /* A66E */ - {0xA670,0xA670,0xA670}, {0xA671,0xA671,0xA671}, /* A670 */ - {0xA672,0xA672,0xA672}, {0xA673,0xA673,0xA673}, /* A672 */ - {0xA674,0xA674,0xA674}, {0xA675,0xA675,0xA675}, /* A674 */ - {0xA676,0xA676,0xA676}, {0xA677,0xA677,0xA677}, /* A676 */ - {0xA678,0xA678,0xA678}, {0xA679,0xA679,0xA679}, /* A678 */ - {0xA67A,0xA67A,0xA67A}, {0xA67B,0xA67B,0xA67B}, /* A67A */ - {0xA67C,0xA67C,0xA67C}, {0xA67D,0xA67D,0xA67D}, /* A67C */ - {0xA67E,0xA67E,0xA67E}, {0xA67F,0xA67F,0xA67F}, /* A67E */ - {0xA680,0xA681,0xA680}, {0xA680,0xA681,0xA680}, /* A680 */ - {0xA682,0xA683,0xA682}, {0xA682,0xA683,0xA682}, /* A682 */ - {0xA684,0xA685,0xA684}, {0xA684,0xA685,0xA684}, /* A684 */ - {0xA686,0xA687,0xA686}, {0xA686,0xA687,0xA686}, /* A686 */ - {0xA688,0xA689,0xA688}, {0xA688,0xA689,0xA688}, /* A688 */ - {0xA68A,0xA68B,0xA68A}, {0xA68A,0xA68B,0xA68A}, /* A68A */ - {0xA68C,0xA68D,0xA68C}, {0xA68C,0xA68D,0xA68C}, /* A68C */ - {0xA68E,0xA68F,0xA68E}, {0xA68E,0xA68F,0xA68E}, /* A68E */ - {0xA690,0xA691,0xA690}, {0xA690,0xA691,0xA690}, /* A690 */ - {0xA692,0xA693,0xA692}, {0xA692,0xA693,0xA692}, /* A692 */ - {0xA694,0xA695,0xA694}, {0xA694,0xA695,0xA694}, /* A694 */ - {0xA696,0xA697,0xA696}, {0xA696,0xA697,0xA696}, /* A696 */ - {0xA698,0xA698,0xA698}, {0xA699,0xA699,0xA699}, /* A698 */ - {0xA69A,0xA69A,0xA69A}, {0xA69B,0xA69B,0xA69B}, /* A69A */ - {0xA69C,0xA69C,0xA69C}, {0xA69D,0xA69D,0xA69D}, /* A69C */ - {0xA69E,0xA69E,0xA69E}, {0xA69F,0xA69F,0xA69F}, /* A69E */ - {0xA6A0,0xA6A0,0xA6A0}, {0xA6A1,0xA6A1,0xA6A1}, /* A6A0 */ - {0xA6A2,0xA6A2,0xA6A2}, {0xA6A3,0xA6A3,0xA6A3}, /* A6A2 */ - {0xA6A4,0xA6A4,0xA6A4}, {0xA6A5,0xA6A5,0xA6A5}, /* A6A4 */ - {0xA6A6,0xA6A6,0xA6A6}, {0xA6A7,0xA6A7,0xA6A7}, /* A6A6 */ - {0xA6A8,0xA6A8,0xA6A8}, {0xA6A9,0xA6A9,0xA6A9}, /* A6A8 */ - {0xA6AA,0xA6AA,0xA6AA}, {0xA6AB,0xA6AB,0xA6AB}, /* A6AA */ - {0xA6AC,0xA6AC,0xA6AC}, {0xA6AD,0xA6AD,0xA6AD}, /* A6AC */ - {0xA6AE,0xA6AE,0xA6AE}, {0xA6AF,0xA6AF,0xA6AF}, /* A6AE */ - {0xA6B0,0xA6B0,0xA6B0}, {0xA6B1,0xA6B1,0xA6B1}, /* A6B0 */ - {0xA6B2,0xA6B2,0xA6B2}, {0xA6B3,0xA6B3,0xA6B3}, /* A6B2 */ - {0xA6B4,0xA6B4,0xA6B4}, {0xA6B5,0xA6B5,0xA6B5}, /* A6B4 */ - {0xA6B6,0xA6B6,0xA6B6}, {0xA6B7,0xA6B7,0xA6B7}, /* A6B6 */ - {0xA6B8,0xA6B8,0xA6B8}, {0xA6B9,0xA6B9,0xA6B9}, /* A6B8 */ - {0xA6BA,0xA6BA,0xA6BA}, {0xA6BB,0xA6BB,0xA6BB}, /* A6BA */ - {0xA6BC,0xA6BC,0xA6BC}, {0xA6BD,0xA6BD,0xA6BD}, /* A6BC */ - {0xA6BE,0xA6BE,0xA6BE}, {0xA6BF,0xA6BF,0xA6BF}, /* A6BE */ - {0xA6C0,0xA6C0,0xA6C0}, {0xA6C1,0xA6C1,0xA6C1}, /* A6C0 */ - {0xA6C2,0xA6C2,0xA6C2}, {0xA6C3,0xA6C3,0xA6C3}, /* A6C2 */ - {0xA6C4,0xA6C4,0xA6C4}, {0xA6C5,0xA6C5,0xA6C5}, /* A6C4 */ - {0xA6C6,0xA6C6,0xA6C6}, {0xA6C7,0xA6C7,0xA6C7}, /* A6C6 */ - {0xA6C8,0xA6C8,0xA6C8}, {0xA6C9,0xA6C9,0xA6C9}, /* A6C8 */ - {0xA6CA,0xA6CA,0xA6CA}, {0xA6CB,0xA6CB,0xA6CB}, /* A6CA */ - {0xA6CC,0xA6CC,0xA6CC}, {0xA6CD,0xA6CD,0xA6CD}, /* A6CC */ - {0xA6CE,0xA6CE,0xA6CE}, {0xA6CF,0xA6CF,0xA6CF}, /* A6CE */ - {0xA6D0,0xA6D0,0xA6D0}, {0xA6D1,0xA6D1,0xA6D1}, /* A6D0 */ - {0xA6D2,0xA6D2,0xA6D2}, {0xA6D3,0xA6D3,0xA6D3}, /* A6D2 */ - {0xA6D4,0xA6D4,0xA6D4}, {0xA6D5,0xA6D5,0xA6D5}, /* A6D4 */ - {0xA6D6,0xA6D6,0xA6D6}, {0xA6D7,0xA6D7,0xA6D7}, /* A6D6 */ - {0xA6D8,0xA6D8,0xA6D8}, {0xA6D9,0xA6D9,0xA6D9}, /* A6D8 */ - {0xA6DA,0xA6DA,0xA6DA}, {0xA6DB,0xA6DB,0xA6DB}, /* A6DA */ - {0xA6DC,0xA6DC,0xA6DC}, {0xA6DD,0xA6DD,0xA6DD}, /* A6DC */ - {0xA6DE,0xA6DE,0xA6DE}, {0xA6DF,0xA6DF,0xA6DF}, /* A6DE */ - {0xA6E0,0xA6E0,0xA6E0}, {0xA6E1,0xA6E1,0xA6E1}, /* A6E0 */ - {0xA6E2,0xA6E2,0xA6E2}, {0xA6E3,0xA6E3,0xA6E3}, /* A6E2 */ - {0xA6E4,0xA6E4,0xA6E4}, {0xA6E5,0xA6E5,0xA6E5}, /* A6E4 */ - {0xA6E6,0xA6E6,0xA6E6}, {0xA6E7,0xA6E7,0xA6E7}, /* A6E6 */ - {0xA6E8,0xA6E8,0xA6E8}, {0xA6E9,0xA6E9,0xA6E9}, /* A6E8 */ - {0xA6EA,0xA6EA,0xA6EA}, {0xA6EB,0xA6EB,0xA6EB}, /* A6EA */ - {0xA6EC,0xA6EC,0xA6EC}, {0xA6ED,0xA6ED,0xA6ED}, /* A6EC */ - {0xA6EE,0xA6EE,0xA6EE}, {0xA6EF,0xA6EF,0xA6EF}, /* A6EE */ - {0xA6F0,0xA6F0,0xA6F0}, {0xA6F1,0xA6F1,0xA6F1}, /* A6F0 */ - {0xA6F2,0xA6F2,0xA6F2}, {0xA6F3,0xA6F3,0xA6F3}, /* A6F2 */ - {0xA6F4,0xA6F4,0xA6F4}, {0xA6F5,0xA6F5,0xA6F5}, /* A6F4 */ - {0xA6F6,0xA6F6,0xA6F6}, {0xA6F7,0xA6F7,0xA6F7}, /* A6F6 */ - {0xA6F8,0xA6F8,0xA6F8}, {0xA6F9,0xA6F9,0xA6F9}, /* A6F8 */ - {0xA6FA,0xA6FA,0xA6FA}, {0xA6FB,0xA6FB,0xA6FB}, /* A6FA */ - {0xA6FC,0xA6FC,0xA6FC}, {0xA6FD,0xA6FD,0xA6FD}, /* A6FC */ - {0xA6FE,0xA6FE,0xA6FE}, {0xA6FF,0xA6FF,0xA6FF} /* A6FE */ -}; - -static MY_UNICASE_CHARACTER u520pA7[]={ - {0xA700,0xA700,0xA700}, {0xA701,0xA701,0xA701}, /* A700 */ - {0xA702,0xA702,0xA702}, {0xA703,0xA703,0xA703}, /* A702 */ - {0xA704,0xA704,0xA704}, {0xA705,0xA705,0xA705}, /* A704 */ - {0xA706,0xA706,0xA706}, {0xA707,0xA707,0xA707}, /* A706 */ - {0xA708,0xA708,0xA708}, {0xA709,0xA709,0xA709}, /* A708 */ - {0xA70A,0xA70A,0xA70A}, {0xA70B,0xA70B,0xA70B}, /* A70A */ - {0xA70C,0xA70C,0xA70C}, {0xA70D,0xA70D,0xA70D}, /* A70C */ - {0xA70E,0xA70E,0xA70E}, {0xA70F,0xA70F,0xA70F}, /* A70E */ - {0xA710,0xA710,0xA710}, {0xA711,0xA711,0xA711}, /* A710 */ - {0xA712,0xA712,0xA712}, {0xA713,0xA713,0xA713}, /* A712 */ - {0xA714,0xA714,0xA714}, {0xA715,0xA715,0xA715}, /* A714 */ - {0xA716,0xA716,0xA716}, {0xA717,0xA717,0xA717}, /* A716 */ - {0xA718,0xA718,0xA718}, {0xA719,0xA719,0xA719}, /* A718 */ - {0xA71A,0xA71A,0xA71A}, {0xA71B,0xA71B,0xA71B}, /* A71A */ - {0xA71C,0xA71C,0xA71C}, {0xA71D,0xA71D,0xA71D}, /* A71C */ - {0xA71E,0xA71E,0xA71E}, {0xA71F,0xA71F,0xA71F}, /* A71E */ - {0xA720,0xA720,0xA720}, {0xA721,0xA721,0xA721}, /* A720 */ - {0xA722,0xA723,0xA722}, {0xA722,0xA723,0xA722}, /* A722 */ - {0xA724,0xA725,0xA724}, {0xA724,0xA725,0xA724}, /* A724 */ - {0xA726,0xA727,0xA726}, {0xA726,0xA727,0xA726}, /* A726 */ - {0xA728,0xA729,0xA728}, {0xA728,0xA729,0xA728}, /* A728 */ - {0xA72A,0xA72B,0xA72A}, {0xA72A,0xA72B,0xA72A}, /* A72A */ - {0xA72C,0xA72D,0xA72C}, {0xA72C,0xA72D,0xA72C}, /* A72C */ - {0xA72E,0xA72F,0xA72E}, {0xA72E,0xA72F,0xA72E}, /* A72E */ - {0xA730,0xA730,0xA730}, {0xA731,0xA731,0xA731}, /* A730 */ - {0xA732,0xA733,0xA732}, {0xA732,0xA733,0xA732}, /* A732 */ - {0xA734,0xA735,0xA734}, {0xA734,0xA735,0xA734}, /* A734 */ - {0xA736,0xA737,0xA736}, {0xA736,0xA737,0xA736}, /* A736 */ - {0xA738,0xA739,0xA738}, {0xA738,0xA739,0xA738}, /* A738 */ - {0xA73A,0xA73B,0xA73A}, {0xA73A,0xA73B,0xA73A}, /* A73A */ - {0xA73C,0xA73D,0xA73C}, {0xA73C,0xA73D,0xA73C}, /* A73C */ - {0xA73E,0xA73F,0xA73E}, {0xA73E,0xA73F,0xA73E}, /* A73E */ - {0xA740,0xA741,0xA740}, {0xA740,0xA741,0xA740}, /* A740 */ - {0xA742,0xA743,0xA742}, {0xA742,0xA743,0xA742}, /* A742 */ - {0xA744,0xA745,0xA744}, {0xA744,0xA745,0xA744}, /* A744 */ - {0xA746,0xA747,0xA746}, {0xA746,0xA747,0xA746}, /* A746 */ - {0xA748,0xA749,0xA748}, {0xA748,0xA749,0xA748}, /* A748 */ - {0xA74A,0xA74B,0xA74A}, {0xA74A,0xA74B,0xA74A}, /* A74A */ - {0xA74C,0xA74D,0xA74C}, {0xA74C,0xA74D,0xA74C}, /* A74C */ - {0xA74E,0xA74F,0xA74E}, {0xA74E,0xA74F,0xA74E}, /* A74E */ - {0xA750,0xA751,0xA750}, {0xA750,0xA751,0xA750}, /* A750 */ - {0xA752,0xA753,0xA752}, {0xA752,0xA753,0xA752}, /* A752 */ - {0xA754,0xA755,0xA754}, {0xA754,0xA755,0xA754}, /* A754 */ - {0xA756,0xA757,0xA756}, {0xA756,0xA757,0xA756}, /* A756 */ - {0xA758,0xA759,0xA758}, {0xA758,0xA759,0xA758}, /* A758 */ - {0xA75A,0xA75B,0xA75A}, {0xA75A,0xA75B,0xA75A}, /* A75A */ - {0xA75C,0xA75D,0xA75C}, {0xA75C,0xA75D,0xA75C}, /* A75C */ - {0xA75E,0xA75F,0xA75E}, {0xA75E,0xA75F,0xA75E}, /* A75E */ - {0xA760,0xA761,0xA760}, {0xA760,0xA761,0xA760}, /* A760 */ - {0xA762,0xA763,0xA762}, {0xA762,0xA763,0xA762}, /* A762 */ - {0xA764,0xA765,0xA764}, {0xA764,0xA765,0xA764}, /* A764 */ - {0xA766,0xA767,0xA766}, {0xA766,0xA767,0xA766}, /* A766 */ - {0xA768,0xA769,0xA768}, {0xA768,0xA769,0xA768}, /* A768 */ - {0xA76A,0xA76B,0xA76A}, {0xA76A,0xA76B,0xA76A}, /* A76A */ - {0xA76C,0xA76D,0xA76C}, {0xA76C,0xA76D,0xA76C}, /* A76C */ - {0xA76E,0xA76F,0xA76E}, {0xA76E,0xA76F,0xA76E}, /* A76E */ - {0xA770,0xA770,0xA770}, {0xA771,0xA771,0xA771}, /* A770 */ - {0xA772,0xA772,0xA772}, {0xA773,0xA773,0xA773}, /* A772 */ - {0xA774,0xA774,0xA774}, {0xA775,0xA775,0xA775}, /* A774 */ - {0xA776,0xA776,0xA776}, {0xA777,0xA777,0xA777}, /* A776 */ - {0xA778,0xA778,0xA778}, {0xA779,0xA77A,0xA779}, /* A778 */ - {0xA779,0xA77A,0xA779}, {0xA77B,0xA77C,0xA77B}, /* A77A */ - {0xA77B,0xA77C,0xA77B}, {0xA77D,0x1D79,0xA77D}, /* A77C */ - {0xA77E,0xA77F,0xA77E}, {0xA77E,0xA77F,0xA77E}, /* A77E */ - {0xA780,0xA781,0xA780}, {0xA780,0xA781,0xA780}, /* A780 */ - {0xA782,0xA783,0xA782}, {0xA782,0xA783,0xA782}, /* A782 */ - {0xA784,0xA785,0xA784}, {0xA784,0xA785,0xA784}, /* A784 */ - {0xA786,0xA787,0xA786}, {0xA786,0xA787,0xA786}, /* A786 */ - {0xA788,0xA788,0xA788}, {0xA789,0xA789,0xA789}, /* A788 */ - {0xA78A,0xA78A,0xA78A}, {0xA78B,0xA78C,0xA78B}, /* A78A */ - {0xA78B,0xA78C,0xA78B}, {0xA78D,0xA78D,0xA78D}, /* A78C */ - {0xA78E,0xA78E,0xA78E}, {0xA78F,0xA78F,0xA78F}, /* A78E */ - {0xA790,0xA790,0xA790}, {0xA791,0xA791,0xA791}, /* A790 */ - {0xA792,0xA792,0xA792}, {0xA793,0xA793,0xA793}, /* A792 */ - {0xA794,0xA794,0xA794}, {0xA795,0xA795,0xA795}, /* A794 */ - {0xA796,0xA796,0xA796}, {0xA797,0xA797,0xA797}, /* A796 */ - {0xA798,0xA798,0xA798}, {0xA799,0xA799,0xA799}, /* A798 */ - {0xA79A,0xA79A,0xA79A}, {0xA79B,0xA79B,0xA79B}, /* A79A */ - {0xA79C,0xA79C,0xA79C}, {0xA79D,0xA79D,0xA79D}, /* A79C */ - {0xA79E,0xA79E,0xA79E}, {0xA79F,0xA79F,0xA79F}, /* A79E */ - {0xA7A0,0xA7A0,0xA7A0}, {0xA7A1,0xA7A1,0xA7A1}, /* A7A0 */ - {0xA7A2,0xA7A2,0xA7A2}, {0xA7A3,0xA7A3,0xA7A3}, /* A7A2 */ - {0xA7A4,0xA7A4,0xA7A4}, {0xA7A5,0xA7A5,0xA7A5}, /* A7A4 */ - {0xA7A6,0xA7A6,0xA7A6}, {0xA7A7,0xA7A7,0xA7A7}, /* A7A6 */ - {0xA7A8,0xA7A8,0xA7A8}, {0xA7A9,0xA7A9,0xA7A9}, /* A7A8 */ - {0xA7AA,0xA7AA,0xA7AA}, {0xA7AB,0xA7AB,0xA7AB}, /* A7AA */ - {0xA7AC,0xA7AC,0xA7AC}, {0xA7AD,0xA7AD,0xA7AD}, /* A7AC */ - {0xA7AE,0xA7AE,0xA7AE}, {0xA7AF,0xA7AF,0xA7AF}, /* A7AE */ - {0xA7B0,0xA7B0,0xA7B0}, {0xA7B1,0xA7B1,0xA7B1}, /* A7B0 */ - {0xA7B2,0xA7B2,0xA7B2}, {0xA7B3,0xA7B3,0xA7B3}, /* A7B2 */ - {0xA7B4,0xA7B4,0xA7B4}, {0xA7B5,0xA7B5,0xA7B5}, /* A7B4 */ - {0xA7B6,0xA7B6,0xA7B6}, {0xA7B7,0xA7B7,0xA7B7}, /* A7B6 */ - {0xA7B8,0xA7B8,0xA7B8}, {0xA7B9,0xA7B9,0xA7B9}, /* A7B8 */ - {0xA7BA,0xA7BA,0xA7BA}, {0xA7BB,0xA7BB,0xA7BB}, /* A7BA */ - {0xA7BC,0xA7BC,0xA7BC}, {0xA7BD,0xA7BD,0xA7BD}, /* A7BC */ - {0xA7BE,0xA7BE,0xA7BE}, {0xA7BF,0xA7BF,0xA7BF}, /* A7BE */ - {0xA7C0,0xA7C0,0xA7C0}, {0xA7C1,0xA7C1,0xA7C1}, /* A7C0 */ - {0xA7C2,0xA7C2,0xA7C2}, {0xA7C3,0xA7C3,0xA7C3}, /* A7C2 */ - {0xA7C4,0xA7C4,0xA7C4}, {0xA7C5,0xA7C5,0xA7C5}, /* A7C4 */ - {0xA7C6,0xA7C6,0xA7C6}, {0xA7C7,0xA7C7,0xA7C7}, /* A7C6 */ - {0xA7C8,0xA7C8,0xA7C8}, {0xA7C9,0xA7C9,0xA7C9}, /* A7C8 */ - {0xA7CA,0xA7CA,0xA7CA}, {0xA7CB,0xA7CB,0xA7CB}, /* A7CA */ - {0xA7CC,0xA7CC,0xA7CC}, {0xA7CD,0xA7CD,0xA7CD}, /* A7CC */ - {0xA7CE,0xA7CE,0xA7CE}, {0xA7CF,0xA7CF,0xA7CF}, /* A7CE */ - {0xA7D0,0xA7D0,0xA7D0}, {0xA7D1,0xA7D1,0xA7D1}, /* A7D0 */ - {0xA7D2,0xA7D2,0xA7D2}, {0xA7D3,0xA7D3,0xA7D3}, /* A7D2 */ - {0xA7D4,0xA7D4,0xA7D4}, {0xA7D5,0xA7D5,0xA7D5}, /* A7D4 */ - {0xA7D6,0xA7D6,0xA7D6}, {0xA7D7,0xA7D7,0xA7D7}, /* A7D6 */ - {0xA7D8,0xA7D8,0xA7D8}, {0xA7D9,0xA7D9,0xA7D9}, /* A7D8 */ - {0xA7DA,0xA7DA,0xA7DA}, {0xA7DB,0xA7DB,0xA7DB}, /* A7DA */ - {0xA7DC,0xA7DC,0xA7DC}, {0xA7DD,0xA7DD,0xA7DD}, /* A7DC */ - {0xA7DE,0xA7DE,0xA7DE}, {0xA7DF,0xA7DF,0xA7DF}, /* A7DE */ - {0xA7E0,0xA7E0,0xA7E0}, {0xA7E1,0xA7E1,0xA7E1}, /* A7E0 */ - {0xA7E2,0xA7E2,0xA7E2}, {0xA7E3,0xA7E3,0xA7E3}, /* A7E2 */ - {0xA7E4,0xA7E4,0xA7E4}, {0xA7E5,0xA7E5,0xA7E5}, /* A7E4 */ - {0xA7E6,0xA7E6,0xA7E6}, {0xA7E7,0xA7E7,0xA7E7}, /* A7E6 */ - {0xA7E8,0xA7E8,0xA7E8}, {0xA7E9,0xA7E9,0xA7E9}, /* A7E8 */ - {0xA7EA,0xA7EA,0xA7EA}, {0xA7EB,0xA7EB,0xA7EB}, /* A7EA */ - {0xA7EC,0xA7EC,0xA7EC}, {0xA7ED,0xA7ED,0xA7ED}, /* A7EC */ - {0xA7EE,0xA7EE,0xA7EE}, {0xA7EF,0xA7EF,0xA7EF}, /* A7EE */ - {0xA7F0,0xA7F0,0xA7F0}, {0xA7F1,0xA7F1,0xA7F1}, /* A7F0 */ - {0xA7F2,0xA7F2,0xA7F2}, {0xA7F3,0xA7F3,0xA7F3}, /* A7F2 */ - {0xA7F4,0xA7F4,0xA7F4}, {0xA7F5,0xA7F5,0xA7F5}, /* A7F4 */ - {0xA7F6,0xA7F6,0xA7F6}, {0xA7F7,0xA7F7,0xA7F7}, /* A7F6 */ - {0xA7F8,0xA7F8,0xA7F8}, {0xA7F9,0xA7F9,0xA7F9}, /* A7F8 */ - {0xA7FA,0xA7FA,0xA7FA}, {0xA7FB,0xA7FB,0xA7FB}, /* A7FA */ - {0xA7FC,0xA7FC,0xA7FC}, {0xA7FD,0xA7FD,0xA7FD}, /* A7FC */ - {0xA7FE,0xA7FE,0xA7FE}, {0xA7FF,0xA7FF,0xA7FF} /* A7FE */ -}; - -static MY_UNICASE_CHARACTER u520pFF[]={ - {0xFF00,0xFF00,0xFF00}, {0xFF01,0xFF01,0xFF01}, /* FF00 */ - {0xFF02,0xFF02,0xFF02}, {0xFF03,0xFF03,0xFF03}, /* FF02 */ - {0xFF04,0xFF04,0xFF04}, {0xFF05,0xFF05,0xFF05}, /* FF04 */ - {0xFF06,0xFF06,0xFF06}, {0xFF07,0xFF07,0xFF07}, /* FF06 */ - {0xFF08,0xFF08,0xFF08}, {0xFF09,0xFF09,0xFF09}, /* FF08 */ - {0xFF0A,0xFF0A,0xFF0A}, {0xFF0B,0xFF0B,0xFF0B}, /* FF0A */ - {0xFF0C,0xFF0C,0xFF0C}, {0xFF0D,0xFF0D,0xFF0D}, /* FF0C */ - {0xFF0E,0xFF0E,0xFF0E}, {0xFF0F,0xFF0F,0xFF0F}, /* FF0E */ - {0xFF10,0xFF10,0xFF10}, {0xFF11,0xFF11,0xFF11}, /* FF10 */ - {0xFF12,0xFF12,0xFF12}, {0xFF13,0xFF13,0xFF13}, /* FF12 */ - {0xFF14,0xFF14,0xFF14}, {0xFF15,0xFF15,0xFF15}, /* FF14 */ - {0xFF16,0xFF16,0xFF16}, {0xFF17,0xFF17,0xFF17}, /* FF16 */ - {0xFF18,0xFF18,0xFF18}, {0xFF19,0xFF19,0xFF19}, /* FF18 */ - {0xFF1A,0xFF1A,0xFF1A}, {0xFF1B,0xFF1B,0xFF1B}, /* FF1A */ - {0xFF1C,0xFF1C,0xFF1C}, {0xFF1D,0xFF1D,0xFF1D}, /* FF1C */ - {0xFF1E,0xFF1E,0xFF1E}, {0xFF1F,0xFF1F,0xFF1F}, /* FF1E */ - {0xFF20,0xFF20,0xFF20}, {0xFF21,0xFF41,0xFF21}, /* FF20 */ - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, /* FF22 */ - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, /* FF24 */ - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, /* FF26 */ - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, /* FF28 */ - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, /* FF2A */ - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, /* FF2C */ - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, /* FF2E */ - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, /* FF30 */ - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, /* FF32 */ - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, /* FF34 */ - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, /* FF36 */ - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, /* FF38 */ - {0xFF3A,0xFF5A,0xFF3A}, {0xFF3B,0xFF3B,0xFF3B}, /* FF3A */ - {0xFF3C,0xFF3C,0xFF3C}, {0xFF3D,0xFF3D,0xFF3D}, /* FF3C */ - {0xFF3E,0xFF3E,0xFF3E}, {0xFF3F,0xFF3F,0xFF3F}, /* FF3E */ - {0xFF40,0xFF40,0xFF40}, {0xFF21,0xFF41,0xFF21}, /* FF40 */ - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, /* FF42 */ - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, /* FF44 */ - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, /* FF46 */ - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, /* FF48 */ - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, /* FF4A */ - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, /* FF4C */ - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, /* FF4E */ - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, /* FF50 */ - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, /* FF52 */ - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, /* FF54 */ - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, /* FF56 */ - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, /* FF58 */ - {0xFF3A,0xFF5A,0xFF3A}, {0xFF5B,0xFF5B,0xFF5B}, /* FF5A */ - {0xFF5C,0xFF5C,0xFF5C}, {0xFF5D,0xFF5D,0xFF5D}, /* FF5C */ - {0xFF5E,0xFF5E,0xFF5E}, {0xFF5F,0xFF5F,0xFF5F}, /* FF5E */ - {0xFF60,0xFF60,0xFF60}, {0xFF61,0xFF61,0xFF61}, /* FF60 */ - {0xFF62,0xFF62,0xFF62}, {0xFF63,0xFF63,0xFF63}, /* FF62 */ - {0xFF64,0xFF64,0xFF64}, {0xFF65,0xFF65,0xFF65}, /* FF64 */ - {0xFF66,0xFF66,0xFF66}, {0xFF67,0xFF67,0xFF67}, /* FF66 */ - {0xFF68,0xFF68,0xFF68}, {0xFF69,0xFF69,0xFF69}, /* FF68 */ - {0xFF6A,0xFF6A,0xFF6A}, {0xFF6B,0xFF6B,0xFF6B}, /* FF6A */ - {0xFF6C,0xFF6C,0xFF6C}, {0xFF6D,0xFF6D,0xFF6D}, /* FF6C */ - {0xFF6E,0xFF6E,0xFF6E}, {0xFF6F,0xFF6F,0xFF6F}, /* FF6E */ - {0xFF70,0xFF70,0xFF70}, {0xFF71,0xFF71,0xFF71}, /* FF70 */ - {0xFF72,0xFF72,0xFF72}, {0xFF73,0xFF73,0xFF73}, /* FF72 */ - {0xFF74,0xFF74,0xFF74}, {0xFF75,0xFF75,0xFF75}, /* FF74 */ - {0xFF76,0xFF76,0xFF76}, {0xFF77,0xFF77,0xFF77}, /* FF76 */ - {0xFF78,0xFF78,0xFF78}, {0xFF79,0xFF79,0xFF79}, /* FF78 */ - {0xFF7A,0xFF7A,0xFF7A}, {0xFF7B,0xFF7B,0xFF7B}, /* FF7A */ - {0xFF7C,0xFF7C,0xFF7C}, {0xFF7D,0xFF7D,0xFF7D}, /* FF7C */ - {0xFF7E,0xFF7E,0xFF7E}, {0xFF7F,0xFF7F,0xFF7F}, /* FF7E */ - {0xFF80,0xFF80,0xFF80}, {0xFF81,0xFF81,0xFF81}, /* FF80 */ - {0xFF82,0xFF82,0xFF82}, {0xFF83,0xFF83,0xFF83}, /* FF82 */ - {0xFF84,0xFF84,0xFF84}, {0xFF85,0xFF85,0xFF85}, /* FF84 */ - {0xFF86,0xFF86,0xFF86}, {0xFF87,0xFF87,0xFF87}, /* FF86 */ - {0xFF88,0xFF88,0xFF88}, {0xFF89,0xFF89,0xFF89}, /* FF88 */ - {0xFF8A,0xFF8A,0xFF8A}, {0xFF8B,0xFF8B,0xFF8B}, /* FF8A */ - {0xFF8C,0xFF8C,0xFF8C}, {0xFF8D,0xFF8D,0xFF8D}, /* FF8C */ - {0xFF8E,0xFF8E,0xFF8E}, {0xFF8F,0xFF8F,0xFF8F}, /* FF8E */ - {0xFF90,0xFF90,0xFF90}, {0xFF91,0xFF91,0xFF91}, /* FF90 */ - {0xFF92,0xFF92,0xFF92}, {0xFF93,0xFF93,0xFF93}, /* FF92 */ - {0xFF94,0xFF94,0xFF94}, {0xFF95,0xFF95,0xFF95}, /* FF94 */ - {0xFF96,0xFF96,0xFF96}, {0xFF97,0xFF97,0xFF97}, /* FF96 */ - {0xFF98,0xFF98,0xFF98}, {0xFF99,0xFF99,0xFF99}, /* FF98 */ - {0xFF9A,0xFF9A,0xFF9A}, {0xFF9B,0xFF9B,0xFF9B}, /* FF9A */ - {0xFF9C,0xFF9C,0xFF9C}, {0xFF9D,0xFF9D,0xFF9D}, /* FF9C */ - {0xFF9E,0xFF9E,0xFF9E}, {0xFF9F,0xFF9F,0xFF9F}, /* FF9E */ - {0xFFA0,0xFFA0,0xFFA0}, {0xFFA1,0xFFA1,0xFFA1}, /* FFA0 */ - {0xFFA2,0xFFA2,0xFFA2}, {0xFFA3,0xFFA3,0xFFA3}, /* FFA2 */ - {0xFFA4,0xFFA4,0xFFA4}, {0xFFA5,0xFFA5,0xFFA5}, /* FFA4 */ - {0xFFA6,0xFFA6,0xFFA6}, {0xFFA7,0xFFA7,0xFFA7}, /* FFA6 */ - {0xFFA8,0xFFA8,0xFFA8}, {0xFFA9,0xFFA9,0xFFA9}, /* FFA8 */ - {0xFFAA,0xFFAA,0xFFAA}, {0xFFAB,0xFFAB,0xFFAB}, /* FFAA */ - {0xFFAC,0xFFAC,0xFFAC}, {0xFFAD,0xFFAD,0xFFAD}, /* FFAC */ - {0xFFAE,0xFFAE,0xFFAE}, {0xFFAF,0xFFAF,0xFFAF}, /* FFAE */ - {0xFFB0,0xFFB0,0xFFB0}, {0xFFB1,0xFFB1,0xFFB1}, /* FFB0 */ - {0xFFB2,0xFFB2,0xFFB2}, {0xFFB3,0xFFB3,0xFFB3}, /* FFB2 */ - {0xFFB4,0xFFB4,0xFFB4}, {0xFFB5,0xFFB5,0xFFB5}, /* FFB4 */ - {0xFFB6,0xFFB6,0xFFB6}, {0xFFB7,0xFFB7,0xFFB7}, /* FFB6 */ - {0xFFB8,0xFFB8,0xFFB8}, {0xFFB9,0xFFB9,0xFFB9}, /* FFB8 */ - {0xFFBA,0xFFBA,0xFFBA}, {0xFFBB,0xFFBB,0xFFBB}, /* FFBA */ - {0xFFBC,0xFFBC,0xFFBC}, {0xFFBD,0xFFBD,0xFFBD}, /* FFBC */ - {0xFFBE,0xFFBE,0xFFBE}, {0xFFBF,0xFFBF,0xFFBF}, /* FFBE */ - {0xFFC0,0xFFC0,0xFFC0}, {0xFFC1,0xFFC1,0xFFC1}, /* FFC0 */ - {0xFFC2,0xFFC2,0xFFC2}, {0xFFC3,0xFFC3,0xFFC3}, /* FFC2 */ - {0xFFC4,0xFFC4,0xFFC4}, {0xFFC5,0xFFC5,0xFFC5}, /* FFC4 */ - {0xFFC6,0xFFC6,0xFFC6}, {0xFFC7,0xFFC7,0xFFC7}, /* FFC6 */ - {0xFFC8,0xFFC8,0xFFC8}, {0xFFC9,0xFFC9,0xFFC9}, /* FFC8 */ - {0xFFCA,0xFFCA,0xFFCA}, {0xFFCB,0xFFCB,0xFFCB}, /* FFCA */ - {0xFFCC,0xFFCC,0xFFCC}, {0xFFCD,0xFFCD,0xFFCD}, /* FFCC */ - {0xFFCE,0xFFCE,0xFFCE}, {0xFFCF,0xFFCF,0xFFCF}, /* FFCE */ - {0xFFD0,0xFFD0,0xFFD0}, {0xFFD1,0xFFD1,0xFFD1}, /* FFD0 */ - {0xFFD2,0xFFD2,0xFFD2}, {0xFFD3,0xFFD3,0xFFD3}, /* FFD2 */ - {0xFFD4,0xFFD4,0xFFD4}, {0xFFD5,0xFFD5,0xFFD5}, /* FFD4 */ - {0xFFD6,0xFFD6,0xFFD6}, {0xFFD7,0xFFD7,0xFFD7}, /* FFD6 */ - {0xFFD8,0xFFD8,0xFFD8}, {0xFFD9,0xFFD9,0xFFD9}, /* FFD8 */ - {0xFFDA,0xFFDA,0xFFDA}, {0xFFDB,0xFFDB,0xFFDB}, /* FFDA */ - {0xFFDC,0xFFDC,0xFFDC}, {0xFFDD,0xFFDD,0xFFDD}, /* FFDC */ - {0xFFDE,0xFFDE,0xFFDE}, {0xFFDF,0xFFDF,0xFFDF}, /* FFDE */ - {0xFFE0,0xFFE0,0xFFE0}, {0xFFE1,0xFFE1,0xFFE1}, /* FFE0 */ - {0xFFE2,0xFFE2,0xFFE2}, {0xFFE3,0xFFE3,0xFFE3}, /* FFE2 */ - {0xFFE4,0xFFE4,0xFFE4}, {0xFFE5,0xFFE5,0xFFE5}, /* FFE4 */ - {0xFFE6,0xFFE6,0xFFE6}, {0xFFE7,0xFFE7,0xFFE7}, /* FFE6 */ - {0xFFE8,0xFFE8,0xFFE8}, {0xFFE9,0xFFE9,0xFFE9}, /* FFE8 */ - {0xFFEA,0xFFEA,0xFFEA}, {0xFFEB,0xFFEB,0xFFEB}, /* FFEA */ - {0xFFEC,0xFFEC,0xFFEC}, {0xFFED,0xFFED,0xFFED}, /* FFEC */ - {0xFFEE,0xFFEE,0xFFEE}, {0xFFEF,0xFFEF,0xFFEF}, /* FFEE */ - {0xFFF0,0xFFF0,0xFFF0}, {0xFFF1,0xFFF1,0xFFF1}, /* FFF0 */ - {0xFFF2,0xFFF2,0xFFF2}, {0xFFF3,0xFFF3,0xFFF3}, /* FFF2 */ - {0xFFF4,0xFFF4,0xFFF4}, {0xFFF5,0xFFF5,0xFFF5}, /* FFF4 */ - {0xFFF6,0xFFF6,0xFFF6}, {0xFFF7,0xFFF7,0xFFF7}, /* FFF6 */ - {0xFFF8,0xFFF8,0xFFF8}, {0xFFF9,0xFFF9,0xFFF9}, /* FFF8 */ - {0xFFFA,0xFFFA,0xFFFA}, {0xFFFB,0xFFFB,0xFFFB}, /* FFFA */ - {0xFFFC,0xFFFC,0xFFFC}, {0xFFFD,0xFFFD,0xFFFD}, /* FFFC */ - {0xFFFE,0xFFFE,0xFFFE}, {0xFFFF,0xFFFF,0xFFFF} /* FFFE */ -}; - -static MY_UNICASE_CHARACTER u520p104[]={ - {0x10400,0x10428,0x10400}, {0x10401,0x10429,0x10401}, /* 10400 */ - {0x10402,0x1042A,0x10402}, {0x10403,0x1042B,0x10403}, /* 10402 */ - {0x10404,0x1042C,0x10404}, {0x10405,0x1042D,0x10405}, /* 10404 */ - {0x10406,0x1042E,0x10406}, {0x10407,0x1042F,0x10407}, /* 10406 */ - {0x10408,0x10430,0x10408}, {0x10409,0x10431,0x10409}, /* 10408 */ - {0x1040A,0x10432,0x1040A}, {0x1040B,0x10433,0x1040B}, /* 1040A */ - {0x1040C,0x10434,0x1040C}, {0x1040D,0x10435,0x1040D}, /* 1040C */ - {0x1040E,0x10436,0x1040E}, {0x1040F,0x10437,0x1040F}, /* 1040E */ - {0x10410,0x10438,0x10410}, {0x10411,0x10439,0x10411}, /* 10410 */ - {0x10412,0x1043A,0x10412}, {0x10413,0x1043B,0x10413}, /* 10412 */ - {0x10414,0x1043C,0x10414}, {0x10415,0x1043D,0x10415}, /* 10414 */ - {0x10416,0x1043E,0x10416}, {0x10417,0x1043F,0x10417}, /* 10416 */ - {0x10418,0x10440,0x10418}, {0x10419,0x10441,0x10419}, /* 10418 */ - {0x1041A,0x10442,0x1041A}, {0x1041B,0x10443,0x1041B}, /* 1041A */ - {0x1041C,0x10444,0x1041C}, {0x1041D,0x10445,0x1041D}, /* 1041C */ - {0x1041E,0x10446,0x1041E}, {0x1041F,0x10447,0x1041F}, /* 1041E */ - {0x10420,0x10448,0x10420}, {0x10421,0x10449,0x10421}, /* 10420 */ - {0x10422,0x1044A,0x10422}, {0x10423,0x1044B,0x10423}, /* 10422 */ - {0x10424,0x1044C,0x10424}, {0x10425,0x1044D,0x10425}, /* 10424 */ - {0x10426,0x1044E,0x10426}, {0x10427,0x1044F,0x10427}, /* 10426 */ - {0x10400,0x10428,0x10400}, {0x10401,0x10429,0x10401}, /* 10428 */ - {0x10402,0x1042A,0x10402}, {0x10403,0x1042B,0x10403}, /* 1042A */ - {0x10404,0x1042C,0x10404}, {0x10405,0x1042D,0x10405}, /* 1042C */ - {0x10406,0x1042E,0x10406}, {0x10407,0x1042F,0x10407}, /* 1042E */ - {0x10408,0x10430,0x10408}, {0x10409,0x10431,0x10409}, /* 10430 */ - {0x1040A,0x10432,0x1040A}, {0x1040B,0x10433,0x1040B}, /* 10432 */ - {0x1040C,0x10434,0x1040C}, {0x1040D,0x10435,0x1040D}, /* 10434 */ - {0x1040E,0x10436,0x1040E}, {0x1040F,0x10437,0x1040F}, /* 10436 */ - {0x10410,0x10438,0x10410}, {0x10411,0x10439,0x10411}, /* 10438 */ - {0x10412,0x1043A,0x10412}, {0x10413,0x1043B,0x10413}, /* 1043A */ - {0x10414,0x1043C,0x10414}, {0x10415,0x1043D,0x10415}, /* 1043C */ - {0x10416,0x1043E,0x10416}, {0x10417,0x1043F,0x10417}, /* 1043E */ - {0x10418,0x10440,0x10418}, {0x10419,0x10441,0x10419}, /* 10440 */ - {0x1041A,0x10442,0x1041A}, {0x1041B,0x10443,0x1041B}, /* 10442 */ - {0x1041C,0x10444,0x1041C}, {0x1041D,0x10445,0x1041D}, /* 10444 */ - {0x1041E,0x10446,0x1041E}, {0x1041F,0x10447,0x1041F}, /* 10446 */ - {0x10420,0x10448,0x10420}, {0x10421,0x10449,0x10421}, /* 10448 */ - {0x10422,0x1044A,0x10422}, {0x10423,0x1044B,0x10423}, /* 1044A */ - {0x10424,0x1044C,0x10424}, {0x10425,0x1044D,0x10425}, /* 1044C */ - {0x10426,0x1044E,0x10426}, {0x10427,0x1044F,0x10427}, /* 1044E */ - {0x10450,0x10450,0x10450}, {0x10451,0x10451,0x10451}, /* 10450 */ - {0x10452,0x10452,0x10452}, {0x10453,0x10453,0x10453}, /* 10452 */ - {0x10454,0x10454,0x10454}, {0x10455,0x10455,0x10455}, /* 10454 */ - {0x10456,0x10456,0x10456}, {0x10457,0x10457,0x10457}, /* 10456 */ - {0x10458,0x10458,0x10458}, {0x10459,0x10459,0x10459}, /* 10458 */ - {0x1045A,0x1045A,0x1045A}, {0x1045B,0x1045B,0x1045B}, /* 1045A */ - {0x1045C,0x1045C,0x1045C}, {0x1045D,0x1045D,0x1045D}, /* 1045C */ - {0x1045E,0x1045E,0x1045E}, {0x1045F,0x1045F,0x1045F}, /* 1045E */ - {0x10460,0x10460,0x10460}, {0x10461,0x10461,0x10461}, /* 10460 */ - {0x10462,0x10462,0x10462}, {0x10463,0x10463,0x10463}, /* 10462 */ - {0x10464,0x10464,0x10464}, {0x10465,0x10465,0x10465}, /* 10464 */ - {0x10466,0x10466,0x10466}, {0x10467,0x10467,0x10467}, /* 10466 */ - {0x10468,0x10468,0x10468}, {0x10469,0x10469,0x10469}, /* 10468 */ - {0x1046A,0x1046A,0x1046A}, {0x1046B,0x1046B,0x1046B}, /* 1046A */ - {0x1046C,0x1046C,0x1046C}, {0x1046D,0x1046D,0x1046D}, /* 1046C */ - {0x1046E,0x1046E,0x1046E}, {0x1046F,0x1046F,0x1046F}, /* 1046E */ - {0x10470,0x10470,0x10470}, {0x10471,0x10471,0x10471}, /* 10470 */ - {0x10472,0x10472,0x10472}, {0x10473,0x10473,0x10473}, /* 10472 */ - {0x10474,0x10474,0x10474}, {0x10475,0x10475,0x10475}, /* 10474 */ - {0x10476,0x10476,0x10476}, {0x10477,0x10477,0x10477}, /* 10476 */ - {0x10478,0x10478,0x10478}, {0x10479,0x10479,0x10479}, /* 10478 */ - {0x1047A,0x1047A,0x1047A}, {0x1047B,0x1047B,0x1047B}, /* 1047A */ - {0x1047C,0x1047C,0x1047C}, {0x1047D,0x1047D,0x1047D}, /* 1047C */ - {0x1047E,0x1047E,0x1047E}, {0x1047F,0x1047F,0x1047F}, /* 1047E */ - {0x10480,0x10480,0x10480}, {0x10481,0x10481,0x10481}, /* 10480 */ - {0x10482,0x10482,0x10482}, {0x10483,0x10483,0x10483}, /* 10482 */ - {0x10484,0x10484,0x10484}, {0x10485,0x10485,0x10485}, /* 10484 */ - {0x10486,0x10486,0x10486}, {0x10487,0x10487,0x10487}, /* 10486 */ - {0x10488,0x10488,0x10488}, {0x10489,0x10489,0x10489}, /* 10488 */ - {0x1048A,0x1048A,0x1048A}, {0x1048B,0x1048B,0x1048B}, /* 1048A */ - {0x1048C,0x1048C,0x1048C}, {0x1048D,0x1048D,0x1048D}, /* 1048C */ - {0x1048E,0x1048E,0x1048E}, {0x1048F,0x1048F,0x1048F}, /* 1048E */ - {0x10490,0x10490,0x10490}, {0x10491,0x10491,0x10491}, /* 10490 */ - {0x10492,0x10492,0x10492}, {0x10493,0x10493,0x10493}, /* 10492 */ - {0x10494,0x10494,0x10494}, {0x10495,0x10495,0x10495}, /* 10494 */ - {0x10496,0x10496,0x10496}, {0x10497,0x10497,0x10497}, /* 10496 */ - {0x10498,0x10498,0x10498}, {0x10499,0x10499,0x10499}, /* 10498 */ - {0x1049A,0x1049A,0x1049A}, {0x1049B,0x1049B,0x1049B}, /* 1049A */ - {0x1049C,0x1049C,0x1049C}, {0x1049D,0x1049D,0x1049D}, /* 1049C */ - {0x1049E,0x1049E,0x1049E}, {0x1049F,0x1049F,0x1049F}, /* 1049E */ - {0x104A0,0x104A0,0x104A0}, {0x104A1,0x104A1,0x104A1}, /* 104A0 */ - {0x104A2,0x104A2,0x104A2}, {0x104A3,0x104A3,0x104A3}, /* 104A2 */ - {0x104A4,0x104A4,0x104A4}, {0x104A5,0x104A5,0x104A5}, /* 104A4 */ - {0x104A6,0x104A6,0x104A6}, {0x104A7,0x104A7,0x104A7}, /* 104A6 */ - {0x104A8,0x104A8,0x104A8}, {0x104A9,0x104A9,0x104A9}, /* 104A8 */ - {0x104AA,0x104AA,0x104AA}, {0x104AB,0x104AB,0x104AB}, /* 104AA */ - {0x104AC,0x104AC,0x104AC}, {0x104AD,0x104AD,0x104AD}, /* 104AC */ - {0x104AE,0x104AE,0x104AE}, {0x104AF,0x104AF,0x104AF}, /* 104AE */ - {0x104B0,0x104B0,0x104B0}, {0x104B1,0x104B1,0x104B1}, /* 104B0 */ - {0x104B2,0x104B2,0x104B2}, {0x104B3,0x104B3,0x104B3}, /* 104B2 */ - {0x104B4,0x104B4,0x104B4}, {0x104B5,0x104B5,0x104B5}, /* 104B4 */ - {0x104B6,0x104B6,0x104B6}, {0x104B7,0x104B7,0x104B7}, /* 104B6 */ - {0x104B8,0x104B8,0x104B8}, {0x104B9,0x104B9,0x104B9}, /* 104B8 */ - {0x104BA,0x104BA,0x104BA}, {0x104BB,0x104BB,0x104BB}, /* 104BA */ - {0x104BC,0x104BC,0x104BC}, {0x104BD,0x104BD,0x104BD}, /* 104BC */ - {0x104BE,0x104BE,0x104BE}, {0x104BF,0x104BF,0x104BF}, /* 104BE */ - {0x104C0,0x104C0,0x104C0}, {0x104C1,0x104C1,0x104C1}, /* 104C0 */ - {0x104C2,0x104C2,0x104C2}, {0x104C3,0x104C3,0x104C3}, /* 104C2 */ - {0x104C4,0x104C4,0x104C4}, {0x104C5,0x104C5,0x104C5}, /* 104C4 */ - {0x104C6,0x104C6,0x104C6}, {0x104C7,0x104C7,0x104C7}, /* 104C6 */ - {0x104C8,0x104C8,0x104C8}, {0x104C9,0x104C9,0x104C9}, /* 104C8 */ - {0x104CA,0x104CA,0x104CA}, {0x104CB,0x104CB,0x104CB}, /* 104CA */ - {0x104CC,0x104CC,0x104CC}, {0x104CD,0x104CD,0x104CD}, /* 104CC */ - {0x104CE,0x104CE,0x104CE}, {0x104CF,0x104CF,0x104CF}, /* 104CE */ - {0x104D0,0x104D0,0x104D0}, {0x104D1,0x104D1,0x104D1}, /* 104D0 */ - {0x104D2,0x104D2,0x104D2}, {0x104D3,0x104D3,0x104D3}, /* 104D2 */ - {0x104D4,0x104D4,0x104D4}, {0x104D5,0x104D5,0x104D5}, /* 104D4 */ - {0x104D6,0x104D6,0x104D6}, {0x104D7,0x104D7,0x104D7}, /* 104D6 */ - {0x104D8,0x104D8,0x104D8}, {0x104D9,0x104D9,0x104D9}, /* 104D8 */ - {0x104DA,0x104DA,0x104DA}, {0x104DB,0x104DB,0x104DB}, /* 104DA */ - {0x104DC,0x104DC,0x104DC}, {0x104DD,0x104DD,0x104DD}, /* 104DC */ - {0x104DE,0x104DE,0x104DE}, {0x104DF,0x104DF,0x104DF}, /* 104DE */ - {0x104E0,0x104E0,0x104E0}, {0x104E1,0x104E1,0x104E1}, /* 104E0 */ - {0x104E2,0x104E2,0x104E2}, {0x104E3,0x104E3,0x104E3}, /* 104E2 */ - {0x104E4,0x104E4,0x104E4}, {0x104E5,0x104E5,0x104E5}, /* 104E4 */ - {0x104E6,0x104E6,0x104E6}, {0x104E7,0x104E7,0x104E7}, /* 104E6 */ - {0x104E8,0x104E8,0x104E8}, {0x104E9,0x104E9,0x104E9}, /* 104E8 */ - {0x104EA,0x104EA,0x104EA}, {0x104EB,0x104EB,0x104EB}, /* 104EA */ - {0x104EC,0x104EC,0x104EC}, {0x104ED,0x104ED,0x104ED}, /* 104EC */ - {0x104EE,0x104EE,0x104EE}, {0x104EF,0x104EF,0x104EF}, /* 104EE */ - {0x104F0,0x104F0,0x104F0}, {0x104F1,0x104F1,0x104F1}, /* 104F0 */ - {0x104F2,0x104F2,0x104F2}, {0x104F3,0x104F3,0x104F3}, /* 104F2 */ - {0x104F4,0x104F4,0x104F4}, {0x104F5,0x104F5,0x104F5}, /* 104F4 */ - {0x104F6,0x104F6,0x104F6}, {0x104F7,0x104F7,0x104F7}, /* 104F6 */ - {0x104F8,0x104F8,0x104F8}, {0x104F9,0x104F9,0x104F9}, /* 104F8 */ - {0x104FA,0x104FA,0x104FA}, {0x104FB,0x104FB,0x104FB}, /* 104FA */ - {0x104FC,0x104FC,0x104FC}, {0x104FD,0x104FD,0x104FD}, /* 104FC */ - {0x104FE,0x104FE,0x104FE}, {0x104FF,0x104FF,0x104FF} /* 104FE */ -}; - - -MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]= -{ - u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, plane06, plane07, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - u520p10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, u520p1D, u520p1E, u520p1F, - NULL, u520p21, NULL, NULL, u520p24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, u520p2C, u520p2D, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, u520pA6, u520pA7, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, u520pFF, - NULL, NULL, NULL, NULL,u520p104, NULL, NULL, NULL, -}; - - -MY_UNICASE_INFO my_unicase_unicode520= -{ - 0x104FF, - my_unicase_pages_unicode520 -}; - - -static inline void -my_tosort_unicode(MY_UNICASE_INFO *uni_plane, my_wc_t *wc, uint flags) -{ - if (*wc <= uni_plane->maxchar) - { - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[*wc >> 8])) - *wc= (flags & MY_CS_LOWER_SORT) ? - page[*wc & 0xFF].tolower : - page[*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - static uint my_casefold_multiply_utf8mbx(CHARSET_INFO *cs) { DBUG_ASSERT(cs->mbminlen == 1 && cs->mbmaxlen >= 3); - if (cs->caseinfo == &my_unicase_unicode520) + if (cs->casefold == &my_casefold_unicode520 || + cs->casefold == &my_casefold_unicode1400 || + cs->casefold == &my_casefold_unicode1400tr) return 2; - if (cs->caseinfo == &my_unicase_turkish) + if (cs->casefold == &my_casefold_turkish) return 2; - if (cs->caseinfo == &my_unicase_default) + if (cs->casefold == &my_casefold_default) return 1; - if (cs->caseinfo == &my_unicase_mysql500) + if (cs->casefold == &my_casefold_mysql500) return 1; DBUG_ASSERT(0); /*Unknown case folding data */ return 1; @@ -4687,7 +147,7 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs, const char *str,const char *str_end, const char *wildstr,const char *wildend, int escape, int w_one, int w_many, - MY_UNICASE_INFO *weights, int recurse_level) + MY_CASEFOLD_INFO *weights, int recurse_level) { int result= -1; /* Not found, using wildcards */ my_wc_t s_wc, w_wc; @@ -4734,8 +194,8 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs, { if (weights) { - my_tosort_unicode(weights, &s_wc, cs->state); - my_tosort_unicode(weights, &w_wc, cs->state); + my_tosort_unicode(weights, &s_wc); + my_tosort_unicode(weights, &w_wc); } if (s_wc != w_wc) return 1; /* No match */ @@ -4803,8 +263,8 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs, return 1; if (weights) { - my_tosort_unicode(weights, &s_wc, cs->state); - my_tosort_unicode(weights, &w_wc, cs->state); + my_tosort_unicode(weights, &s_wc); + my_tosort_unicode(weights, &w_wc); } if (s_wc == w_wc) @@ -4832,7 +292,7 @@ my_wildcmp_unicode(CHARSET_INFO *cs, const char *str,const char *str_end, const char *wildstr,const char *wildend, int escape, int w_one, int w_many, - MY_UNICASE_INFO *weights) + MY_CASEFOLD_INFO *weights) { return my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend, @@ -5207,24 +667,6 @@ static int my_uni_utf8mb3_no_range(CHARSET_INFO *cs __attribute__((unused)), } -static inline void -my_tolower_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8) & 0xFF])) - *wc= page[*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8) & 0xFF])) - *wc= page[*wc & 0xFF].toupper; -} - - static size_t my_caseup_utf8mb3(CHARSET_INFO *cs, const char *src, size_t srclen, char *dst, size_t dstlen) @@ -5233,13 +675,13 @@ static size_t my_caseup_utf8mb3(CHARSET_INFO *cs, int srcres, dstres; const char *srcend= src + srclen; char *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1); while ((src < srcend) && (srcres= my_utf8mb3_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0) { - my_toupper_utf8mb3(uni_plane, &wc); + my_toupper_unicode_bmp(uni_plane, &wc); if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; @@ -5255,12 +697,12 @@ static void my_hash_sort_utf8mb3_nopad(CHARSET_INFO *cs, const uchar *s, size_t my_wc_t wc; int res; const uchar *e= s+slen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; register ulong m1= *nr1, m2= *nr2; while ((s < e) && (res=my_utf8mb3_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 ) { - my_tosort_unicode(uni_plane, &wc, cs->state); + my_tosort_unicode(uni_plane, &wc); MY_HASH_ADD_16(m1, m2, wc); s+= res; } @@ -5286,13 +728,13 @@ static size_t my_caseup_str_utf8mb3(CHARSET_INFO *cs, char *src) my_wc_t wc; int srcres, dstres; char *dst= src, *dst0= src; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(cs->cset->caseup_multiply(cs) == 1); while (*src && (srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0) { - my_toupper_utf8mb3(uni_plane, &wc); + my_toupper_unicode_bmp(uni_plane, &wc); if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; @@ -5311,13 +753,13 @@ static size_t my_casedn_utf8mb3(CHARSET_INFO *cs, int srcres, dstres; const char *srcend= src + srclen; char *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1); while ((src < srcend) && (srcres= my_utf8mb3_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0) { - my_tolower_utf8mb3(uni_plane, &wc); + my_tolower_unicode_bmp(uni_plane, &wc); if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; @@ -5332,13 +774,13 @@ static size_t my_casedn_str_utf8mb3(CHARSET_INFO *cs, char *src) my_wc_t wc; int srcres, dstres; char *dst= src, *dst0= src; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(cs->cset->casedn_multiply(cs) == 1); while (*src && (srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0) { - my_tolower_utf8mb3(uni_plane, &wc); + my_tolower_unicode_bmp(uni_plane, &wc); if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; @@ -5385,7 +827,7 @@ static size_t my_casedn_str_utf8mb3(CHARSET_INFO *cs, char *src) static int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; while (s[0] && t[0]) { my_wc_t s_wc,t_wc; @@ -5397,7 +839,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) It represents a single byte character. Convert it into weight according to collation. */ - s_wc= my_unicase_default_page00[(uchar) s[0]].tolower; + s_wc= my_u300_tolower_7bit((uchar) s[0]); s++; } else @@ -5430,7 +872,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) s+= res; /* Convert Unicode code into weight according to collation */ - my_tolower_utf8mb3(uni_plane, &s_wc); + my_tolower_unicode_bmp(uni_plane, &s_wc); } @@ -5439,7 +881,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) if ((uchar) t[0] < 128) { /* Convert single byte character into weight */ - t_wc= my_unicase_default_page00[(uchar) t[0]].tolower; + t_wc= my_u300_tolower_7bit((uchar) t[0]); t++; } else @@ -5450,7 +892,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) t+= res; /* Convert code into weight */ - my_tolower_utf8mb3(uni_plane, &t_wc); + my_tolower_unicode_bmp(uni_plane, &t_wc); } /* Now we have two weights, let's compare them */ @@ -5467,7 +909,7 @@ int my_wildcmp_utf8mb3(CHARSET_INFO *cs, const char *wildstr,const char *wildend, int escape, int w_one, int w_many) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, escape,w_one,w_many,uni_plane); } @@ -5502,33 +944,32 @@ int my_charlen_utf8mb3(CHARSET_INFO *cs __attribute__((unused)), static inline int my_weight_mb1_utf8mb3_general_ci(uchar b) { - return (int) my_unicase_default_page00[b & 0xFF].sort; + return (int) weight_general_ci_page00[b & 0xFF]; } static inline int my_weight_mb2_utf8mb3_general_ci(uchar b0, uchar b1) { my_wc_t wc= UTF8MB2_CODE(b0, b1); - MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; + const uint16 *page= weight_general_ci_index[wc >> 8]; /* 2-byte utf8 sequences encode Unicode characters up to U+07FF. - my_unicase_default_pages[N] has non-NULL page pointers + weight_general_ci_index[N] has non-NULL page pointers for all N in the range [0..7]. - - my_unicase_default_pages[0..5] point to real translation data - - my_unicase_default_pages[6..7] point to dummy pages + - weight_general_ci_index[0..5] point to real translation data + - weight_general_ci_index[6..7] point to dummy pages (without real translation). By adding these dummy pages we can avoid testing 'page' against NULL. This gives up to 20% performance improvement. */ - return (int) page[wc & 0xFF].sort; + return (int) page[wc & 0xFF]; } static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2) { my_wc_t wc= UTF8MB3_CODE(b0, b1, b2); - MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); + return my_general_ci_bmp_char_to_weight((uint16) wc); } @@ -5537,9 +978,7 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2) #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e) #define OPTIMIZE_ASCII 1 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_bmp_char_to_weight(x) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) #define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) @@ -5560,19 +999,19 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2) static inline int my_weight_mb1_utf8mb3_general_mysql500_ci(uchar b) { - return (int) my_unicase_mysql500_page00[b & 0xFF].sort; + return (int) weight_general_mysql500_ci_page00[b & 0xFF]; } static inline int my_weight_mb2_utf8mb3_general_mysql500_ci(uchar b0, uchar b1) { my_wc_t wc= UTF8MB2_CODE(b0, b1); - MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8]; + const uint16 *page= weight_general_mysql500_ci_index[wc >> 8]; /* `page` should never be NULL for 2-byte utf8 characters. See comments in my_weight_mb2_utf8mb3_general_ci(). */ - return (int) page[wc & 0xFF].sort; + return (int) page[wc & 0xFF]; } @@ -5580,8 +1019,16 @@ static inline int my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2) { my_wc_t wc= UTF8MB3_CODE(b0, b1, b2); - MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8]; - return (int) (page ? page[wc & 0xFF].sort : wc); + const uint16 *page= weight_general_mysql500_ci_index[wc >> 8]; + return (int) (page ? page[wc & 0xFF] : wc); +} + + +static inline int +my_wc_weight_utf8mb3_general_mysql500_ci(my_wc_t wc) +{ + const uint16 *page= weight_general_mysql500_ci_index[wc >> 8]; + return (int) (page ? page[wc & 0xFF] : wc); } @@ -5589,10 +1036,8 @@ my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2) #define DEFINE_STRNXFRM_UNICODE #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e) #define OPTIMIZE_ASCII 1 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_mysql500_page00 -#define UNICASE_PAGES my_unicase_mysql500_pages #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) +#define MY_WC_WEIGHT(x) my_wc_weight_utf8mb3_general_mysql500_ci(x) #define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_mysql500_ci(x) #define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_mysql500_ci(x,y) #define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_mysql500_ci(x,y,z) @@ -5810,8 +1255,7 @@ struct charset_info_st my_charset_utf8mb3_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5842,8 +1286,7 @@ struct charset_info_st my_charset_utf8mb3_general_mysql500_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_mysql500, /* caseinfo */ + &my_casefold_mysql500, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5874,8 +1317,7 @@ struct charset_info_st my_charset_utf8mb3_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5906,8 +1348,7 @@ struct charset_info_st my_charset_utf8mb3_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ + &my_casefold_default, /* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5938,8 +1379,7 @@ struct charset_info_st my_charset_utf8mb3_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5975,7 +1415,7 @@ static int my_strnncoll_utf8mb3_cs(CHARSET_INFO *cs, const uchar *te=t+tlen; int save_diff = 0; int diff; - MY_UNICASE_INFO *const *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *const *uni_plane= cs->casefold; while ( s < se && t < te ) { @@ -5994,8 +1434,8 @@ static int my_strnncoll_utf8mb3_cs(CHARSET_INFO *cs, save_diff = ((int)s_wc) - ((int)t_wc); } - my_tosort_unicode(uni_plane, &s_wc, cs->state); - my_tosort_unicode(uni_plane, &t_wc, cs->state); + my_tosort_unicode(uni_plane, &s_wc); + my_tosort_unicode(uni_plane, &t_wc); if ( s_wc != t_wc ) { @@ -6018,7 +1458,7 @@ static int my_strnncollsp_utf8mb3_cs(CHARSET_INFO *cs, const uchar *se= s + slen; const uchar *te= t + tlen; int save_diff= 0; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; while ( s < se && t < te ) { @@ -6036,8 +1476,8 @@ static int my_strnncollsp_utf8mb3_cs(CHARSET_INFO *cs, save_diff = ((int)s_wc) - ((int)t_wc); } - my_tosort_unicode(uni_plane, &s_wc, cs->state); - my_tosort_unicode(uni_plane, &t_wc, cs->state); + my_tosort_unicode(uni_plane, &s_wc); + my_tosort_unicode(uni_plane, &t_wc); if ( s_wc != t_wc ) { @@ -6102,8 +1542,7 @@ struct charset_info_st my_charset_utf8mb3_general_cs= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -7376,9 +2815,7 @@ my_wc_to_printable_filename(CHARSET_INFO *cs, my_wc_t wc, #define DEFINE_STRNXFRM_UNICODE #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_filename(cs, pwc, s, e) #define OPTIMIZE_ASCII 0 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x) /* #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) @@ -7461,8 +2898,7 @@ struct charset_info_st my_charset_filename= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -7678,30 +3114,6 @@ my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)), } -static inline void -my_tolower_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - if (*wc <= uni_plane->maxchar) - { - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8)])) - *wc= page[*wc & 0xFF].tolower; - } -} - - -static inline void -my_toupper_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) -{ - if (*wc <= uni_plane->maxchar) - { - MY_UNICASE_CHARACTER *page; - if ((page= uni_plane->page[(*wc >> 8)])) - *wc= page[*wc & 0xFF].toupper; - } -} - - static size_t my_caseup_utf8mb4(CHARSET_INFO *cs, const char *src, size_t srclen, char *dst, size_t dstlen) @@ -7710,14 +3122,14 @@ my_caseup_utf8mb4(CHARSET_INFO *cs, const char *src, size_t srclen, int srcres, dstres; const char *srcend= src + srclen; char *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1); while ((src < srcend) && (srcres= my_mb_wc_utf8mb4(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0) { - my_toupper_utf8mb4(uni_plane, &wc); + my_toupper_unicode(uni_plane, &wc); if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; @@ -7734,12 +3146,12 @@ my_hash_sort_utf8mb4_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen, my_wc_t wc; int res; const uchar *e= s + slen; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; register ulong m1= *nr1, m2= *nr2; while ((res= my_mb_wc_utf8mb4(cs, &wc, (uchar*) s, (uchar*) e)) > 0) { - my_tosort_unicode(uni_plane, &wc, cs->state); + my_tosort_unicode(uni_plane, &wc); MY_HASH_ADD_16(m1, m2, (uint) (wc & 0xFFFF)); if (wc > 0xFFFF) { @@ -7778,13 +3190,13 @@ my_caseup_str_utf8mb4(CHARSET_INFO *cs, char *src) my_wc_t wc; int srcres, dstres; char *dst= src, *dst0= src; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(cs->cset->caseup_multiply(cs) == 1); while (*src && (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0) { - my_toupper_utf8mb4(uni_plane, &wc); + my_toupper_unicode(uni_plane, &wc); if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; @@ -7804,14 +3216,14 @@ my_casedn_utf8mb4(CHARSET_INFO *cs, int srcres, dstres; const char *srcend= src + srclen; char *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1); while ((src < srcend) && (srcres= my_mb_wc_utf8mb4(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) { - my_tolower_utf8mb4(uni_plane, &wc); + my_tolower_unicode(uni_plane, &wc); if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; @@ -7827,13 +3239,13 @@ my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src) my_wc_t wc; int srcres, dstres; char *dst= src, *dst0= src; - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; DBUG_ASSERT(cs->cset->casedn_multiply(cs) == 1); while (*src && (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0) { - my_tolower_utf8mb4(uni_plane, &wc); + my_tolower_unicode(uni_plane, &wc); if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; @@ -7876,7 +3288,7 @@ my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src) static int my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) { - MY_UNICASE_INFO *uni_plane= cs->caseinfo; + MY_CASEFOLD_INFO *uni_plane= cs->casefold; while (s[0] && t[0]) { my_wc_t s_wc,t_wc; @@ -7888,7 +3300,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) It represents a single byte character. Convert it into weight according to collation. */ - s_wc= my_unicase_default_page00[(uchar) s[0]].tolower; + s_wc= my_u300_tolower_7bit((uchar) s[0]); s++; } else @@ -7903,7 +3315,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) return strcmp(s, t); s+= res; - my_tolower_utf8mb4(uni_plane, &s_wc); + my_tolower_unicode(uni_plane, &s_wc); } @@ -7912,7 +3324,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) if ((uchar) t[0] < 128) { /* Convert single byte character into weight */ - t_wc= my_unicase_default_page00[(uchar) t[0]].tolower; + t_wc= my_u300_tolower_7bit((uchar) t[0]); t++; } else @@ -7922,7 +3334,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) return strcmp(s, t); t+= res; - my_tolower_utf8mb4(uni_plane, &t_wc); + my_tolower_unicode(uni_plane, &t_wc); } /* Now we have two weights, let's compare them */ @@ -7940,7 +3352,7 @@ my_wildcmp_utf8mb4(CHARSET_INFO *cs, int escape, int w_one, int w_many) { return my_wildcmp_unicode(cs, str, strend, wildstr, wildend, - escape, w_one, w_many, cs->caseinfo); + escape, w_one, w_many, cs->casefold); } @@ -7987,9 +3399,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb4_quick(pwc, s, e) #define OPTIMIZE_ASCII 1 -#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR -#define UNICASE_PAGE0 my_unicase_default_page00 -#define UNICASE_PAGES my_unicase_default_pages +#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x) #define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB1(b0) my_weight_mb1_utf8mb3_general_ci(b0) @@ -8175,8 +3585,7 @@ struct charset_info_st my_charset_utf8mb4_general_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -8208,8 +3617,7 @@ struct charset_info_st my_charset_utf8mb4_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -8241,8 +3649,7 @@ struct charset_info_st my_charset_utf8mb4_general_nopad_ci= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -8274,8 +3681,7 @@ struct charset_info_st my_charset_utf8mb4_nopad_bin= NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - NULL, /* casefold */ - &my_unicase_default,/* caseinfo */ + &my_casefold_default,/* casefold */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c index 86b7de97010..a908bdd2b95 100644 --- a/strings/ctype-win1250ch.c +++ b/strings/ctype-win1250ch.c @@ -711,7 +711,6 @@ struct charset_info_st my_charset_cp1250_czech_cs = tab_cp1250_uni, /* tab_to_uni */ idx_uni_cp1250, /* tab_from_uni */ NULL, /* casefold */ - &my_unicase_default, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 2, /* strxfrm_multiply */ diff --git a/strings/strcoll.inl b/strings/strcoll.inl index ce220bebadb..a70009991df 100644 --- a/strings/strcoll.inl +++ b/strings/strcoll.inl @@ -490,16 +490,12 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs, #error OPTIMIZE_ASCII must be defined for DEFINE_STRNXFRM_UNICODE #endif -#ifndef UNICASE_MAXCHAR -#error UNICASE_MAXCHAR must be defined for DEFINE_STRNXFRM_UNICODE +#if OPTIMIZE_ASCII && !defined(WEIGHT_MB1) +#error WEIGHT_MB1 must be defined for DEFINE_STRNXFRM_UNICODE #endif -#ifndef UNICASE_PAGE0 -#error UNICASE_PAGE0 must be defined for DEFINE_STRNXFRM_UNICODE -#endif - -#ifndef UNICASE_PAGES -#error UNICASE_PAGES must be defined for DEFINE_STRNXFRM_UNICODE +#ifndef MY_WC_WEIGHT +#error MY_WC_WEIGHT must be defined for DEFINE_STRNXFRM_UNICODE #endif @@ -514,7 +510,6 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)), DBUG_ASSERT(src || !se); DBUG_ASSERT((cs->state & MY_CS_LOWER_SORT) == 0); - DBUG_ASSERT(0x7F <= UNICASE_MAXCHAR); for (; dst < de && *nweights; (*nweights)--) { @@ -524,7 +519,7 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)), break; if (src[0] <= 0x7F) { - wc= UNICASE_PAGE0[*src++].sort; + wc= WEIGHT_MB1(*src++); PUT_WC_BE2_HAVE_1BYTE(dst, de, wc); continue; } @@ -532,14 +527,7 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)), if ((res= MY_MB_WC(cs, &wc, src, se)) <= 0) break; src+= res; - if (wc <= UNICASE_MAXCHAR) - { - MY_UNICASE_CHARACTER *page; - if ((page= UNICASE_PAGES[wc >> 8])) - wc= page[wc & 0xFF].sort; - } - else - wc= MY_CS_REPLACEMENT_CHARACTER; + wc= MY_WC_WEIGHT(wc); PUT_WC_BE2_HAVE_1BYTE(dst, de, wc); } return dst - dst0; @@ -722,9 +710,7 @@ MY_FUNCTION_NAME(strnxfrm_nopad)(CHARSET_INFO *cs, #undef MY_FUNCTION_NAME #undef MY_MB_WC #undef OPTIMIZE_ASCII -#undef UNICASE_MAXCHAR -#undef UNICASE_PAGE0 -#undef UNICASE_PAGES +#undef MY_WC_WEIGHT #undef WEIGHT_ILSEQ #undef WEIGHT_MB1 #undef WEIGHT_MB2 diff --git a/strings/unidata-dump.c b/strings/unidata-dump.c new file mode 100644 index 00000000000..5ecc8cb0c8c --- /dev/null +++ b/strings/unidata-dump.c @@ -0,0 +1,1110 @@ +const char COPYING[]= "\ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.\n\ + Copyright (c) 2009, 2023, MariaDB Corporation.\n\ +\n\ + This program is free software; you can redistribute it and/or modify\n\ + it under the terms of the GNU General Public License as published by\n\ + the Free Software Foundation; version 2 of the License.\n\ +\n\ + This program is distributed in the hope that it will be useful,\n\ + but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ + GNU General Public License for more details.\n\ +\n\ + You should have received a copy of the GNU General Public License\n\ + along with this program; if not, write to the Free Software\n\ + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA\n\ +*/\n"; + +#include +#include +#include + +#define MAX_UNI_CHAR 0x10FFFF +#define MAX_UNI_PAGE 0x10FF + +#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) + + +typedef unsigned int my_wchar_t; + +/* Character types, as in m_ctype.h */ +#define _MY_U 01 /* Upper case */ +#define _MY_L 02 /* Lower case */ +#define _MY_NMR 04 /* Numeral (digit) */ +#define _MY_SPC 010 /* Spacing character */ +#define _MY_PNT 020 /* Punctuation */ +#define _MY_CTR 040 /* Control character */ +#define _MY_B 0100 /* Blank */ +#define _MY_X 0200 /* heXadecimal digit */ + +#define CT_MAX _MY_X +#define CT_CJK _MY_L | _MY_U +#define CT_HANGUL _MY_L | _MY_U +#define CT_NONE 0 + + +/* Decomposition types */ +typedef enum +{ + DT_UNKNOWN, + DT_FONT, + DT_NOBREAK, + DT_INITIAL, + DT_MEDIAL, + DT_FINAL, + DT_ISOLATED, + DT_CIRCLE, + DT_SUPER, + DT_SUB, + DT_VERTICAL, + DT_WIDE, + DT_NARROW, + DT_SMALL, + DT_SQUARE, + DT_FRACTION, + DT_COMPAT +} decomposition_type_t; + + +typedef enum +{ + PAGE_DATA_USELESS= 0, + PAGE_DATA_IMPORTANT= 1, + PAGE_DATA_DUMMY= 2 +} page_data_type_t; + + +typedef struct +{ + page_data_type_t page_tab; + int page_overridden; + int page_ctype; +} PAGE_STAT; + + +typedef struct +{ + const char *mode_name; + int print_ctype; + int print_toupper; + int print_tolower; + int print_noaccent; + int print_noaccent_tolower; + int print_noaccent_toupper; + int print_curly_brackets_in_items; + int print_curly_brackets_in_index; + int chars_per_line; + int single_array; + int pages_per_line_in_index; + int const_data; + const char *page_data_type_name; + const char *page_name; + const char *page_name_derived; + const char *index_data_type_name; + const char *index_name; +} UNIDATA_OPT_MODE; + + +typedef struct +{ + my_wchar_t max_char; + my_wchar_t dummy_pages_codepoint_max; + const char *filename; + UNIDATA_OPT_MODE mode; +} UNIDATA_OPT; + + +my_wchar_t npages_by_opt(const UNIDATA_OPT *opt) +{ + return (opt->max_char + 1) / 256; +} + + +typedef struct my_ctype_name_st +{ + const char *name; + int val; + int to_be_decomposed; +} MY_CTYPE_NAME_ST; + + +static MY_CTYPE_NAME_ST my_ctype_name[]= +{ + {"Lu", _MY_U, 1}, /* Letter, Uppercase */ + {"Ll", _MY_L, 1}, /* Letter, Lowercase */ + {"Lt", _MY_U, 1}, /* Letter, Titlecase */ + {"Lo", _MY_L, 1}, /* Letter, other */ + {"Lm", _MY_L, 0}, /* Letter, Modifier */ + + {"Nd", _MY_NMR, 0}, /* Number, Decimal Digit */ + {"Nl", _MY_NMR|_MY_U|_MY_L, 0}, /* Number, Letter */ + {"No", _MY_NMR|_MY_PNT, 0}, /* Number, Other */ + + {"Mn", _MY_L|_MY_PNT, 0}, /* Mark, Nonspacing */ + {"Mc", _MY_L|_MY_PNT, 1}, /* Mark, Spacing Combining */ + {"Me", _MY_L|_MY_PNT, 0}, /* Mark, Enclosing */ + + {"Pc", _MY_PNT, 0}, /* Punctuation, Connector */ + {"Pd", _MY_PNT, 0}, /* Punctuation, Dash */ + {"Ps", _MY_PNT, 0}, /* Punctuation, Open */ + {"Pe", _MY_PNT, 0}, /* Punctuation, Close */ + {"Pi", _MY_PNT, 0}, /* Punctuation, Initial quote */ + {"Pf", _MY_PNT, 0}, /* Punctuation, Final quote */ + {"Po", _MY_PNT, 0}, /* Punctuation, Other */ + + {"Sm", _MY_PNT, 0}, /* Symbol, Math */ + {"Sc", _MY_PNT, 0}, /* Symbol, Currency */ + {"Sk", _MY_PNT, 0}, /* Symbol, Modifier */ + {"So", _MY_PNT, 0}, /* Symbol, Other */ + + {"Zs", _MY_SPC, 0}, /* Separator, Space */ + {"Zl", _MY_SPC, 0}, /* Separator, Line */ + {"Zp", _MY_SPC, 0}, /* Separator, Paragraph */ + + {"Cc", _MY_CTR, 0}, /* Other, Control */ + {"Cf", _MY_CTR, 0}, /* Other, Format */ + {"Cs", _MY_CTR, 0}, /* Other, Surrogate */ + {"Co", _MY_CTR, 0}, /* Other, Private Use */ + {"Cn", _MY_CTR, 0}, /* Other, Not Assigned */ + {NULL, 0, 0} +}; + + +static const MY_CTYPE_NAME_ST * +ctype_name_st_find(my_wchar_t codepoint, const char *tok) +{ + MY_CTYPE_NAME_ST *p; + for (p= my_ctype_name; p->name; p++) + { + if (!strncasecmp(p->name, tok, 2)) + return p; + } + return NULL; +} + + +static int +ctype_name_st_to_num(const MY_CTYPE_NAME_ST *st, my_wchar_t codepoint) +{ + if ((codepoint >= 'a' && codepoint <= 'z') || + (codepoint >= 'A' && codepoint <= 'Z')) + return st->val | _MY_X; + return st->val; +} + + +static UNIDATA_OPT opt_caseinfo= +{ + 0x10FFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "caseinfo", /* mode name */ + 0, /* print_ctype */ + 1, /* print_toupper */ + 1, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 1, /* print_noaccent_toupper */ + 1, /* print_curly_brackets_in_items */ + 0, /* print_curly_brackets_in_index */ + 2, /* chars_per_line */ + 0, /* single_array */ + 8, /* pages_per_line_in_index */ + 0, /* const_data */ + "MY_UNICASE_CHARACTER", /* page_data_type_name */ + "plane", /* page_name */ + NULL, /* page_name_derived */ + "MY_UNICASE_CHARACTER *", /* index_data_type_name */ + "my_unicase_default_pages" /* index_name */ + } +}; + + +static UNIDATA_OPT opt_casefold= +{ + 0x10FFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "casefold", /* mode name */ + 0, /* print_ctype */ + 1, /* print_toupper */ + 1, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 0, /* print_noaccent_toupper */ + 1, /* print_curly_brackets_in_items */ + 0, /* print_curly_brackets_in_index */ + 2, /* chars_per_line */ + 0, /* single_array */ + 8, /* pages_per_line_in_index */ + 1, /* const_data */ + "MY_CASEFOLD_CHARACTER" , /* page_data_type_name */ + "page", /* page_name */ + NULL, /* page_name_derived */ + "MY_CASEFOLD_CHARACTER *", /* index_data_type_name */ + "my_casefold_default_pages" /* index_name */ + } +}; + + +static UNIDATA_OPT opt_casefold_tr= +{ + 0x10FFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "casefold-tr", /* mode name */ + 0, /* print_ctype */ + 1, /* print_toupper */ + 1, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 0, /* print_noaccent_toupper */ + 1, /* print_curly_brackets_in_items */ + 0, /* print_curly_brackets_in_index */ + 2, /* chars_per_line */ + 0, /* single_array */ + 8, /* pages_per_line_in_index */ + 1, /* const_data */ + "MY_CASEFOLD_CHARACTER" , /* page_data_type_name */ + "page_tr", /* page_name */ + "page", /* page_name_derived */ + "MY_CASEFOLD_CHARACTER *", /* index_data_type_name */ + "my_casefold_tr_pages" /* index_name */ + } +}; + + +static UNIDATA_OPT opt_weight_general_ci= +{ + 0xFFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "weight_general_ci", /* mode name */ + 0, /* print_ctype */ + 0, /* print_toupper */ + 0, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 1, /* print_noaccent_toupper */ + 0, /* print_curly_brackets_in_items */ + 0, /* print_curly_brackets_in_index */ + 8, /* chars_per_line */ + 0, /* single_array */ + 2, /* pages_per_line_in_index */ + 1, /* const_data */ + "uint16", /* page_data_type_name */ + "weight_general_ci_page", /* page_name */ + NULL, /* page_name_derived */ + "uint16 *", /* index_data_type_name */ + "weight_general_ci_index" /* index_name */ + } +}; + + +static UNIDATA_OPT opt_weight_general_mysql500_ci= +{ + 0xFFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "weight_general_mysql500_ci", /* mode name */ + 0, /* print_ctype */ + 0, /* print_toupper */ + 0, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 1, /* print_noaccent_toupper */ + 0, /* print_curly_brackets_in_items */ + 0, /* print_curly_brackets_in_index */ + 8, /* chars_per_line */ + 0, /* single_array */ + 2, /* pages_per_line_in_index */ + 1, /* const_data */ + "uint16", /* page_data_type_name */ + "weight_general_mysql500_ci_page", /* page_name */ + "weight_general_ci_page", /* page_name_derived */ + "uint16 *", /* index_data_type_name */ + "weight_general_mysql500_ci_index" /* index_name */ + } +}; + + +static UNIDATA_OPT opt_ctype= +{ + 0x10FFFF, /* max_char */ + 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */ + NULL, /*filename*/ + { + "ctype", /* mode name */ + 1, /* print_ctype */ + 0, /* print_toupper */ + 0, /* print_tolower */ + 0, /* print_noaccent */ + 0, /* print_noaccent_tolower */ + 0, /* print_noaccent_toupper */ + 0, /* print_curly_brackets_in_items */ + 1, /* print_curly_brackets_in_index */ + 16, /* chars_per_line */ + 0, /* single_array */ + 1, /* pages_per_line_in_index */ + 1, /* const_data */ + "unsigned char", /* page_data_type_name */ + "uctype_page", /* page_name */ + NULL, /* page_name_derived */ + "MY_UNI_CTYPE", /* index_data_type_name */ + "my_uni_ctype" /* index_name */ + } +}; + + +int opt_set_mode(UNIDATA_OPT *to, const char *name_and_value, const char *value) +{ + if (!strcmp(value, "casefold")) + { + to->mode= opt_casefold.mode; + return 0; + } + else if (!strcmp(value, "casefold-tr")) + { + to->mode= opt_casefold_tr.mode; + return 0; + } + else if (!strcmp(value, "caseinfo")) + { + to->mode= opt_caseinfo.mode; + return 0; + } + else if (!strcmp(value, "weight_general_ci")) + { + to->mode= opt_weight_general_ci.mode; + return 0; + } + else if (!strcmp(value, "weight_general_mysql500_ci")) + { + to->mode= opt_weight_general_mysql500_ci.mode; + return 0; + } + else if (!strcmp(value, "ctype")) + { + to->mode= opt_ctype.mode; + return 0; + } + fprintf(stderr, "Bad option: %s\n", name_and_value); + return 1; +} + + +static decomposition_type_t +get_decomposition_type(const char *str) +{ + if (!strcmp(str, "")) return DT_FONT; + if (!strcmp(str, "")) return DT_NOBREAK; + if (!strcmp(str, "")) return DT_INITIAL; + if (!strcmp(str, "")) return DT_MEDIAL; + if (!strcmp(str, "")) return DT_FINAL; + if (!strcmp(str, "")) return DT_ISOLATED; + if (!strcmp(str, "")) return DT_CIRCLE; + if (!strcmp(str, "")) return DT_SUPER; + if (!strcmp(str, "")) return DT_SUB; + if (!strcmp(str, "")) return DT_VERTICAL; + if (!strcmp(str, "")) return DT_WIDE; + if (!strcmp(str, "")) return DT_NARROW; + if (!strcmp(str, "")) return DT_SMALL; + if (!strcmp(str, "")) return DT_SQUARE; + if (!strcmp(str, "")) return DT_FRACTION; + if (!strcmp(str, "")) return DT_COMPAT; + return DT_UNKNOWN; +} + + +#define MAX_DECOMP 20 + + +typedef struct +{ + int ctype; + int toupper; + int tolower; + int noaccent; + int noaccent_tolower; + int noaccent_toupper; + int decomp_type; + int decomp[MAX_DECOMP]; + int to_be_decomposed; +} UNIDATA_CHAR; + + + +/************* Initialization functions *********/ + + +static int +strip_accent(UNIDATA_CHAR *code, int i) +{ + if (code[i].decomp[0] && + code[i].decomp[1] >= 0x0300 && + code[i].decomp[1] <= 0x036F && + code[i].decomp[2] == 0) + return strip_accent(code, code[i].decomp[0]); + return i; +} + + +static void +set_noaccent(const UNIDATA_OPT *opt, UNIDATA_CHAR *code) +{ + my_wchar_t i; + for (i= 0; i <= opt->max_char; i++) + { + code[i].noaccent= strip_accent(code, i); + } +} + + +static void +set_noaccent_tolower(const UNIDATA_OPT *opt, UNIDATA_CHAR *code) +{ + my_wchar_t i; + for (i= 0; i <= opt->max_char; i++) + { + code[i].noaccent_tolower= code[code[i].noaccent].tolower; + } +} + + +static void +set_noaccent_toupper(const UNIDATA_OPT *opt, UNIDATA_CHAR *code) +{ + my_wchar_t i; + for (i= 0; i <= opt->max_char; i++) + { + code[i].noaccent_toupper= code[code[i].noaccent].toupper; + } +} + + +static void +set_default_case_folding(const UNIDATA_OPT *opt, UNIDATA_CHAR *code) +{ + my_wchar_t i; + for (i= 0; i <= opt->max_char; i++) + { + code[i].tolower= i; + code[i].toupper= i; + } +} + + +/* + Fill ideographs +*/ + +static void +fill_cjk(UNIDATA_CHAR *code) +{ + size_t i; + /* CJK Ideographs Extension A (U+3400 - U+4DB5) */ + for(i=0x3400;i<=0x4DB5;i++) + { + code[i].tolower=i; + code[i].ctype= CT_CJK; + } + /* CJK Ideographs (U+4E00 - U+9FA5) */ + for(i=0x4E00;i<=0x9FA5;i++) + { + code[i].tolower=i; + code[i].ctype= CT_CJK; + } + /* Hangul Syllables (U+AC00 - U+D7A3) */ + for(i=0xAC00;i<=0xD7A3;i++) + { + code[i].tolower=i; + code[i].ctype= CT_HANGUL; + } +} + + +/************* Loading functions ***************/ + + +static void handle_general_category(const UNIDATA_OPT *opt, + UNIDATA_CHAR *ch, + const char *tok, + my_wchar_t codepoint) +{ + /* + TODO: check if ctype is set correctly. + A difference can break fulltext indexes. + */ + + const MY_CTYPE_NAME_ST *ct= ctype_name_st_find( + (my_wchar_t) codepoint, tok); + if (ct) + { + ch->ctype|= ctype_name_st_to_num( + ct, + (my_wchar_t) codepoint); + ch->to_be_decomposed= ct->to_be_decomposed; + } +} + + +int handle_decomposition(UNIDATA_CHAR *ch, char *tok, const char *str) +{ + char *lt, *part; + size_t num; + + if (!ch->to_be_decomposed) + return 0; /* Decompose only letters */ + + for (part= strtok_r(tok, " ", <), num= 0; + part; + part= strtok_r(NULL, " ", <)) + { + char *end; + if (part[0] == '<') + { + if ((ch->decomp_type= get_decomposition_type(part)) == DT_UNKNOWN) + { + fprintf(stderr, "Unknown decomposition type:\n%s\n", str); + return 1; + } + continue; + } + + if (num + 1 >= MAX_DECOMP) + { + fprintf(stderr, "Too many decomposition parts:\n%s\n", str); + return 1; + } + ch->decomp[num]= strtol(part,&end,16); + ch->decomp[num+1]= 0; + num++; + } + return 0; +} + + +static int +parse_unidata_line(const UNIDATA_OPT *opt, char *str, UNIDATA_CHAR *unidata) +{ + unsigned long codepoint= 0; + int fieldno= 0; + char *s; + + for (s= str; *s; fieldno++) + { + char *tok= s, *e; + + if ((e= strchr(s,';'))) + { + *e= '\0'; + s= e + 1; + } + else + { + s+= strlen(s); + } + + switch (fieldno) + { + case 0: /* Code point */ + codepoint= strtoul(tok, NULL, 16); + if (codepoint > opt->max_char) + return 1; + break; + case 1: /* name */ + break; + case 2: /* general category */ + handle_general_category(opt, &unidata[codepoint], + tok, (my_wchar_t) codepoint); + break; + case 3: /* Canonical combining class */ + break; + case 4: /* BiDi class */ + break; + case 5: /* Decomposition type */ + if (tok[0] && handle_decomposition(&unidata[codepoint], tok, str)) + return -1; + break; + case 6: /* Numeric_Type, Numeric Value */ + break; + case 7: /* Numeric_Type, Numeric Value */ + break; + case 8: /* Numeric_Type, Numeric Value */ + break; + case 9: /* BiDi mirrored */ + break; + case 10: /* Unicode_1_Name */ + break; + case 11: /* ISO_Comment */ + break; + case 12: /*Simple_Uppercase_Mapping*/ + if (tok[0]) + unidata[codepoint].toupper= strtol(tok, NULL, 16); + break; + case 13: /*Simple_Lowercase_Mapping*/ + if (tok[0]) + unidata[codepoint].tolower= strtol(tok, NULL, 16); + break; + case 14: /* Simple_Titlecase_Mapping */ + break; + } + } + + return 0; +} + + +static int +load_unidata_file(const UNIDATA_OPT *opt, FILE *f, UNIDATA_CHAR *unidata) +{ + char str[1024]; + + while (fgets(str, sizeof(str), f)) + { + if (parse_unidata_line(opt, str, unidata) < 0) + return 1; + } + return 0; +} + + +static int +load_unidata(const UNIDATA_OPT *opt, UNIDATA_CHAR *unidata) +{ + FILE *f; + int rc; + if (!(f= fopen(opt->filename, "r"))) + { + fprintf(stderr, "Could not open file '%s'\n", opt->filename); + return 1; + } + rc= load_unidata_file(opt, f, unidata); + fclose(f); + return rc; +} + +/************** Printing functions ********************/ + +static void +print_one_char(const UNIDATA_OPT *opt, UNIDATA_CHAR *data, int code) +{ + UNIDATA_CHAR *ch= &data[code]; + const char *comma= ""; + + if (opt->mode.print_curly_brackets_in_items) + printf("{"); + + if (opt->mode.print_ctype) + { + printf("%s", comma); + printf("%3d", ch->ctype); + comma= ","; + } + + if (opt->mode.print_toupper) + { + printf("%s", comma); + printf("0x%04X", ch->toupper); + comma= ","; + } + + if (opt->mode.print_tolower) + { + printf("%s", comma); + printf("0x%04X", ch->tolower); + comma= ","; + } + + if (opt->mode.print_noaccent) + { + printf("%s", comma); + printf("0x%04X", ch->noaccent); + comma= ","; + } + + if (opt->mode.print_noaccent_tolower) + { + printf("%s", comma); + printf("0x%04X", ch->noaccent_tolower); + comma= ","; + } + + if (opt->mode.print_noaccent_toupper) + { + printf("%s", comma); + printf("0x%04X", ch->noaccent_toupper); + comma= ","; + } + + if (opt->mode.print_curly_brackets_in_items) + printf("}"); + + if (opt->mode.single_array || + (code & 0xFF) != 0xFF) /* Don't print comma for the last char in a page */ + printf(","); + else + printf(" "); +} + + +static void +print_one_page(const UNIDATA_OPT *opt, UNIDATA_CHAR *data, + my_wchar_t pageno, const PAGE_STAT *pstat) +{ + my_wchar_t charnum; + + if (!opt->mode.single_array || pageno == 0) + { + printf("%s%s%s %s%02X[256]={%s\n", + pageno == 0 ? "" : "static ", + opt->mode.const_data ? "const " : "", + opt->mode.page_data_type_name, opt->mode.page_name, + (unsigned int) pageno, + pstat[pageno].page_tab == PAGE_DATA_DUMMY ? + " /* This page is dummy */" : ""); + } + + for (charnum= 0; charnum < 256; charnum++) + { + my_wchar_t codepoint= (pageno << 8) + charnum; + my_wchar_t rem= charnum % opt->mode.chars_per_line; + if (!rem) + printf(" "); + print_one_char(opt, data, codepoint); + if (rem + 1 == opt->mode.chars_per_line) + { + printf(" /* %04X */", (codepoint + 1) - opt->mode.chars_per_line); + printf("\n"); + } + } + if (!opt->mode.single_array) + printf("};\n\n"); +} + + +static const char *page_name_in_index(const UNIDATA_OPT *opt, + const PAGE_STAT *pstat, + my_wchar_t pageno) +{ + if (!opt->mode.page_name_derived) + return opt->mode.page_name; + + return pstat[pageno].page_overridden ? + opt->mode.page_name : + opt->mode.page_name_derived; +} + + +static void print_page_index(const UNIDATA_OPT *opt, + const PAGE_STAT *pstat) +{ + my_wchar_t page; + my_wchar_t npages= npages_by_opt(opt); + int printing_ctype= !strcmp(opt->mode.index_data_type_name, "MY_UNI_CTYPE"); + + printf("%s%s %s[%d]={\n", + opt->mode.const_data ? "const " : "", + opt->mode.index_data_type_name, opt->mode.index_name, + (unsigned int) npages); + + for (page= 0; page < npages; page++) + { + my_wchar_t rem= page % opt->mode.pages_per_line_in_index; + if (!rem) + printf(" "); + if (opt->mode.print_curly_brackets_in_index) + printf("{"); + if (printing_ctype) + printf("%d,", pstat[page].page_ctype); + + if (pstat[page].page_tab) + printf("%s%02X", page_name_in_index(opt, pstat, page), page); + else + printf("NULL"); + + if (opt->mode.print_curly_brackets_in_index) + printf("}"); + + if (page + 1 < npages) + printf(","); + + if (rem + 1 == opt->mode.pages_per_line_in_index) + printf("\n"); + else + printf(" "); + } + printf("};\n"); +} + + +static void print(UNIDATA_OPT *opt, UNIDATA_CHAR *unidata, const PAGE_STAT *pstat) +{ + my_wchar_t npages= npages_by_opt(opt); + my_wchar_t page; + + /* Print all pages */ + for (page= 0; page < npages; page++) + { + if (opt->mode.page_name_derived && !pstat[page].page_overridden) + continue; + if (opt->mode.single_array || pstat[page].page_tab) + print_one_page(opt, unidata, page, pstat); + } + + /* Print index */ + if (!opt->mode.single_array) + print_page_index(opt, pstat); +} + + +void print_command_line_options(int ac, char **av) +{ + int i; + printf("/*\n"); + printf(" Generated by:\n"); + for (i= 0; i < ac; i++) + { + printf(" %s%s%s\n", i > 0 ? " " : "", av[i], i+1 < ac ? " \\" :""); + } + printf("\n"); + printf("*/\n"); +} + + +static void calc_page_parameters(const UNIDATA_OPT *opt, const UNIDATA_CHAR *code, + PAGE_STAT *pstat) +{ + my_wchar_t npages= npages_by_opt(opt); + my_wchar_t page; + for(page= 0; page < npages; page++) + { + int ntype[CT_MAX + 1], t; + int character, done=0; + + memset(ntype,0,sizeof(ntype)); + for(character= 0;character < 256; character++) + { + size_t cod= (page << 8) + character; + const UNIDATA_CHAR *ch= &code[cod]; + ntype[ch->ctype]++; + + if((ch->tolower != cod || + ch->toupper != cod || + ch->noaccent != cod || + ch->noaccent_toupper != cod) && + (opt->mode.print_tolower || + opt->mode.print_toupper || + opt->mode.print_noaccent || + opt->mode.print_noaccent_toupper)) + { + pstat[page].page_tab= PAGE_DATA_IMPORTANT; + } + } + + if (opt->mode.print_ctype) + { + for (t= 0; t <= CT_MAX; t++) + { + if(ntype[t]==256) + { + /* All ctypes are the same */ + pstat[page].page_ctype= t; + done=1; + break; + } + } + } + else + { + done= 1; /* Don't need ctype */ + } + + if(!done) + { + /* Mixed page, lets create the table */ + pstat[page].page_ctype= CT_NONE; + pstat[page].page_tab= PAGE_DATA_IMPORTANT; + } + if (!pstat[page].page_tab && + page <= (opt->dummy_pages_codepoint_max >> 8)) + pstat[page].page_tab= PAGE_DATA_DUMMY; + } +} + + +static UNIDATA_CHAR code[MAX_UNI_CHAR + 1]; +static PAGE_STAT pstat[MAX_UNI_PAGE + 1]; + + +int usage(int ac, char **av) +{ + fprintf(stderr, "Usage: %s filename\n", av[0]); + return 1; +} + + +const char *one_opt(const char *option, const char *name, size_t length) +{ + if (!strncmp(option, name, length)) + return option + length; + return 0; +} + + +int get_option_bool(int *to, const char *name_and_value, const char *value) +{ + if (!strcmp(value, "1")) + *to= 1; + else if (!strcmp(value, "0")) + *to= 0; + else + { + fprintf(stderr, "Bad option: %s\n", name_and_value); + return 1; + } + return 0; +} + + +int get_option_codepoint(my_wchar_t *to, const char *name_and_value, const char *value) +{ + unsigned long codepoint= value[0]=='0' && value[1]=='x' ? + strtoul(value + 2, NULL, 16) : + strtoul(value, NULL, 10); + if (codepoint > MAX_UNI_CHAR) + { + fprintf(stderr, "Too large --max-char: %s\n", name_and_value); + return 1; + } + *to= (my_wchar_t) codepoint; + return 0; +} + + +int process_param(UNIDATA_OPT *opt, int ac, char **av) +{ + int i; + if (ac < 2) + return usage(ac, av); + for (i= 1; i < ac; i++) + { + const char *op; + if ((op= one_opt(av[i], STRING_WITH_LEN("--mode=")))) + { + if (opt_set_mode(opt, av[i], op)) + return 1; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--max-char=")))) + { + if (get_option_codepoint(&opt->max_char, av[i], op)) + return 1; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-toupper=")))) + { + if (get_option_bool(&opt->mode.print_toupper, av[i], op)) + return 1; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-tolower=")))) + { + if (get_option_bool(&opt->mode.print_tolower, av[i], op)) + return 1; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-noaccent-toupper=")))) + { + if (get_option_bool(&opt->mode.print_noaccent_toupper, av[i], op)) + return 1; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--page-name=")))) + { + opt->mode.page_name= op; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--page-name-derived=")))) + { + opt->mode.page_name_derived= op; + } + else if ((op= one_opt(av[i], STRING_WITH_LEN("--index-name=")))) + { + opt->mode.index_name= op; + } + else + { + if (av[i][0] == '-' && av[i][1] == '-') + { + fprintf(stderr, "Unknown option: %s\n", av[i]); + return 1; + } + break; + } + } + if (i + 1 != ac) + return usage(ac, av); + opt->filename= av[i]; + return 0; +} + + +int main(int ac,char **av) +{ + UNIDATA_OPT opt= opt_caseinfo; + + if (process_param(&opt, ac, av)) + return 1; + + memset(code,0,sizeof(code)); + memset(pstat,0,sizeof(pstat)); + + set_default_case_folding(&opt, code); + + fill_cjk(code); + + if (load_unidata(&opt, code)) + return 1; + + set_noaccent(&opt, code); + set_noaccent_tolower(&opt, code); + set_noaccent_toupper(&opt, code); + + /* + Bug#8385: utf8_general_ci treats cyrillic letters I and SHORT I as the same + Because of decomposition applied, noaccent_toupper for the following letters: + U+0419 CYRILLIC CAPITAL LETTER SHORT I + U+0439 CYRILLIC SMALL LETTER SHORT I + was set to: + U+418 CYRILLIC CAPITAL LETTER I + Reset it back to U+0419. + */ + code[0x0419].noaccent_toupper= 0x0419; + code[0x0439].noaccent_toupper= 0x0419; + + /* + Bug#27877 incorrect german order in utf8_general_ci + */ + if (strcmp(opt.mode.mode_name, "weight_general_mysql500_ci")) + { + code[0x00DF].noaccent_toupper= code['s'].noaccent_toupper; + } + else + pstat[0].page_overridden= 1; + + if (!strcmp(opt.mode.mode_name, "casefold-tr")) + { + code[0x49].tolower= 0x0131; + code[0x69].toupper= 0x0130; + pstat[0].page_overridden= 1; + } + + calc_page_parameters(&opt, code, pstat); + + printf("%s\n", COPYING); + print_command_line_options(ac, av); + print(&opt, code, pstat); + + return 0; +}