tig-2.4.1/000077500000000000000000000000001332650737300123125ustar00rootroot00000000000000tig-2.4.1/.bookignore000066400000000000000000000004511332650737300144510ustar00rootroot00000000000000# Blacklist most files since documentation is co-located with the rest # of the source to avoid that GitBook copies them to the output # directory. *.* *-* COPYING Makefile tigrc ## Whitelist AsciiDoc and GitBook files !*.adoc !*.md !*.json # ... except the manual man-page doc/tigmanual.7.adoc tig-2.4.1/.gitignore000066400000000000000000000006311332650737300143020ustar00rootroot00000000000000*.gcno *.gcda *.html *.o *.swp *~ .deps /_book /config.make /node_modules/ aclocal.m4 autom4te.cache config.h config.h.in config.log config.status configure cscope.out ctags doc/*.[157] doc/*.xml doc/manual.html-chunked doc/manual.pdf doc/manual.toc doc/release-docs/ src/builtin-config.c src/tig tags test/coverage test/tools/test-graph test/tmp tig-*.tar.gz tig-*.tar.gz.md5 tig.spec tools/doc-gen tig.dSYM tig-2.4.1/.mailmap000066400000000000000000000003201332650737300137260ustar00rootroot00000000000000Jonas Fonseca Jonas Fonseca Jonas Fonseca tig-2.4.1/.travis.yml000066400000000000000000000012631332650737300144250ustar00rootroot00000000000000language: c sudo: false addons: apt: packages: - asciidoc - xmlto - valgrind env: - TIG_BUILD=autoconf - TIG_BUILD=config.make compiler: - gcc - clang script: tools/travis.sh matrix: include: - env: TIG_BUILD=valgrind script: tools/travis.sh - env: TIG_BUILD=address-sanitizer compiler: clang # LeakSanitizer requires ptrace capabilities # https://github.com/travis-ci/travis-ci/issues/9033 sudo: required script: tools/travis.sh - if: branch = master os: osx env: compiler: clang script: brew install --HEAD tig - if: branch = master os: osx env: compiler: gcc script: brew install --HEAD tig tig-2.4.1/COPYING000066400000000000000000000432541332650737300133550ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. tig-2.4.1/INSTALL.adoc000066400000000000000000000156001332650737300142520ustar00rootroot00000000000000Installation instructions ========================= :docext: adoc Download a tarball from https://github.com/jonas/tig/releases[] or clone the Tig repository http://github.com/jonas/tig[git://github.com/jonas/tig.git]. The latest version is: https://github.com/jonas/tig/releases/download/tig-2.4.1/tig-2.4.1.tar.gz[tig-2.4.1] https://github.com/jonas/tig/releases/download/tig-2.4.1/tig-2.4.1.tar.gz.md5[(md5)] *Note:* Do not use the tar.gz file for version 2.0 because it will fail to compile due to issue https://github.com/jonas/tig/pull/283[#283] and https://github.com/jonas/tig/issues/337[#337] The quick and simple way to install Tig is: $ make $ make install By default, `tig` is installed in `$HOME/bin`. To install `tig` elsewhere set `prefix` to the desired path: $ make prefix=/usr/local $ sudo make install prefix=/usr/local Documentation files, such as manpages, are distributed in the release tarballs, and can be installed using: $ make install-doc When installing directly from the Tig repository, `make install-doc` will assume that the documentation tool chain is available and build the documentation locally. In case you do not wish to install the required tools, documentation can be installed from the 'release' branch using: $ make install-release-doc Before upgrading, you are advised to read link:NEWS.{docext}[the release notes]. Installation using `configure` ------------------------------ Optionally, you can use the `configure` script to detect dependencies: $ ./configure $ make $ make install If your `iconv` library is not in the default library and include path, you need to pass the `--with-libiconv` option to `configure` to tell it where to look. If you have installed ncurses with brew, run configure with the following flags to have it properly detected (note this done out of the box if you build without `configure`): $ ./configure LDFLAGS=-L/usr/local/opt/ncurses/lib CPPFLAGS=-I/usr/local/opt/ncurses/include Note, if you are building from the Tig repository, you need to generate `configure` yourself. First, ensure that `autoconf` is installed on your system, and then run the following command: $ make configure Installation using Homebrew --------------------------- You can use link:http://brew.sh[Homebrew] to install Tig on OS X: $ brew install tig Note, for older installations of Tig, Homebrew does not automatically update the system-wide `tigrc` file when upgrading Tig and the link:https://github.com/Homebrew/homebrew-core/commit/5600463d68620d68c9745acc490af7f8a16a75cb[behavior] was changed in 2015 to install the system-wide `tigrc` in the `/usr/local/share/tig/examples` directory so Tig always uses the defaults compiled into the binary. If you see warnings when starting Tig after upgrading, e.g.: tig warning: Errors while loading /usr/local/etc/tigrc It means you either need to manually update `/usr/local/etc/tigrc` with changes from `/usr/local/share/tig/examples` rename the file if you never made any changes to it. $ mv /usr/local/etc/tigrc{,.old} Installation using Nix ---------------------- You can use link:https://nixos.org/nix/[Nix] to install Tig on NixOS, or any Linux/OSX distribution with Nix installed: $ nix-env -i tig Installation on Windows ----------------------- To run on Windows, you will need link:https://www.cygwin.com/[cygwin]. You must then install the packages `git`, `gcc-core`, `make`, `libiconv-devel` and `libncurses-devel`. Extract the tarball and install by using `configure` as explained above. If you want to install from the sources, then you will also need the `automake` package (which will also install `autoconf`). Then run `make configure` and install by using `configure` as explained above. Build configuration ------------------- Build settings are read from the file `config.make` and for certain systems also from `contrib/config.make-$kernel`. An example of the latter is Mac OS X, where `contrib/config.make-Darwin` provides out-of-the-box configuration for using the system ncurses library and linking with the iconv library. This makes it easy to configure the build without having to use the `configure` script. As a side note, `configure` itself generates a `config.make` file. Apart from the different standard `make` build variables (`CC`, `CFLAGS`, etc.) and standard `configure` variables (`prefix`, `bindir`, etc.), build settings can be one of the following flags: - `NO_SETENV`: Define this variable to enable work-around for missing `setenv()`. - `NO_MKSTEMPS`: Define this variable to enable work-around for missing `mkstemps()`. - `NO_WORDEXP`: Define this variable to enable work-around for missing `wordexp()`. - `NO_BUILTIN_TIGRC`: Reduce the size of the binary by not including a built-in tigrc. The built-in tigrc is used as a fallback when no `tigrc` is found in the system configuration directory (e.g. `/etc`). - `TIG_USER_CONFIG`: Allow to customize the `tigrc` path (default `~/.tigrc`). The following example `config.make` manually configures Tig to use the ncurses library with wide character support and include the proper ncurses header file (see tig.h for more information): LDLIBS = -lncursesw CPPFLAGS = -DHAVE_NCURSESW_CURSES_H For more examples of build settings, see `contrib/config.make` and `config.make.in`. Tools and packages ------------------ The following tools and packages are needed: [cols="2<,8<",options="header"] |============================================================================= |Tool |Description |git-core |Tig is just a frontend for Git. |ncurses or ncursesw |Be sure to have the development files installed. Usually they are available in a separate package ending with `-dev`. Ncurses with wide character support (ncursesw) is required to properly handle UTF-8 encoded strings. Note for packagers: For Tig's `configure` script to work as expected you should avoid configuring and building ncurses using `--with-shared`. |iconv |If iconv is not provided by the c library you need to change the Makefile to link it into the binary. |============================================================================= The following tools and packages are optional and mainly needed for creating the configure script and building documentation: [cols="2<,8<",options="header"] |============================================================================= |Tool |Description |readline |Adds support for completion and history in search and command prompts. |autoconf |Contains autoreconf for generating configure from configure.ac. |asciidoc (>= 8.4) |Generates HTML and (DocBook) XML from text. |xmlto |Generates manpages and chunked HTML from XML. |DocBook XSL (>= 1.72.0) |Used by xmlto for building manpages. |DocBook (DSSL/Jade) tools |Generates PDF from XML. Also known as docbook-utils. |============================================================================= tig-2.4.1/INSTALL.html000066400000000000000000000702631332650737300143160ustar00rootroot00000000000000 Installation instructions

Download a tarball from https://github.com/jonas/tig/releases or clone the Tig repository git://github.com/jonas/tig.git.

The latest version is: tig-2.4.1 (md5)

Note: Do not use the tar.gz file for version 2.0 because it will fail to compile due to issue #283 and #337

The quick and simple way to install Tig is:

$ make
$ make install

By default, tig is installed in $HOME/bin. To install tig elsewhere set prefix to the desired path:

$ make prefix=/usr/local
$ sudo make install prefix=/usr/local

Documentation files, such as manpages, are distributed in the release tarballs, and can be installed using:

$ make install-doc

When installing directly from the Tig repository, make install-doc will assume that the documentation tool chain is available and build the documentation locally. In case you do not wish to install the required tools, documentation can be installed from the release branch using:

$ make install-release-doc

Before upgrading, you are advised to read the release notes.

Installation using configure

Optionally, you can use the configure script to detect dependencies:

$ ./configure
$ make
$ make install

If your iconv library is not in the default library and include path, you need to pass the --with-libiconv option to configure to tell it where to look.

If you have installed ncurses with brew, run configure with the following flags to have it properly detected (note this done out of the box if you build without configure):

$ ./configure LDFLAGS=-L/usr/local/opt/ncurses/lib CPPFLAGS=-I/usr/local/opt/ncurses/include

Note, if you are building from the Tig repository, you need to generate configure yourself. First, ensure that autoconf is installed on your system, and then run the following command:

$ make configure

Installation using Homebrew

You can use Homebrew to install Tig on OS X:

$ brew install tig

Note, for older installations of Tig, Homebrew does not automatically update the system-wide tigrc file when upgrading Tig and the behavior was changed in 2015 to install the system-wide tigrc in the /usr/local/share/tig/examples directory so Tig always uses the defaults compiled into the binary.

If you see warnings when starting Tig after upgrading, e.g.:

tig warning: Errors while loading /usr/local/etc/tigrc

It means you either need to manually update /usr/local/etc/tigrc with changes from /usr/local/share/tig/examples rename the file if you never made any changes to it.

$ mv /usr/local/etc/tigrc{,.old}

Installation using Nix

You can use Nix to install Tig on NixOS, or any Linux/OSX distribution with Nix installed:

$ nix-env -i tig

Installation on Windows

To run on Windows, you will need cygwin. You must then install the packages git, gcc-core, make, libiconv-devel and libncurses-devel. Extract the tarball and install by using configure as explained above.

If you want to install from the sources, then you will also need the automake package (which will also install autoconf). Then run make configure and install by using configure as explained above.

Build configuration

Build settings are read from the file config.make and for certain systems also from contrib/config.make-$kernel. An example of the latter is Mac OS X, where contrib/config.make-Darwin provides out-of-the-box configuration for using the system ncurses library and linking with the iconv library. This makes it easy to configure the build without having to use the configure script. As a side note, configure itself generates a config.make file.

Apart from the different standard make build variables (CC, CFLAGS, etc.) and standard configure variables (prefix, bindir, etc.), build settings can be one of the following flags:

  • NO_SETENV: Define this variable to enable work-around for missing setenv().

  • NO_MKSTEMPS: Define this variable to enable work-around for missing mkstemps().

  • NO_WORDEXP: Define this variable to enable work-around for missing wordexp().

  • NO_BUILTIN_TIGRC: Reduce the size of the binary by not including a built-in tigrc. The built-in tigrc is used as a fallback when no tigrc is found in the system configuration directory (e.g. /etc).

  • TIG_USER_CONFIG: Allow to customize the tigrc path (default ~/.tigrc).

The following example config.make manually configures Tig to use the ncurses library with wide character support and include the proper ncurses header file (see tig.h for more information):

LDLIBS = -lncursesw
CPPFLAGS = -DHAVE_NCURSESW_CURSES_H

For more examples of build settings, see contrib/config.make and config.make.in.

Tools and packages

The following tools and packages are needed:

Tool Description

git-core

Tig is just a frontend for Git.

ncurses or ncursesw

Be sure to have the development files installed. Usually they are available in a separate package ending with -dev.

Ncurses with wide character support (ncursesw) is required to properly handle UTF-8 encoded strings.

Note for packagers: For Tig’s configure script to work as expected you should avoid configuring and building ncurses using --with-shared.

iconv

If iconv is not provided by the c library you need to change the Makefile to link it into the binary.

The following tools and packages are optional and mainly needed for creating the configure script and building documentation:

Tool Description

readline

Adds support for completion and history in search and command prompts.

autoconf

Contains autoreconf for generating configure from configure.ac.

asciidoc (>= 8.4)

Generates HTML and (DocBook) XML from text.

xmlto

Generates manpages and chunked HTML from XML.

DocBook XSL (>= 1.72.0)

Used by xmlto for building manpages.

DocBook (DSSL/Jade) tools

Generates PDF from XML. Also known as docbook-utils.


tig-2.4.1/NEWS.adoc000066400000000000000000001356751332650737300137370ustar00rootroot00000000000000Release notes ============= tig-2.4.1 --------- Bug fixes: - Add `CURSES_CFLAGS` to `CPPFLAGS`. (#856, Linuxbrew/homebrew-core#8440) tig-2.4.0 --------- Improvements: - Add 'send-child-enter' option to control interaction with child views. (#791) - Update make config defaults for Cygwin to ncurses6. (#792) - Build against netbsd-curses. (#789) - Change the blame view to render more like `git blame`. (#812) - Improve worktree and submodule support. (#459, #781, #783) - Support running Tig via a Git alias. (#763) - Use ISO-8601 letters for short relative dates. (#759, #760) - Change date formatting to show time zones by default. (#428, #811) - Use utf8proc to handle Unicode characters. (#827) Bug fixes: - Fix `file(1)` argument on Linux used for resolving encodings. (#788) - Fix underflow in the file search. (#800, #801) - Fix line numbers in grep view when scrolled. (#813) - Pass command line args through to the stage view. (#569, #823) - Fix resource leak. (#780) - Fix various compiler warnings and pointer arithmetic. (#799, #803) - Workaround potential null pointer dereferences. (#824) - Bind to single and double quotes by using the ** and ** key mappings. (#821) - Make Tig the process-group leader and clean child processes. (#828, #837) - Fix sh compatibility in `contrib/tig-pick`. (#832) - Fix incorrect behaviour of up and down keys in diff view when opened from diff preview. (#802, #835) - Open the stage view when maximizing a split diff view of (un)staged changes. (#836) - Use fully qualified reference name for tags when conflicting with branch name. (#746, #787, #849) - Fix resize not working after entering command. (#845) (#846) - Use stack allocated memory to handle `TIG_LS_REMOTE`. (#839) - Fix deleted file mode line remains highlighted after hovering in diff or stage view. (#851) - Fix `TIG_LS_REMOTE` not working with git-ls-remote(1). (#853, #854) tig-2.3.3 --------- Bug fixes: - Revert "Handle \n like \r (#758)". (GH #769) - Fix GH #164 by catching SIGHUP. - Change `refs_tags` type to `size_t`. tig-2.3.2 --------- Bug fixes: - Fix busy loop detection to handle large repos. (GH #164) tig-2.3.1 --------- Improvements: - Restore TTY attributes. (GH #725) - Handle `\n` like `\r`. (GH #758) Bug fixes: - Add workaround that detects busy loops when Tig loses the TTY. This may happen if Tig does not receive the HUP signal (e.g. when started with `nohup`). (GH #164) - Fix compatibility with ncurses-5.4 which caused copy-pasting to not work in the prompt. (GH #767) - tig(1): document correct environment variable. (GH #752) tig-2.3.0 --------- Incompatibilities: - The `width` setting on the `status`, `text` and `commit-title` columns was never applied and has been removed. (GH #617) Improvements: - Improve load performance by throttling screen updates. (GH #622, #629) - Speed up graph rendering. (GH #638) - Enable scroll optimizations for Terminal.app and iTerm2. (GH #637) - Improve the test suite portability to not depend on GNU sed. (GH #609, #614) - Make build reproducible. (https://reproducible-builds.org/) (GH #613) - Enable binding to more symbolic keys and keys with control modifier: `F13`-`F19`, `ShiftLeft`, `ShiftRight`, `ShiftDel`, `ShiftHome`, `ShiftEnd`, `ShiftTab`, `Ctrl-C`, `Ctrl-V`, `Ctrl-S`, and `Ctrl-@`. (GH #314, #619, #642) - Persist readline history to `~/.tig_history` or `$XDG_DATA_HOME/tig/history`. Use `history-size` to control the number of entries to save. (GH #620, #713, #714, #718) - Preload last search from persistent history. (GH #630) - Add `view-close-no-quit` action, unbound by default. (GH #607) - Add `mouse-wheel-cursor` option (off by default) when set to true causes wheel actions to prefer moving the cursor instead of scrolling. (GH #608) - Add `truncation-delimiter` option, set to `~` by default. (GH #646) - Add `-q` parameter to `source` for "source-if-present". (GH #612) - Add `:echo` prompt command to display text in the status bar. (GH #626, #636) - Make `diff-highlight` colors configurable. (GH #625, #633) - Let Ctrl-C exit Y/N dialog, menu prompts and the file finder. (GH #632, #648) - Hide cursor unless at textual prompt. (GH #643) - Expand tilde ('~') in `:script` paths. (GH #674) - Show single-line output of external command in status bar. (GH #200, #557, #678) - Disable the graph when `--no-merges` is passed. (GH #687) - Print backtraces on segfault in debug mode. - Ignore script lines starting with `#` (comment). (GH #705) - Complete `repo:*` variables when readline is enabled. (GH #702) - Incorporate XTerm's `wcwidth.c` to find Unicode widths. (GH #691) Bug fixes: - Fix graph display issues. (GH #419, #638) - Fix and improve rendering of Unicode characters. (GH #330, #621, #644, #682) - Handle hyphenated directory names when listing content. (GH #602) - Do not jump to next match when cancelling the search prompt. (GH #627) - Fix clearing of the status line after `Ctrl-C`. (GH #623, #649) - Fix handling of width on line-number and trimmed width of 1. (GH #617) - Set cursor position when not updating prompt contents. (GH #647) - Erase status line at exit time for users without altscreen-capable terminals. (GH #589) - Fix unexpected keys when restoring from suspend (`Ctrl-Z`). (GH #232) - contrib/vim.tigrc: Also bind G in the main as a workaround for limitations of the `none` action. (GH #594, #599) - Only override `blame-options` when commands are given and fix parsing of `-C`. (GH #597) - Fix diff name discovery to better handle prefixes. - Interpret button5 as wheel-down. (GH #321, #606) - Fix `back` / `parent` in tree view. (GH #641) - Fix memory corruption in `concat_argv` and file finder. (GH #634, #655) - Fix reading from stdin for `tig show`. - Document problem of outdated system-wide `tigrc` files in Homebrew. (GH #598) - Repaint the display when toggling `line-graphics`. (GH #527) - Fix custom date formatting support longer strings. (GH #522) - Don't segfault on ":exec" irregular args. (GH #686) - Fix segfault when calling htab_empty. (GH #663, #745) tig-2.2.2 --------- Upgrade instructions: - The `status-untracked-dirs` option was renamed to `status-show-untracked-dirs` to match the new `status-show-untracked-files` option. Improvements: - Use `diff-options` when preparing the diff in the stage view to make the diff state configurable. (GH #545) - Add 'status-show-untracked-files' option mirroring Git's 'status.showUntrackedFiles' to toggle display of untracked files. in the status view. On by default. (GH #562) - Update `ax_with_curses.m4` and use `pkg-config` to detect. (GH #546) - Add `tig-pick` script for using Tig as a commit picker. (GH #575, #580) - Add "smart case" option ('set ignore-case = smart-case') to ignore case when the search string is lower-case only. (GH #320, #579) Bug fixes: - Fix author ident cache being keyed by email only. (GH #424, #526, #547) - Fix periodic refresh mode to properly detect ref changes. (GH #430, #591) - Add workaround for detecting failure to start the diff-highlight process. - Show diffs in the stash view when `set mailmap = true`. (GH #556) - Fix parsing of git-log revision arguments, such as `--exclude=...` in conjunction with `--all`. (GH #555) - Fix diff stat parsing for binary copies. - Fix crash when resizing terminal while search is in progress. (GH #515, #550) - Fix argument filtering to pass more arguments through to Git. - Check for termcap support in split tinfo libs. (GH #568, #585) tig-2.2.1 --------- Tarballs should now be downloaded from GitHub. Either go to https://github.com/jonas/tig/releases or use the following pattern: https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz MD5 checksums can be found at: https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz.md5 Similarly, the home page is now also on GitHub at https://jonas.github.io/tig/. A big thanks to Simon L. B. Nielsen for generously hosting Tig on nitro.dk! Improvements: - Support Git's 'diff-highlight' program when `diff-highlight` is set to either true or the path of the script to use for post-processing. - Add navigation between merge commits. (GH #525) - Add 'A' as a binding to apply a stash without dropping it. - Bind 'Ctrl-D' and 'Ctrl-U' to half-page movements by default. - manual: Mention how to change default Up/Down behavior in diff view. Bug fixes: - Reorganize checking of libraries for termcap functions. - Fix `:goto ` error message. tig-2.2 ------- Incompatibilities: - Note that all user-defined commands are now executed at the repository root instead of whatever subdirectory Tig was started in. (GH #412) - Remove `cmdline-args` option to avoid problems where setting it in `~/.tigrc` potentially breaks other views due to its "context-sensitive" nature, where a `git-log` option maybe cause `git-grep` to fail. (GH #431) Improvements: - Use .mailmap to show canonical name and email addresses, off by default. Add `set mailmap = yes` to `~/.tigrc` to enable. (GH #411) - Highlight search results, configurable via `search-result` color. (GH #493) - Wrap around when searching, configurable via `wrap-search` setting. - Populate `%(file)` with file names from diff stat. (GH #404) - `tig --merge` implies `--boundary` similar to gitk. - Expose repository variables to external commands, e.g. `%(repo:head)` gives the branch name of the current HEAD and `%(repo:cdup)` for the repo root path. - Add `make uninstall`. (GH #417) - Add ZSH completion file (based on Bash completion) (GH #433) - Expose the text of the currently selected line as the %(text) (GH #457) - Allow users to specify rev arguments to blame (GH #439) - Update OSX make config to find brew installed ncurses - Add sample git-flow keybinding (GH #421) - Add chocolate theme (GH #432) - Show stash diffs. (GH #328) - Make user tigrc location configurable. (GH #479) - Compact relative date display mode. (GH #331) - Add date column option controlling whether to show local date. - Move to parent commit in the main view. (GH #388) - Add `:goto ` prompt command to go to a `git-rev-parse`d revision, e.g. `:goto some/branch` or `:goto %(commit)^2`. - Respect the XDG standard for configuration files. (GH #513) - Show tracking information in `tig status` (GH #504) - Resolve diff paths when `diff.noprefix` is true. (GH #487, #488) - Support for custom `strftime(3)` date formats, e.g.: set main-view-date = custom set main-view-date-format = "%Y-%m-%d" Bug fixes: - Prevent staged rename from displaying unstaged changes (GH #472, #491) - Fix corrupt chunk header during staging of single lines. (GH #410) - Fix out of bounds read in graph-v2 module. (GH #402) - Add currently checked out branch to `%(branch)`. (GH #416) - Size diff stats correctly for split views. - Fix `git-worktree` support by using `git-show-ref`. (GH #437) - Add currently checked out branch to `%(branch)` (GH #416) - Fix segfault when hitting return in empty file search (GH #464) - Remove separator on horizontal split when switching from vertical split - Do not expand `--all` when parsing `%(revargs)` (GH #442, #462) - Fix exit when the main view is reloaded due to option toggling. (GH #470) - Expand all whitespace and control characters to spaces. (GH #485) - Restore ability to unbind a default keybinding with `none`. (GH #483) - Fix blob view to honor the `wrap-lines` setting. tig-2.1.1 --------- Improvements: - Add support for key combos. (GH #67) - See `contrib/vim.tigrc` for Vim-like keybindings. (GH #273, #351) - Add GitHub inspired file finder to search for and open any file. (GH #342) - Add `search` keymap for navigating file finder search results. Bug fixes: - Fix display of multiple references per commit. (GH #390, #391) - Sync the prompt's cursor position with readline's internal position. (GH #396) - Keep unstaged changes view open after an staging command. (GH #399) tig-2.1 ------- Improvements: - Improve C99 compliance so Tig compiles with the native compilers on Solaris (SunStudio cc) and AIX (xlc). (GH #380) - Add move-half-page-up and move-half-page-down actions. (GH #323) - Preserve the cursor position when changing the diff context. - Show 'Unstaged changes' above 'Staged changes' in the main view. (GH #383) - Add `:exec ` prompt command to execute commands. - Add shorthand for changing the view settings of a single column, eg. `set main-view-author = short`. (GH #318) - Show better diff context info in the stage view. - Add `%(lineno)` state variable. (GH #304) - Use hash table to speed up refs lookup. (GH #350) - Show the file path in the blob view when available. - Use `set commit-order = default` to use Git's default commit order, even when the commit graph is enabled. The option will turn off automatic enabling of `--topo-order` when the graph is shown in the main view. (GH #310, #324) - Speed up the diff view in large repos by loading git-describe info after the diff content has been read. (GH #324) - Add the old graph rendering as an option. (GH #310, #324) - Add `main-options` setting for specifying default main view options. Example: `set main-options = --max-count=1000`. (GH #368) - See `contrib/large-repo.tigrc` for settings that will help to speed up Tig in large repos. (GH #368) - Add `:save-options ` prompt command to save config to file. (GH #315) Bug fixes: - Update manual to reflect default keybinding changes. (GH #325) - Fix graph support for `--first-parent`. (GH #326) - Fix off-by-one error when opening editor from the grep view. - Fix status on-branch information. - Fix main view to handle the case when git-log doesn't find any commits. - Fix corner case when parsing diff chunk when lines information is missing. - Ensure main view changes commits are shown right before the current HEAD. - Fix rendering of boundary commits. - Fix compilation with GNU Make 3.80 by removing `$(abspath)`. (GH #362) - Fix config parsing to support shell-like quoting in user-defined command, e.g. `bind generic :!git log -G"%(prompt Prompt: )"` (GH #371) - Make diff meta information colors more consistent with Git. (GH #375) - Fix segfault when updating changes in a maximized stage view opened via the main view. (GH #376) - Handle line number configs where the interval is not specified. (GH #378) - Fix display of error messages during startup. (GH #385) - Show untracked files outside the current directory like git-status. (GH #230) tig-2.0.3 --------- Improvements: - Add `:save-display ` prompt command to save the current display. - Add `:script ` prompt command for scripting the Tig UI. - Add test framework and convert existing tests to use it. - Add command-line option for starting in refs view: `tig refs`. (GH #309) - Make blame commit ID colors stable across reloads. (GH #303) - Increase blame ID and graph rendering color palette to 14 colors. - New setting 'split-view-width' controls the width for vertical splits. It takes the width of the right-most view either as a number or a percentage. - Expose settings holding command line argument lists: `file-args`, `rev-args`, and `cmdline-args`. They are mainly intended for testing purposes but also allows to change the filtering arguments dynamically. (GH #306) - Add `log-options` setting for specifying default log view options. Example: `set log-options = --pretty=fuller`. - Use option specific view flags to reload view after `:set` commands. Bug fixes: - Refresh the current view when returning from an external command and `refresh-mode=after-command`. (GH #289) - Fix readline completion. - Fix '/' to `find-next` when readline support is enabled. (GH #302) - Fix readline prompt to correctly handle UTF-8 characters. - Add warnings for more obsolete actions and colors. - Fix passing of commit IDS via stdin to the main view. - Fix commit title overflow drawing for multibyte text. (GH #307) - Fix installation directory permissions. - Handle binary files matches reported by git-grep. - Toggling of "args"-typed options without any arguments will clear the current arguments. Example: `:toggle blame-options`. - Detect custom `pretty.format` settings that break the log view and fallback to use the `medium` format. (GH #225) - Fix invocation of git-diff for the blame view's line tracking. (GH #316) - Fix blame completion of directory names. (GH #317) - Fix display of conflicts in the main view when 'show-changes' is enabled. - Fix off-by-one error when displaying line numbers in the grep view. - When showing the commit graph ensure that either topo, date or author-date commit order is used. (Debian #757692) (GH #238) tig-2.0.2 --------- Improvements: - Use git-status for diffing the index. - Group toggle options together in the help view. Bug fixes: - Fix refs, main and grep loading when 'gui.encoding' is set. (GH #287) - Ignore 'gui.encoding' and 'i18n.commitencoding' when set to 'UTF-8'. - Add work-around for missing strndup() on Mac OS X v10.6. (GH #286) - Fix spurious abbreviation of author names. (GH #288) - Don't show empty action groups in the help view. tig-2.0.1 --------- Bug fixes: - Fix compilation in watch.c. - Fix parsing of key bindings mapped to '^' and '<'. (GH #280, #282) tig-2.0 ------- Note to packagers: - Add `.adoc` extension to AsciiDoc files so they show correctly on GitHub. This includes `README`, `INSTALL`, and `NEWS` and files in `doc/` directory. - `BUGS` file has been merged into `README.adoc`. - Default keybindings have been moved to a system-level `tigrc` file, which is installed to ${sysconfdir} by default. The content of the `tigrc` file is included inside the binary as a fall-back. Pass `NO_BUILTIN_TIGRC=y` to not include the system `tigrc` content and reduce the size of the binary. - The example `contrib/tigrc` file (made obsolete by `tigrc`) has been removed. - Source files have been moved to `src` and `include` and `tig.c` was split up. - Build output is less verbose by default; use `make V=1` for old output. Incompatibilities: - In preparation for key combo support, key mappings for symbolic keys (e.g. `Up` and `Down`) must now start with `<` and end with `>`, e.g. `` and ``. Furthermore, escape key combos must now use `key` instead of `^[key`, and control key mappings must now use `` instead of `^key`. - Only use 'diff-options' for the diff view and introduce '%(cmdlineargs)' to hold non-file and non-revision flags passed on the command line. Affects all user-defined commands that expect '%(diffargs)' to hold both 'diff-options' arguments and those passed on the command line. (GH #228) - Remove built-in keybinding for `git gc`. Add the following line to `~/.tigrc` to restore it: `bind generic G ?git gc`. - To support view specific colors, '.' can no longer be used interchangeably with '-' and '_' in settings names and in particular color names. - Replace 'stage-next' action with prompt command using a predefined search (see below) and add binding (`@` by default) to also work in the diff view. - Most view display options must now be set via the new `*-view` options in tigrc. Existing options are no longer recognized, but a warning is shown. - Remap default bindings to have more consistent convention: use lower-case keys primarily for view switching and non-destructive actions, use upper-case keys for view-specific actions including user-defined commands. To preserve old default key bindings see `contrib/bindings-v1.x.tigrc`. (GH #257) Improvements: - Add mouse support: scroll view, click line to move cursor, double click line (or click again) to "Enter" cursor line, e.g. open commit diff. Disabled by default, since it makes text selection less intuitive. If you enable this remember to hold down Shift (or Option on Mac) when selecting text. - Rewrite and improve the rendering of the commit graph. (GH #144, #46) - Add completion and history support to the prompt via readline. (GH #185) - Options can be configured and toggled individually for each view. Use the new view settings to configure the order and display options for each view columns. See system tigrc and tigrc(5) for examples. (GH #89, #222) - Add grep view as a front-end to git-grep(1): `tig grep -p strchr`. From within Tig, the key for switching or grepping is bound to 'g' by default. - Rename 'branch' view to 'refs' view and show tags. (GH #134) - Add main view pager mode that reads git-log's '--pretty=raw' data from stdin, e.g. `git reflog --pretty=raw | tig --pretty=raw`. - Add support for `--graph` and highlight diff stats in the log view. - Add default command bindings: `!` to delete branch, `!` to drop stash. - Add 'stage-split-chunk' action for splitting chunks in the stage view. Bound to '\' by default. (GH #107) - Add 'back' action bound to '<' by default, which will return the blame view to the previous revision and line after moving e.g. to the parent. (GH #124) - Auto-refresh views based on watched repository changes. Configure by setting `refresh-mode` to 'manual', 'auto', 'after-command', or 'periodic'. (GH #190) - All default settings are in well-documented system `tigrc`. - Add `:toggle` prompt command to manipulate options using keybindings. For example: `bind diff D :toggle diff-options --patience --notes`. (GH #69) - Add a new "auto" value for the 'vertical-split' option to let Tig choose the split orientation (this is the new default behavior). Can be toggled. - Make it possible to toggle the display of files in untracked directories. - Allow Tig to be started with no default configuration by specifying an alternative system `tigrc` file, e.g.: `TIGRC_SYSTEM=~/.tigrc.safe tig`. Set `TIGRC_SYSTEM` to the empty string to use built-in configuration instead of - Key mappings can contain UTF-8 multibyte unicode keys. - Warn about conflicting keybindings using Ctrl, e.g. `` and ``. (GH #218) - Extend key bindings for prompt commands (ie. `bind :`) to support predefined searches, eg.: `bind stage 2 :?^@@`. - Git color mappings can be configured in tigrc. - More informative configuration error messages. - Make reference label formatting configurable, for example: `set reference-format = (branch) remote`. (GH #201) - Adjust author width and other view columns automatically. (GH #49) - Support view specific colors: `color stage.diff-add yellow default`. - Copy `-S`, `-G` and `--grep=` pattern to search buffer so 'find-next' and 'find-prev' work as expected. - Optionally specify custom prompt for `%(prompt)` in shell commands, e.g. `bind main B ?git checkout -b "%(prompt Enter new branch name: )"`. - Add `%(remote)` and `%(tag)` symbols to complement `%(branch)`. - User-defined commands can now be prefixed with any of the supported flags, e.g. `?git checkout -b %(branch)`. - Open editor at line number for combined diffs e.g. diffs of unmerged files. - Add build configuration for Cygwin (OS name: CYGWIN_NT-6.1). (GH #92) - Document the Git commands supported by the pager mode. (GH #1) system `tigrc` configuration. (GH #235) Bug fixes: - Fix stash diff display when reloading the stash view after a deleting. - Set the commit reference when opening the blame view from the blob view. - Correctly identify and highlight the remote branch tracked by HEAD. - Pass --no-color after user defined arguments to ensure that colors do not break the output parsing. (GH #191) - Close stdin when pager mode is not supported. - Show newly created branches in the main view. (GH #196) - File with 0 changes breaks diffstat highlighting (GH #215) - Update %(branch) variable in the main view. (GH #223) - Disable graph rendering when either of `--reverse`, `-S`, `-G`, and `--grep` are passed to the main view. (GH #127) - Only refresh views that support it. - Fix author and date annotation of renamed entries in the tree view. - Fix use of unsafe methods in the signal handler. (GH #245) - Fix rendering in non-UTF8 terminals. - Fix stage-update-line by rewriting the diff chunk containing the line instead of using `--unidiff-zero` and a diff context of zero. (GH #130) - Fix status-update to work for untracked directories. (GH #236) - Don't pass log parameters given on the command line to the diff view. tig-1.2.1 --------- Incompatibilities: - Move manual and man pages to doc/ directory and rename AsciiDoc files to have .asciidoc as the extension to make them render on GitHub. Improvements: - Show blob sizes in the tree view either as bytes or using binary unit prefixes. Example: `set show-file-size = units`. (GH #163) - Reduce main view memory usage and startup time, especially when revision graph rendering is disabled. (GH #160) Bug fixes: - Fix submodule-related setup to check for non-zero return value from setenv(). (GH #188) tig-1.2 ------- - Tig now has its own tag on Stack Overflow, where users are invited to ask questions: http://stackoverflow.com/questions/tagged/tig Improvements: - Prompt commands can be bound to keys. For example: `bind diff F :set diff-options = --full-diff`. (GH #69, #116) - Add a diff-options setting for specifying default diff options. Example: `set diff-options = --patience`. (GH #116) - Options in diff-options and blame-options matching Tig browsing state variables are replaced. - Show diff stats as wide as the terminal. (GH #109) - Show line numbers in the branch view. (GH #135) - Add toggles for showing author email or email user names. (GH #115) - Open editor at the selected line by prefixing the file argument with `+`. Tested in vi, Vim, Emacs, Nano, Gedit, Geany. Disable by adding `set editor-line-number = no` to ~/.tigrc. (GH #118, #119) - Add toggle-files to control whether to show full commit diff or only the diff concerning the currently selected file, e.g. for blame. - Optionally highlight exceeding characters in long commit titles. The default title max width is 50 characters. Customize using: `set title-overflow = 50` (GH #125) - Add +ESC key bindings. Example: `bind generic ^[v move-page-up` (GH #120) - Create temporary files in TMPDIR, TEMP, or TMP before defaulting to /tmp. - Reenable `tig log` as a subcommand. (GH #146) - Enable tilde expansion in ~/.tigrc "source" commands. (GH #168) - Introduce the stash view, bound to the 'y' keybinding. (GH #169, #174) Bug fixes: - Fix blame and status to work in directories starting with a dot. (GH #172) - Reload current branch name when reloading the status view. (GH #93) - Fix compile errors on old Solaris. (GH #97) - Reload HEAD info when reloading the stage view. (GH #104, #93) - Fix disappearing branch labels after external commands. (GH #148) - Fix diff view display for staged/unstaged changes when using 'd'. - Fix display of status messages when toggling view options. (GH #111) - Fix illegal memory access. (GH #98) - Fix display of all branches label in repos with short branch names. - Fix rendering glitch for branch names. - Do not apply diff styling to untracked files in the stage view. (GH #153) - Fix tree indentation for entries containing combining characters. (GH #170) - Ignore unrepresentable characters when transliterating text for rendering. - Transliterate text to output encoding before trimming it to avoid misalignment. (GH #86) - Introduce a more natural context-sensitive log display. (GH #155) tig-1.1 ------- Incompatibilities: - Disable diff move/copy detection by default, boosting diff performance on larger projects. Use git config 'diff.renames' option (Git-wide) to set your preferred behavior. Environment variable TIG_DIFF_OPTS can be used to restore the old behavior. - Fix manual keybinding for stage-single-line. (GH #108) - Values set for author-width and filename-width will result in widths one character bigger than previously. Improvements: - Typing a text in the prompt will be interpreted as a Tig command. Prefixing the command with a '!' will execute this system command in an external pager. Entering a single key will execute the corresponding key binding. - Basic support for wrapping long line in pager, diff, and stage views. Enable using: `set wrap-lines = yes`. (GH #2) - User-defined commands prefixed with a '?' means prompt before execution. Example: `bind main B !?git rebase -i %(commit)`. - User-defined commands prefixed with a '<' means exit after execution. Example: `bind main C ! to open the initial view at an arbitrary line. (GH #20) - Add show-notes ~/.tigrc option. Notes are displayed by default. - Support jumping to specific SHAs in the main view. - Decorate replaced commits. - Display line numbers in main view. - Colorize binary diff stats. (GH #17) - Custom colorization of lines matching a string prefix (GH #16). Example configuration: color "Reported-by:" green default - Use Git's color settings for the main, status and diff views. Put `set read-git-colors = no` in ~/.tigrc to disable. - Handle editor options with multiple arguments. (GH #12) - Show filename when running tig blame with copy detection. (GH #19) - Use 'source ' command to load additional files from ~/.tigrc - User-defined commands prefixed with '@' are run with no console output, e.g. bind generic 3 !@rm sys$command - Make display of space changes togglable in the diff and stage view. Bound to 'W' by default. - Use per-file encoding specified in gitattributes(5) for blobs and unstaged files. - Obsolete commit-encoding option and pass --encoding=UTF-8 to revision commands. - Main view: show uncommitted changes as staged/unstaged commits. Can be disabled by putting `set show-changes = no` in ~/.tigrc. - Add %(prompt) external command variable, which will prompt for the argument value. - Log information about Git commands when the TIG_TRACE environment variable is set. Example: `TIG_TRACE=/tmp/tig.log tig` - Branch view: Show the title of the last commit. - Increase the author auto-abbreviation threshold to 10. (GH #49) - For old commits show number of years in relative dates. (GH #50) Bug fixes: - Fix navigation behavior when going from branch to main view. (GH #38) - Fix segfault when sorting the tree view by author name. - Fix diff stat navigation for unmodified files with stat changes. - Show branches/refs which names are a substring of the current branch. - Stage view: fix off-by-one error when jumping to a file in a diff with only one file. - Fix diff-header colorization. (GH #15) tig-0.18 -------- Incompatibilities: - Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables. Improvements: - Pressing enter on diff stat file lines will jump to file's diff. - Naïvely color blame IDs to distinguish lines. - Document palette color options used for revision graph and blame IDs. - Add support for blaming diff lines. - Add diff-context option and bindings to increase the diff context in the diff and stage view. - (GH-6) Make blame configurable via extra options passed from the command line and blame-options setting from ~/.tigrc. For example: set blame-options = -C -C -C Bug fixes: - Expand browsing state variables for prompt. (LP #694780, Debian #635546) - Fix segfault when sorting the branch view by author. - Expand %(directory) to . for the root directory. (GH-3) - Accept 'utf-8' for the line-graphics option as indicated in the docs. - Use erasechar() to check for the correct backspace character. tig-0.17 -------- Improvements: - Start rewrite of the revision graph renderer. Three modes are supported UTF-8, ncurses line graphics, and ASCII. Also, enable revision graph rendering by default. Bug fixes: - Fix ncurses 5.8 issue by passing non-zero column size to newwin(). - Fix opening of diffs when browsing branches. tig-0.16.2 ---------- Bug fixes: - Fix regression causing empty tree view. - Fix set_tabsize() compile error for older versions of ncurses. tig-0.16.1 ---------- Improvements: - Add scroll-first-col action to jump to the first column. Bound to '|' by default. - Add 'status-untracked-dirs' option to ignore unknown directories contents in the status view. On by default. Bug fixes: - Fix 'tig show ' to show the provided commit. - Fix problem with empty diff views when file specs were passed on the command line. - Fix segfault when starting Tig in pager mode. tig-0.16 -------- Incompatibilities: - Encode everything internally as UTF-8. This can affect performance, but should in general improve handling of character lengths etc. Also, to properly handle UTF-8 environments use ncurses with wide character support. - The use of TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables has been deprecated. To allow configuration of the diff view, TIG_DIFF_OPTS can be used. Improvements: - Plug several memory leaks. - Command line arguments are split into diff, revision, and file arguments and made available as %(diffargs), %(revargs), and %(fileargs). Diff view will limit diffs using %(fileargs). - Status view: update the file variable when a line is selected so %(file) works as expected. - Branch view: add %(branch) symbol providing access to the selected branch. - Branch view: add entry to browse all branches (uses git-log's --all flag). - Abbreviation of author names can now be configured and toggled. - Mark detached heads with [HEAD]. - Add support for displaying dates in local time. Bug fixes: - Status view: fix usage from sub directories, which was broken by the changes made to support blame view from sub directories. - Fix text expansion to not truncate long lines - Fix parsing of boolean show-date values. - Fix relative date. - Fix unbind to behave as if the keybinding was never defined. - Fix unbind to also cover built-in run requests. - Fix parsing of unknown keymap names. - Blame view: fix parent blame to detect renames. It uses "previous" line info from the blame porcelain output added in Git version 1.6.3. tig-0.15 -------- Incompatibilities: - Setting the cursor color no longer automatically sets the text to bold. The old 'lazy' behavior was a bug. - Remove check for git-repo-config, which was officially deprecated in Git version 1.5.4. The configure script no longer depends on Git being installed. Improvements: - Provide the manual as a man page named tigmanual(7). - Add ability to toggle between showing shorter dates (without time info) and relative dates. Use 'D' to toggle between date formats. - Show the active (instead of the default) keybindings in the help view. Furthermore, honor the keymap when suggesting actions in the help messages. - Add branch view for choosing which branch to display in the main view. Bound to 'H' by default. - Tree view: show entry to parent directory ('..') when running from subdirectory. - Tree view: sort entries by name, date or author. Toggling is bound to 'i' by default, with 'I' controlling whether or not to sort in ascending order. - Make height of the lower view in a split view configurable by setting the 'split-view-height' variable to a number or a percentage. Defaults to 2/3 of the total view height. - Allow multiple text attributes for color commands: color cursor white blue underline bold Bug fixes: - Blame view: fix loading of blame data when opened from the tree view and CWD is not the repo root. (Debian bug 540766) - Tree view: fix searching. tig-0.14.1 ---------- Improvements: - Status view: improve "on branch" information inspired by the prompt code in Git's bash completion script. - Colors for 256-capable terminals can be specified as colorN. - Entering a number in the prompt will jump to that line number. - Handle core.worktree by setting GIT_DIR and GIT_WORK_TREE. - Make behavior of horizontal scrolling configurable by setting the 'horizontal-scroll' variable to a number or a percentage. Defaults to scrolling 50% of the view width. Bug fixes: - Status view: show error when failing to open a file. - Status view: report failures to update a file. - Blame view: fix problem with uninitialized variable. - Blame view: use line number information when loading blame for specific commit. - Fix handling of quoted strings in the config file. - Fix horizontal scrolling glitches. tig-0.14 -------- Incompatibilities: - The screen-resize action has been deprecated. It had no real use for users and was never meant to be exposed. - The "tree-parent" action was renamed to "parent". Warnings will be emitted for transition. - Remove parsing of deprecated option -S and subcommands log and diff. - The "author" color replaces "main-author". Setting the latter will now set the "author" color. Improvements: - Horizontal scrolling. Bound to Left/Right by default. - Read tigrc(5) options from Git configuration files using the syntax: [tig] show-rev-graph = true [tig "color"] cursor = yellow red bold [tig "bind"] generic = P parent - Tree view: avoid flickering when updating. - Tree view: annotate entries with commit information. - Tree & blob view: open any blob in an editor. - Stage & main view: restore view position when reloading. - Blame view: load blame for parent commit. For merge commits the parent is queried. Bound to ',' by default via the existing "parent" action. - Abbreviate author names to initials when the width of the author column is below 6 characters. Bug fixes: - Tree view: fix memory corruption bug when updating. - Tree view: improve handling of empty trees. - Status view: fix reverting of unmerged files. - Fix regression for non-UTF-8 locales corrupting the view data. - Fix regression parsing multiple spaces in ~/.tigrc. tig-0.13 -------- Incompatibilities: - Commands from the environment (e.g. TIG_MAIN_CMD) will no longer have access to shell features, such as subshells and variable expansion. The easiest way to upgrade your configuration is to put such commands in a script file or as a Git alias. Improvements: - Display repository references in the sorted order: tags, heads, tracked remotes, remotes. - Add bash completion for blame. - Tree view: edit files of the current branch. - Run requests: new identifiers %(directory), %(file), and %(ref) - Improve responsiveness and view loading speed by using select(2). Bug fixes: - Separate blame revision and file argument by "--" to avoid problems. - Main view: fix redrawing of the last commit wrt. the revision graph. - Fix waiting for input after executing a run request in pager mode. - Status & stage view: refuse to open directories and deleted files. - Tree view: show error when requesting blame for all non-file entries. - Do not draw loading views, which are not displayed. - Fix launching of mergetool from a subdirectory. tig-0.12.1 ---------- Improvements: - Status view: revert uncommitted diff chunks and unstaged files with changes. Bound to '!' by default. - Main view: use --topo-order also when rev-list arguments are given on the command line. - Log view: support for refreshing. Bug fixes: - Status view: use ls-files' --exclude-standard so user specific ignore rules are effective. The option was added in Git version 1.5.4. - Stage view: fix assertion failure triggered when updating while status view is not displayed. - Help view: avoid confusion by showing "(no key)" instead of "'?'" for unbound requests. - Reload repository references when refreshing the main (and log) view. - Do not maximize views when refreshing. tig-0.12 -------- Improvements: - F5 also refreshes the current view. - Allow line graphics to be disabled with new line-graphics option. - Main view: also include the reference names when searching. - Main view: support for refreshing. - Main view: disable boundary commits by default. Use --boundary when they should be shown. (Debian bug 498628) - Stage view: add stage-next action to jump to next diff chunk that can be staged. By default bound to '@'. - Configure: check for the ncurses header files. - Add author-width option to customize the width of the author column. For example, put the following in ~/.tigrc: set author-width = 10 Bug fixes: - Fix regression when staging all diff chunks in a section. - Bind the maximize view action to 'O'; it conflicted with the keybinding to launch the merge tool in the status view. - Fix problem with $(cmd) usage in shell code. Some shells (jsh) installed as /bin/sh does not support it. - Do not show incomplete boundary commits when --no-walk is used. - Documentation: Rename gitlink macro to support AsciiDoc 8.2.3. - Ignore pipe reads with errno "Success" reported after a signals, for example when refreshing doing background loading. tig-0.11 -------- Incompatibilities: - Remove parsing of deprecated options: -g, -l, -d. - The first seen '--' will stop option parsing and is passed to Git instead of breaking out of Tig's option parsing. New features: - Blame view; bound to 'B' by default, reachable from the command line and the tree, status, and stage views. - Blame/main view: allow display of date, author, and references to be toggled on/off. Bound to 'D', 'A', and 'F' respectively. - Add action to maximize the current view. Improvements: - Show the current branch in the status view. - Show local/light-weight tags. Bug fixes: - Fix regressions for the pager mode. - Fix refreshing of the index with working directory info. tig-0.10.1 ---------- Improvements: - Status view: detect renamed files and show them with 'R'. - Status view: refresh the index to avoid "empty diffs". - Diff view: make diff headers more verbose to include e.g. committer. - Configure: check for the ncursesw library. Bug fixes: - Fix UTF-8 handling for tag names and commit messages. - Fix the check for git-config(1) in configure to handle the case when Git has been installed using a libexecdir which is not in the path. - Fix replacing of SYSCONFDIR when installing from released tarballs. tig-0.10 --------- Incompatibilities: - Deprecate most Tig specific command line options to make Tig more compatible with gitk. The deprecated options are: -g, -l, -d, and -S. Use of any of them will result in a warning being printed to stderr. Instead of '-S', use the new 'status' subcommand. - Make man page building depend on DocBook XSL version >= 1.72.0. - Install man pages in $(prefix)/share/man. - Implement the cherry pick action (bound to 'C') using new support for running external commands. This obsoletes the TIG_CHEERY_PICK environment variable New features: - Add support for binding keys to external commands. To bind '.' to running git-commit(1), add the line: "bind generic . !git commit" to your ~/.tigrc. Each command can have replacement string such as %(commit), %(head), and %(blob), which are substituted before the command is run. - Add system-wide configuration file defaulting to $(prefix)/etc/tigrc. - Add the environment variables TIGRC_USER and TIGRC_SYSTEM to change user and system-wide configuration files, respectively. Improvements: - Main view: color the revision graph. - Main view: show boundary commits; they are marked with '^' in the revision graph. - Tree view: add tree-parent action to jump to view of the parent tree. Bound to ',' by default. - Allow the default terminal colors to be overwritten. To use black text on white, add the line "color default white black" to your ~/.tigrc. - Misc. documentation improvements. Bug fixes: - Use git-diff-index(1) and git-diff-files(1) instead of git-diff(1) to avoid running external diff drivers. - Use --no-color when calling git-log(1). - Fix crash when opening mergetool for lines that are not unmerged. tig-0.9.1 --------- Incompatibilities: - Make the clean rule to never remove generated documentation files. Use the distclean rule for accomplishing this. New features: - Add support for cherry-picking commits in the main view to the current branch. Bound to 'C' by default. Improvements: - Add support for launching git-mergetool(1) from the status view. Bound to 'M' by default. - Add support for refreshing/reloading the status view - Detect working trees and disable the status view when it is missing. Bug fixes: - Fix iconv() checking in configure. - Fix editor invocation to make paths relative to the project root. - Fix out-of-range current line when reloading the status view. - Include autoconf files in the tarball generated by `make dist`. tig-0.9 ------- New features: - Add bash completion script for Tig (contrib/tig-completion.bash). - Add optional autoconf-based build infrastructure. - Add stage view for showing changes in the working tree and add support for staging individual diff chunks for commit. Improvements: - Status view: allow all files in a section to be staged for commit. - Status view: Add support for opening files in an editor. Bound to 'e' by default. - Tree view: use a stack for remembering the lines for parent tree. /* vim: set tw=80: */ tig-2.4.1/NEWS.html000066400000000000000000002567071332650737300137750ustar00rootroot00000000000000 Release notes

tig-2.4.1

Bug fixes:

  • Add CURSES_CFLAGS to CPPFLAGS. (#856, Linuxbrew/homebrew-core#8440)

tig-2.4.0

Improvements:

  • Add send-child-enter option to control interaction with child views. (#791)

  • Update make config defaults for Cygwin to ncurses6. (#792)

  • Build against netbsd-curses. (#789)

  • Change the blame view to render more like git blame. (#812)

  • Improve worktree and submodule support. (#459, #781, #783)

  • Support running Tig via a Git alias. (#763)

  • Use ISO-8601 letters for short relative dates. (#759, #760)

  • Change date formatting to show time zones by default. (#428, #811)

  • Use utf8proc to handle Unicode characters. (#827)

Bug fixes:

  • Fix file(1) argument on Linux used for resolving encodings. (#788)

  • Fix underflow in the file search. (#800, #801)

  • Fix line numbers in grep view when scrolled. (#813)

  • Pass command line args through to the stage view. (#569, #823)

  • Fix resource leak. (#780)

  • Fix various compiler warnings and pointer arithmetic. (#799, #803)

  • Workaround potential null pointer dereferences. (#824)

  • Bind to single and double quotes by using the <SingleQuote> and <DoubleQuote> key mappings. (#821)

  • Make Tig the process-group leader and clean child processes. (#828, #837)

  • Fix sh compatibility in contrib/tig-pick. (#832)

  • Fix incorrect behaviour of up and down keys in diff view when opened from diff preview. (#802, #835)

  • Open the stage view when maximizing a split diff view of (un)staged changes. (#836)

  • Use fully qualified reference name for tags when conflicting with branch name. (#746, #787, #849)

  • Fix resize not working after entering command. (#845) (#846)

  • Use stack allocated memory to handle TIG_LS_REMOTE. (#839)

  • Fix deleted file mode line remains highlighted after hovering in diff or stage view. (#851)

  • Fix TIG_LS_REMOTE not working with git-ls-remote(1). (#853, #854)

tig-2.3.3

Bug fixes:

  • Revert "Handle \n like \r (#758)". (GH #769)

  • Fix GH #164 by catching SIGHUP.

  • Change refs_tags type to size_t.

tig-2.3.2

Bug fixes:

  • Fix busy loop detection to handle large repos. (GH #164)

tig-2.3.1

Improvements:

  • Restore TTY attributes. (GH #725)

  • Handle \n like \r. (GH #758)

Bug fixes:

  • Add workaround that detects busy loops when Tig loses the TTY. This may happen if Tig does not receive the HUP signal (e.g. when started with nohup). (GH #164)

  • Fix compatibility with ncurses-5.4 which caused copy-pasting to not work in the prompt. (GH #767)

  • tig(1): document correct environment variable. (GH #752)

tig-2.3.0

Incompatibilities:

  • The width setting on the status, text and commit-title columns was never applied and has been removed. (GH #617)

Improvements:

  • Improve load performance by throttling screen updates. (GH #622, #629)

  • Speed up graph rendering. (GH #638)

  • Enable scroll optimizations for Terminal.app and iTerm2. (GH #637)

  • Improve the test suite portability to not depend on GNU sed. (GH #609, #614)

  • Make build reproducible. (https://reproducible-builds.org/) (GH #613)

  • Enable binding to more symbolic keys and keys with control modifier: F13-F19, ShiftLeft, ShiftRight, ShiftDel, ShiftHome, ShiftEnd, ShiftTab, Ctrl-C, Ctrl-V, Ctrl-S, and Ctrl-@. (GH #314, #619, #642)

  • Persist readline history to ~/.tig_history or $XDG_DATA_HOME/tig/history. Use history-size to control the number of entries to save. (GH #620, #713, #714, #718)

  • Preload last search from persistent history. (GH #630)

  • Add view-close-no-quit action, unbound by default. (GH #607)

  • Add mouse-wheel-cursor option (off by default) when set to true causes wheel actions to prefer moving the cursor instead of scrolling. (GH #608)

  • Add truncation-delimiter option, set to ~ by default. (GH #646)

  • Add -q parameter to source for "source-if-present". (GH #612)

  • Add :echo prompt command to display text in the status bar. (GH #626, #636)

  • Make diff-highlight colors configurable. (GH #625, #633)

  • Let Ctrl-C exit Y/N dialog, menu prompts and the file finder. (GH #632, #648)

  • Hide cursor unless at textual prompt. (GH #643)

  • Expand tilde (~) in :script paths. (GH #674)

  • Show single-line output of external command in status bar. (GH #200, #557, #678)

  • Disable the graph when --no-merges is passed. (GH #687)

  • Print backtraces on segfault in debug mode.

  • Ignore script lines starting with # (comment). (GH #705)

  • Complete repo:* variables when readline is enabled. (GH #702)

  • Incorporate XTerm’s wcwidth.c to find Unicode widths. (GH #691)

Bug fixes:

  • Fix graph display issues. (GH #419, #638)

  • Fix and improve rendering of Unicode characters. (GH #330, #621, #644, #682)

  • Handle hyphenated directory names when listing content. (GH #602)

  • Do not jump to next match when cancelling the search prompt. (GH #627)

  • Fix clearing of the status line after Ctrl-C. (GH #623, #649)

  • Fix handling of width on line-number and trimmed width of 1. (GH #617)

  • Set cursor position when not updating prompt contents. (GH #647)

  • Erase status line at exit time for users without altscreen-capable terminals. (GH #589)

  • Fix unexpected keys when restoring from suspend (Ctrl-Z). (GH #232)

  • contrib/vim.tigrc: Also bind G in the main as a workaround for limitations of the none action. (GH #594, #599)

  • Only override blame-options when commands are given and fix parsing of -C. (GH #597)

  • Fix diff name discovery to better handle prefixes.

  • Interpret button5 as wheel-down. (GH #321, #606)

  • Fix back / parent in tree view. (GH #641)

  • Fix memory corruption in concat_argv and file finder. (GH #634, #655)

  • Fix reading from stdin for tig show.

  • Document problem of outdated system-wide tigrc files in Homebrew. (GH #598)

  • Repaint the display when toggling line-graphics. (GH #527)

  • Fix custom date formatting support longer strings. (GH #522)

  • Don’t segfault on ":exec" irregular args. (GH #686)

  • Fix segfault when calling htab_empty. (GH #663, #745)

tig-2.2.2

Upgrade instructions:

  • The status-untracked-dirs option was renamed to status-show-untracked-dirs to match the new status-show-untracked-files option.

Improvements:

  • Use diff-options when preparing the diff in the stage view to make the diff state configurable. (GH #545)

  • Add status-show-untracked-files option mirroring Git’s status.showUntrackedFiles to toggle display of untracked files. in the status view. On by default. (GH #562)

  • Update ax_with_curses.m4 and use pkg-config to detect. (GH #546)

  • Add tig-pick script for using Tig as a commit picker. (GH #575, #580)

  • Add "smart case" option (set ignore-case = smart-case) to ignore case when the search string is lower-case only. (GH #320, #579)

Bug fixes:

  • Fix author ident cache being keyed by email only. (GH #424, #526, #547)

  • Fix periodic refresh mode to properly detect ref changes. (GH #430, #591)

  • Add workaround for detecting failure to start the diff-highlight process.

  • Show diffs in the stash view when set mailmap = true. (GH #556)

  • Fix parsing of git-log revision arguments, such as --exclude=... in conjunction with --all. (GH #555)

  • Fix diff stat parsing for binary copies.

  • Fix crash when resizing terminal while search is in progress. (GH #515, #550)

  • Fix argument filtering to pass more arguments through to Git.

  • Check for termcap support in split tinfo libs. (GH #568, #585)

tig-2.2.1

Tarballs should now be downloaded from GitHub. Either go to https://github.com/jonas/tig/releases or use the following pattern:

https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz

MD5 checksums can be found at:

https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz.md5

Similarly, the home page is now also on GitHub at https://jonas.github.io/tig/. A big thanks to Simon L. B. Nielsen for generously hosting Tig on nitro.dk!

Improvements:

  • Support Git’s diff-highlight program when diff-highlight is set to either true or the path of the script to use for post-processing.

  • Add navigation between merge commits. (GH #525)

  • Add A as a binding to apply a stash without dropping it.

  • Bind Ctrl-D and Ctrl-U to half-page movements by default.

  • manual: Mention how to change default Up/Down behavior in diff view.

Bug fixes:

  • Reorganize checking of libraries for termcap functions.

  • Fix :goto <id> error message.

tig-2.2

Incompatibilities:

  • Note that all user-defined commands are now executed at the repository root instead of whatever subdirectory Tig was started in. (GH #412)

  • Remove cmdline-args option to avoid problems where setting it in ~/.tigrc potentially breaks other views due to its "context-sensitive" nature, where a git-log option maybe cause git-grep to fail. (GH #431)

Improvements:

  • Use .mailmap to show canonical name and email addresses, off by default. Add set mailmap = yes to ~/.tigrc to enable. (GH #411)

  • Highlight search results, configurable via search-result color. (GH #493)

  • Wrap around when searching, configurable via wrap-search setting.

  • Populate %(file) with file names from diff stat. (GH #404)

  • tig --merge implies --boundary similar to gitk.

  • Expose repository variables to external commands, e.g. %(repo:head) gives the branch name of the current HEAD and %(repo:cdup) for the repo root path.

  • Add make uninstall. (GH #417)

  • Add ZSH completion file (based on Bash completion) (GH #433)

  • Expose the text of the currently selected line as the %(text) (GH #457)

  • Allow users to specify rev arguments to blame (GH #439)

  • Update OSX make config to find brew installed ncurses

  • Add sample git-flow keybinding (GH #421)

  • Add chocolate theme (GH #432)

  • Show stash diffs. (GH #328)

  • Make user tigrc location configurable. (GH #479)

  • Compact relative date display mode. (GH #331)

  • Add date column option controlling whether to show local date.

  • Move to parent commit in the main view. (GH #388)

  • Add :goto <rev> prompt command to go to a git-rev-parse`d revision, e.g. `:goto some/branch or :goto %(commit)^2.

  • Respect the XDG standard for configuration files. (GH #513)

  • Show tracking information in tig status (GH #504)

  • Resolve diff paths when diff.noprefix is true. (GH #487, #488)

  • Support for custom strftime(3) date formats, e.g.:

    set main-view-date = custom
    set main-view-date-format = "%Y-%m-%d"

Bug fixes:

  • Prevent staged rename from displaying unstaged changes (GH #472, #491)

  • Fix corrupt chunk header during staging of single lines. (GH #410)

  • Fix out of bounds read in graph-v2 module. (GH #402)

  • Add currently checked out branch to %(branch). (GH #416)

  • Size diff stats correctly for split views.

  • Fix git-worktree support by using git-show-ref. (GH #437)

  • Add currently checked out branch to %(branch) (GH #416)

  • Fix segfault when hitting return in empty file search (GH #464)

  • Remove separator on horizontal split when switching from vertical split

  • Do not expand --all when parsing %(revargs) (GH #442, #462)

  • Fix exit when the main view is reloaded due to option toggling. (GH #470)

  • Expand all whitespace and control characters to spaces. (GH #485)

  • Restore ability to unbind a default keybinding with none. (GH #483)

  • Fix blob view to honor the wrap-lines setting.

tig-2.1.1

Improvements:

  • Add support for key combos. (GH #67)

  • See contrib/vim.tigrc for Vim-like keybindings. (GH #273, #351)

  • Add GitHub inspired file finder to search for and open any file. (GH #342)

  • Add search keymap for navigating file finder search results.

Bug fixes:

  • Fix display of multiple references per commit. (GH #390, #391)

  • Sync the prompt’s cursor position with readline’s internal position. (GH #396)

  • Keep unstaged changes view open after an staging command. (GH #399)

tig-2.1

Improvements:

  • Improve C99 compliance so Tig compiles with the native compilers on Solaris (SunStudio cc) and AIX (xlc). (GH #380)

  • Add move-half-page-up and move-half-page-down actions. (GH #323)

  • Preserve the cursor position when changing the diff context.

  • Show Unstaged changes above Staged changes in the main view. (GH #383)

  • Add :exec <flags><args...> prompt command to execute commands.

  • Add shorthand for changing the view settings of a single column, eg. set main-view-author = short. (GH #318)

  • Show better diff context info in the stage view.

  • Add %(lineno) state variable. (GH #304)

  • Use hash table to speed up refs lookup. (GH #350)

  • Show the file path in the blob view when available.

  • Use set commit-order = default to use Git’s default commit order, even when the commit graph is enabled. The option will turn off automatic enabling of --topo-order when the graph is shown in the main view. (GH #310, #324)

  • Speed up the diff view in large repos by loading git-describe info after the diff content has been read. (GH #324)

  • Add the old graph rendering as an option. (GH #310, #324)

  • Add main-options setting for specifying default main view options. Example: set main-options = --max-count=1000. (GH #368)

  • See contrib/large-repo.tigrc for settings that will help to speed up Tig in large repos. (GH #368)

  • Add :save-options <file> prompt command to save config to file. (GH #315)

Bug fixes:

  • Update manual to reflect default keybinding changes. (GH #325)

  • Fix graph support for --first-parent. (GH #326)

  • Fix off-by-one error when opening editor from the grep view.

  • Fix status on-branch information.

  • Fix main view to handle the case when git-log doesn’t find any commits.

  • Fix corner case when parsing diff chunk when lines information is missing.

  • Ensure main view changes commits are shown right before the current HEAD.

  • Fix rendering of boundary commits.

  • Fix compilation with GNU Make 3.80 by removing $(abspath). (GH #362)

  • Fix config parsing to support shell-like quoting in user-defined command, e.g. bind generic <Ctrl-f> :!git log -G"%(prompt Prompt: )" (GH #371)

  • Make diff meta information colors more consistent with Git. (GH #375)

  • Fix segfault when updating changes in a maximized stage view opened via the main view. (GH #376)

  • Handle line number configs where the interval is not specified. (GH #378)

  • Fix display of error messages during startup. (GH #385)

  • Show untracked files outside the current directory like git-status. (GH #230)

tig-2.0.3

Improvements:

  • Add :save-display <file> prompt command to save the current display.

  • Add :script <file> prompt command for scripting the Tig UI.

  • Add test framework and convert existing tests to use it.

  • Add command-line option for starting in refs view: tig refs. (GH #309)

  • Make blame commit ID colors stable across reloads. (GH #303)

  • Increase blame ID and graph rendering color palette to 14 colors.

  • New setting split-view-width controls the width for vertical splits. It takes the width of the right-most view either as a number or a percentage.

  • Expose settings holding command line argument lists: file-args, rev-args, and cmdline-args. They are mainly intended for testing purposes but also allows to change the filtering arguments dynamically. (GH #306)

  • Add log-options setting for specifying default log view options. Example: set log-options = --pretty=fuller.

  • Use option specific view flags to reload view after :set commands.

Bug fixes:

  • Refresh the current view when returning from an external command and refresh-mode=after-command. (GH #289)

  • Fix readline completion.

  • Fix / to find-next when readline support is enabled. (GH #302)

  • Fix readline prompt to correctly handle UTF-8 characters.

  • Add warnings for more obsolete actions and colors.

  • Fix passing of commit IDS via stdin to the main view.

  • Fix commit title overflow drawing for multibyte text. (GH #307)

  • Fix installation directory permissions.

  • Handle binary files matches reported by git-grep.

  • Toggling of "args"-typed options without any arguments will clear the current arguments. Example: :toggle blame-options.

  • Detect custom pretty.format settings that break the log view and fallback to use the medium format. (GH #225)

  • Fix invocation of git-diff for the blame view’s line tracking. (GH #316)

  • Fix blame completion of directory names. (GH #317)

  • Fix display of conflicts in the main view when show-changes is enabled.

  • Fix off-by-one error when displaying line numbers in the grep view.

  • When showing the commit graph ensure that either topo, date or author-date commit order is used. (Debian #757692) (GH #238)

tig-2.0.2

Improvements:

  • Use git-status for diffing the index.

  • Group toggle options together in the help view.

Bug fixes:

  • Fix refs, main and grep loading when gui.encoding is set. (GH #287)

  • Ignore gui.encoding and i18n.commitencoding when set to UTF-8.

  • Add work-around for missing strndup() on Mac OS X v10.6. (GH #286)

  • Fix spurious abbreviation of author names. (GH #288)

  • Don’t show empty action groups in the help view.

tig-2.0.1

Bug fixes:

  • Fix compilation in watch.c.

  • Fix parsing of key bindings mapped to ^ and <. (GH #280, #282)

tig-2.0

Note to packagers:

  • Add .adoc extension to AsciiDoc files so they show correctly on GitHub. This includes README, INSTALL, and NEWS and files in doc/ directory.

  • BUGS file has been merged into README.adoc.

  • Default keybindings have been moved to a system-level tigrc file, which is installed to $++SYSCONFDIR++ by default. The content of the tigrc file is included inside the binary as a fall-back. Pass NO_BUILTIN_TIGRC=y to not include the system tigrc content and reduce the size of the binary.

  • The example contrib/tigrc file (made obsolete by tigrc) has been removed.

  • Source files have been moved to src and include and tig.c was split up.

  • Build output is less verbose by default; use make V=1 for old output.

Incompatibilities:

  • In preparation for key combo support, key mappings for symbolic keys (e.g. Up and Down) must now start with < and end with >, e.g. <Up> and <Down>. Furthermore, escape key combos must now use <Esc>key instead of ^[key, and control key mappings must now use <Ctrl-key> instead of ^key.

  • Only use diff-options for the diff view and introduce %(cmdlineargs) to hold non-file and non-revision flags passed on the command line. Affects all user-defined commands that expect %(diffargs) to hold both diff-options arguments and those passed on the command line. (GH #228)

  • Remove built-in keybinding for git gc. Add the following line to ~/.tigrc to restore it: bind generic G ?git gc.

  • To support view specific colors, . can no longer be used interchangeably with - and _ in settings names and in particular color names.

  • Replace stage-next action with prompt command using a predefined search (see below) and add binding (@ by default) to also work in the diff view.

  • Most view display options must now be set via the new *-view options in tigrc. Existing options are no longer recognized, but a warning is shown.

  • Remap default bindings to have more consistent convention: use lower-case keys primarily for view switching and non-destructive actions, use upper-case keys for view-specific actions including user-defined commands. To preserve old default key bindings see contrib/bindings-v1.x.tigrc. (GH #257)

Improvements:

  • Add mouse support: scroll view, click line to move cursor, double click line (or click again) to "Enter" cursor line, e.g. open commit diff. Disabled by default, since it makes text selection less intuitive. If you enable this remember to hold down Shift (or Option on Mac) when selecting text.

  • Rewrite and improve the rendering of the commit graph. (GH #144, #46)

  • Add completion and history support to the prompt via readline. (GH #185)

  • Options can be configured and toggled individually for each view. Use the new view settings to configure the order and display options for each view columns. See system tigrc and tigrc(5) for examples. (GH #89, #222)

  • Add grep view as a front-end to git-grep(1): tig grep -p strchr. From within Tig, the key for switching or grepping is bound to g by default.

  • Rename branch view to refs view and show tags. (GH #134)

  • Add main view pager mode that reads git-log’s --pretty=raw data from stdin, e.g. git reflog --pretty=raw | tig --pretty=raw.

  • Add support for --graph and highlight diff stats in the log view.

  • Add default command bindings: ! to delete branch, ! to drop stash.

  • Add stage-split-chunk action for splitting chunks in the stage view. Bound to \ by default. (GH #107)

  • Add back action bound to < by default, which will return the blame view to the previous revision and line after moving e.g. to the parent. (GH #124)

  • Auto-refresh views based on watched repository changes. Configure by setting refresh-mode to manual, auto, after-command, or periodic. (GH #190)

  • All default settings are in well-documented system tigrc.

  • Add :toggle prompt command to manipulate options using keybindings. For example: bind diff D :toggle diff-options --patience --notes. (GH #69)

  • Add a new "auto" value for the vertical-split option to let Tig choose the split orientation (this is the new default behavior). Can be toggled.

  • Make it possible to toggle the display of files in untracked directories.

  • Allow Tig to be started with no default configuration by specifying an alternative system tigrc file, e.g.: TIGRC_SYSTEM=~/.tigrc.safe tig. Set TIGRC_SYSTEM to the empty string to use built-in configuration instead of

  • Key mappings can contain UTF-8 multibyte unicode keys.

  • Warn about conflicting keybindings using Ctrl, e.g. <Ctrl-f> and <Ctrl-F>. (GH #218)

  • Extend key bindings for prompt commands (ie. bind <keymap> <key> :<prompt>) to support predefined searches, eg.: bind stage 2 :?^@@.

  • Git color mappings can be configured in tigrc.

  • More informative configuration error messages.

  • Make reference label formatting configurable, for example: set reference-format = (branch) <tags> remote. (GH #201)

  • Adjust author width and other view columns automatically. (GH #49)

  • Support view specific colors: color stage.diff-add yellow default.

  • Copy -S, -G and --grep= pattern to search buffer so find-next and find-prev work as expected.

  • Optionally specify custom prompt for %(prompt) in shell commands, e.g. bind main B ?git checkout -b "%(prompt Enter new branch name: )".

  • Add %(remote) and %(tag) symbols to complement %(branch).

  • User-defined commands can now be prefixed with any of the supported flags, e.g. ?git checkout -b %(branch).

  • Open editor at line number for combined diffs e.g. diffs of unmerged files.

  • Add build configuration for Cygwin (OS name: CYGWIN_NT-6.1). (GH #92)

  • Document the Git commands supported by the pager mode. (GH #1) system tigrc configuration. (GH #235)

Bug fixes:

  • Fix stash diff display when reloading the stash view after a deleting.

  • Set the commit reference when opening the blame view from the blob view.

  • Correctly identify and highlight the remote branch tracked by HEAD.

  • Pass --no-color after user defined arguments to ensure that colors do not break the output parsing. (GH #191)

  • Close stdin when pager mode is not supported.

  • Show newly created branches in the main view. (GH #196)

  • File with 0 changes breaks diffstat highlighting (GH #215)

  • Update %(branch) variable in the main view. (GH #223)

  • Disable graph rendering when either of --reverse, -S, -G, and --grep are passed to the main view. (GH #127)

  • Only refresh views that support it.

  • Fix author and date annotation of renamed entries in the tree view.

  • Fix use of unsafe methods in the signal handler. (GH #245)

  • Fix rendering in non-UTF8 terminals.

  • Fix stage-update-line by rewriting the diff chunk containing the line instead of using --unidiff-zero and a diff context of zero. (GH #130)

  • Fix status-update to work for untracked directories. (GH #236)

  • Don’t pass log parameters given on the command line to the diff view.

tig-1.2.1

Incompatibilities:

  • Move manual and man pages to doc/ directory and rename AsciiDoc files to have .asciidoc as the extension to make them render on GitHub.

Improvements:

  • Show blob sizes in the tree view either as bytes or using binary unit prefixes. Example: set show-file-size = units. (GH #163)

  • Reduce main view memory usage and startup time, especially when revision graph rendering is disabled. (GH #160)

Bug fixes:

  • Fix submodule-related setup to check for non-zero return value from setenv(). (GH #188)

tig-1.2

Improvements:

  • Prompt commands can be bound to keys. For example: bind diff F :set diff-options = --full-diff. (GH #69, #116)

  • Add a diff-options setting for specifying default diff options. Example: set diff-options = --patience. (GH #116)

  • Options in diff-options and blame-options matching Tig browsing state variables are replaced.

  • Show diff stats as wide as the terminal. (GH #109)

  • Show line numbers in the branch view. (GH #135)

  • Add toggles for showing author email or email user names. (GH #115)

  • Open editor at the selected line by prefixing the file argument with +<lineno>. Tested in vi, Vim, Emacs, Nano, Gedit, Geany. Disable by adding set editor-line-number = no to ~/.tigrc. (GH #118, #119)

  • Add toggle-files to control whether to show full commit diff or only the diff concerning the currently selected file, e.g. for blame.

  • Optionally highlight exceeding characters in long commit titles. The default title max width is 50 characters. Customize using: set title-overflow = 50 (GH #125)

  • Add +ESC key bindings. Example: bind generic ^[v move-page-up (GH #120)

  • Create temporary files in TMPDIR, TEMP, or TMP before defaulting to /tmp.

  • Reenable tig log as a subcommand. (GH #146)

  • Enable tilde expansion in ~/.tigrc "source" commands. (GH #168)

  • Introduce the stash view, bound to the y keybinding. (GH #169, #174)

Bug fixes:

  • Fix blame and status to work in directories starting with a dot. (GH #172)

  • Reload current branch name when reloading the status view. (GH #93)

  • Fix compile errors on old Solaris. (GH #97)

  • Reload HEAD info when reloading the stage view. (GH #104, #93)

  • Fix disappearing branch labels after external commands. (GH #148)

  • Fix diff view display for staged/unstaged changes when using d.

  • Fix display of status messages when toggling view options. (GH #111)

  • Fix illegal memory access. (GH #98)

  • Fix display of all branches label in repos with short branch names.

  • Fix rendering glitch for branch names.

  • Do not apply diff styling to untracked files in the stage view. (GH #153)

  • Fix tree indentation for entries containing combining characters. (GH #170)

  • Ignore unrepresentable characters when transliterating text for rendering.

  • Transliterate text to output encoding before trimming it to avoid misalignment. (GH #86)

  • Introduce a more natural context-sensitive log display. (GH #155)

tig-1.1

Incompatibilities:

  • Disable diff move/copy detection by default, boosting diff performance on larger projects. Use git config diff.renames option (Git-wide) to set your preferred behavior. Environment variable TIG_DIFF_OPTS can be used to restore the old behavior.

  • Fix manual keybinding for stage-single-line. (GH #108)

  • Values set for author-width and filename-width will result in widths one character bigger than previously.

Improvements:

  • Typing a text in the prompt will be interpreted as a Tig command. Prefixing the command with a ! will execute this system command in an external pager. Entering a single key will execute the corresponding key binding.

  • Basic support for wrapping long line in pager, diff, and stage views. Enable using: set wrap-lines = yes. (GH #2)

  • User-defined commands prefixed with a ? means prompt before execution. Example: bind main B !?git rebase -i %(commit).

  • User-defined commands prefixed with a < means exit after execution. Example: bind main C !<git commit. (GH #66)

  • User-defined commands are executed unquoted to support shell commands. Example: bind generic I !@sh -c "echo -n %(commit) | xclip -selection c". (GH #65)

  • Configure case-insensitive searches using: set ignore-case = yes.

  • Add "deleted mode" line type for better diff coloring.

  • Open editor when requesting edit action from within a file diff.

  • Update AX_WITH_CURSES to build under Cygwin.

  • Improve tigrc(5) documentation. (Debian #682766)

  • Allow to build on Mac OS 10.7 without the configure script. (GH #25)

  • Add option to split the view vertically instead of horizontally. Example: ‘set vertical-split = yes’. (GH #76)

  • Add show-id and id-width options to configure the display of commit IDs in the main view and ID width in the blame view. (GH #77)

  • Allow to override Git based encoding to UTF-8 by setting i18n.commitencoding or gui.encoding.

  • Improve autobuild support to track generated files and work with autoreconf 2.61.

  • Commit IDs are read from stdin when --stdin is given; works for main and diff view, e.g. tig --no-walk --stdin < cherry-picks.txt.

  • Add option to disable focusing of the child view when it’s opened. Disable using: set focus-child = no. (GH #83)

  • Allow to open blob related with added content in a diff. (GH #91)

Bug fixes:

  • Fix commit graph regression when a path spec is specified. (GH #53)

  • Main view: only show staged/unstaged changes for the current branch.

  • Support submodules created with current version of git. (GH #54)

  • Fix diff status message for file diffs with no content changes.

  • Fix parent blaming when Tig is launched in subdirectory. (GH #70)

  • Do not show deleted branch when reloading the branch view.

tig-1.0

The master repository is git://github.com/jonas/tig.git, and the old master repository (http://jonas.nitro.dk/tig/tig.git) will be retired.

Improvements:

  • Use git-log(1)s default commit ordering. The old behavior can be restored by adding set commit-order = topo to ~/.tigrc.

  • Support staging of single lines. Bound to 1 default. (GH #21)

  • Use +<lineno> to open the initial view at an arbitrary line. (GH #20)

  • Add show-notes ~/.tigrc option. Notes are displayed by default.

  • Support jumping to specific SHAs in the main view.

  • Decorate replaced commits.

  • Display line numbers in main view.

  • Colorize binary diff stats. (GH #17)

  • Custom colorization of lines matching a string prefix (GH #16). Example configuration: color "Reported-by:" green default

  • Use Git’s color settings for the main, status and diff views. Put set read-git-colors = no in ~/.tigrc to disable.

  • Handle editor options with multiple arguments. (GH #12)

  • Show filename when running tig blame with copy detection. (GH #19)

  • Use source <path> command to load additional files from ~/.tigrc

  • User-defined commands prefixed with @ are run with no console output, e.g.

    bind generic 3 !@rm sys$command
  • Make display of space changes togglable in the diff and stage view. Bound to W by default.

  • Use per-file encoding specified in gitattributes(5) for blobs and unstaged files.

  • Obsolete commit-encoding option and pass --encoding=UTF-8 to revision commands.

  • Main view: show uncommitted changes as staged/unstaged commits. Can be disabled by putting set show-changes = no in ~/.tigrc.

  • Add %(prompt) external command variable, which will prompt for the argument value.

  • Log information about Git commands when the TIG_TRACE environment variable is set. Example: TIG_TRACE=/tmp/tig.log tig

  • Branch view: Show the title of the last commit.

  • Increase the author auto-abbreviation threshold to 10. (GH #49)

  • For old commits show number of years in relative dates. (GH #50)

Bug fixes:

  • Fix navigation behavior when going from branch to main view. (GH #38)

  • Fix segfault when sorting the tree view by author name.

  • Fix diff stat navigation for unmodified files with stat changes.

  • Show branches/refs which names are a substring of the current branch.

  • Stage view: fix off-by-one error when jumping to a file in a diff with only one file.

  • Fix diff-header colorization. (GH #15)

tig-0.18

Incompatibilities:

  • Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables.

Improvements:

  • Pressing enter on diff stat file lines will jump to file’s diff.

  • Naïvely color blame IDs to distinguish lines.

  • Document palette color options used for revision graph and blame IDs.

  • Add support for blaming diff lines.

  • Add diff-context option and bindings to increase the diff context in the diff and stage view.

  • (GH-6) Make blame configurable via extra options passed from the command line and blame-options setting from ~/.tigrc. For example:

    set blame-options = -C -C -C

Bug fixes:

  • Expand browsing state variables for prompt. (LP #694780, Debian #635546)

  • Fix segfault when sorting the branch view by author.

  • Expand %(directory) to . for the root directory. (GH-3)

  • Accept utf-8 for the line-graphics option as indicated in the docs.

  • Use erasechar() to check for the correct backspace character.

tig-0.17

Improvements:

  • Start rewrite of the revision graph renderer. Three modes are supported UTF-8, ncurses line graphics, and ASCII. Also, enable revision graph rendering by default.

Bug fixes:

  • Fix ncurses 5.8 issue by passing non-zero column size to newwin().

  • Fix opening of diffs when browsing branches.

tig-0.16.2

Bug fixes:

  • Fix regression causing empty tree view.

  • Fix set_tabsize() compile error for older versions of ncurses.

tig-0.16.1

Improvements:

  • Add scroll-first-col action to jump to the first column. Bound to | by default.

  • Add status-untracked-dirs option to ignore unknown directories contents in the status view. On by default.

Bug fixes:

  • Fix tig show <commit> to show the provided commit.

  • Fix problem with empty diff views when file specs were passed on the command line.

  • Fix segfault when starting Tig in pager mode.

tig-0.16

Incompatibilities:

  • Encode everything internally as UTF-8. This can affect performance, but should in general improve handling of character lengths etc. Also, to properly handle UTF-8 environments use ncurses with wide character support.

  • The use of TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables has been deprecated. To allow configuration of the diff view, TIG_DIFF_OPTS can be used.

Improvements:

  • Plug several memory leaks.

  • Command line arguments are split into diff, revision, and file arguments and made available as %(diffargs), %(revargs), and %(fileargs). Diff view will limit diffs using %(fileargs).

  • Status view: update the file variable when a line is selected so %(file) works as expected.

  • Branch view: add %(branch) symbol providing access to the selected branch.

  • Branch view: add entry to browse all branches (uses git-log’s --all flag).

  • Abbreviation of author names can now be configured and toggled.

  • Mark detached heads with [HEAD].

  • Add support for displaying dates in local time.

Bug fixes:

  • Status view: fix usage from sub directories, which was broken by the changes made to support blame view from sub directories.

  • Fix text expansion to not truncate long lines

  • Fix parsing of boolean show-date values.

  • Fix relative date.

  • Fix unbind to behave as if the keybinding was never defined.

  • Fix unbind to also cover built-in run requests.

  • Fix parsing of unknown keymap names.

  • Blame view: fix parent blame to detect renames. It uses "previous" line info from the blame porcelain output added in Git version 1.6.3.

tig-0.15

Incompatibilities:

  • Setting the cursor color no longer automatically sets the text to bold. The old lazy behavior was a bug.

  • Remove check for git-repo-config, which was officially deprecated in Git version 1.5.4. The configure script no longer depends on Git being installed.

Improvements:

  • Provide the manual as a man page named tigmanual(7).

  • Add ability to toggle between showing shorter dates (without time info) and relative dates. Use D to toggle between date formats.

  • Show the active (instead of the default) keybindings in the help view. Furthermore, honor the keymap when suggesting actions in the help messages.

  • Add branch view for choosing which branch to display in the main view. Bound to H by default.

  • Tree view: show entry to parent directory (..) when running from subdirectory.

  • Tree view: sort entries by name, date or author. Toggling is bound to i by default, with I controlling whether or not to sort in ascending order.

  • Make height of the lower view in a split view configurable by setting the split-view-height variable to a number or a percentage. Defaults to 2/3 of the total view height.

  • Allow multiple text attributes for color commands:

    color cursor white blue underline bold

Bug fixes:

  • Blame view: fix loading of blame data when opened from the tree view and CWD is not the repo root. (Debian bug 540766)

  • Tree view: fix searching.

tig-0.14.1

Improvements:

  • Status view: improve "on branch" information inspired by the prompt code in Git’s bash completion script.

  • Colors for 256-capable terminals can be specified as colorN.

  • Entering a number in the prompt will jump to that line number.

  • Handle core.worktree by setting GIT_DIR and GIT_WORK_TREE.

  • Make behavior of horizontal scrolling configurable by setting the horizontal-scroll variable to a number or a percentage. Defaults to scrolling 50% of the view width.

Bug fixes:

  • Status view: show error when failing to open a file.

  • Status view: report failures to update a file.

  • Blame view: fix problem with uninitialized variable.

  • Blame view: use line number information when loading blame for specific commit.

  • Fix handling of quoted strings in the config file.

  • Fix horizontal scrolling glitches.

tig-0.14

Incompatibilities:

  • The screen-resize action has been deprecated. It had no real use for users and was never meant to be exposed.

  • The "tree-parent" action was renamed to "parent". Warnings will be emitted for transition.

  • Remove parsing of deprecated option -S and subcommands log and diff.

  • The "author" color replaces "main-author". Setting the latter will now set the "author" color.

Improvements:

  • Horizontal scrolling. Bound to Left/Right by default.

  • Read tigrc(5) options from Git configuration files using the syntax:

    [tig] show-rev-graph = true
    [tig "color"] cursor = yellow red bold
    [tig "bind"] generic = P parent
  • Tree view: avoid flickering when updating.

  • Tree view: annotate entries with commit information.

  • Tree & blob view: open any blob in an editor.

  • Stage & main view: restore view position when reloading.

  • Blame view: load blame for parent commit. For merge commits the parent is queried. Bound to , by default via the existing "parent" action.

  • Abbreviate author names to initials when the width of the author column is below 6 characters.

Bug fixes:

  • Tree view: fix memory corruption bug when updating.

  • Tree view: improve handling of empty trees.

  • Status view: fix reverting of unmerged files.

  • Fix regression for non-UTF-8 locales corrupting the view data.

  • Fix regression parsing multiple spaces in ~/.tigrc.

tig-0.13

Incompatibilities:

  • Commands from the environment (e.g. TIG_MAIN_CMD) will no longer have access to shell features, such as subshells and variable expansion. The easiest way to upgrade your configuration is to put such commands in a script file or as a Git alias.

Improvements:

  • Display repository references in the sorted order: tags, heads, tracked remotes, remotes.

  • Add bash completion for blame.

  • Tree view: edit files of the current branch.

  • Run requests: new identifiers %(directory), %(file), and %(ref)

  • Improve responsiveness and view loading speed by using select(2).

Bug fixes:

  • Separate blame revision and file argument by "--" to avoid problems.

  • Main view: fix redrawing of the last commit wrt. the revision graph.

  • Fix waiting for input after executing a run request in pager mode.

  • Status & stage view: refuse to open directories and deleted files.

  • Tree view: show error when requesting blame for all non-file entries.

  • Do not draw loading views, which are not displayed.

  • Fix launching of mergetool from a subdirectory.

tig-0.12.1

Improvements:

  • Status view: revert uncommitted diff chunks and unstaged files with changes. Bound to ! by default.

  • Main view: use --topo-order also when rev-list arguments are given on the command line.

  • Log view: support for refreshing.

Bug fixes:

  • Status view: use ls-files' --exclude-standard so user specific ignore rules are effective. The option was added in Git version 1.5.4.

  • Stage view: fix assertion failure triggered when updating while status view is not displayed.

  • Help view: avoid confusion by showing "(no key)" instead of "?" for unbound requests.

  • Reload repository references when refreshing the main (and log) view.

  • Do not maximize views when refreshing.

tig-0.12

Improvements:

  • F5 also refreshes the current view.

  • Allow line graphics to be disabled with new line-graphics option.

  • Main view: also include the reference names when searching.

  • Main view: support for refreshing.

  • Main view: disable boundary commits by default. Use --boundary when they should be shown. (Debian bug 498628)

  • Stage view: add stage-next action to jump to next diff chunk that can be staged. By default bound to @.

  • Configure: check for the ncurses header files.

  • Add author-width option to customize the width of the author column. For example, put the following in ~/.tigrc: set author-width = 10

Bug fixes:

  • Fix regression when staging all diff chunks in a section.

  • Bind the maximize view action to O; it conflicted with the keybinding to launch the merge tool in the status view.

  • Fix problem with $(cmd) usage in shell code. Some shells (jsh) installed as /bin/sh does not support it.

  • Do not show incomplete boundary commits when --no-walk is used.

  • Documentation: Rename gitlink macro to support AsciiDoc 8.2.3.

  • Ignore pipe reads with errno "Success" reported after a signals, for example when refreshing doing background loading.

tig-0.11

Incompatibilities:

  • Remove parsing of deprecated options: -g, -l, -d.

  • The first seen -- will stop option parsing and is passed to Git instead of breaking out of Tig’s option parsing.

New features:

  • Blame view; bound to B by default, reachable from the command line and the tree, status, and stage views.

  • Blame/main view: allow display of date, author, and references to be toggled on/off. Bound to D, A, and F respectively.

  • Add action to maximize the current view.

Improvements:

  • Show the current branch in the status view.

  • Show local/light-weight tags.

Bug fixes:

  • Fix regressions for the pager mode.

  • Fix refreshing of the index with working directory info.

tig-0.10.1

Improvements:

  • Status view: detect renamed files and show them with R.

  • Status view: refresh the index to avoid "empty diffs".

  • Diff view: make diff headers more verbose to include e.g. committer.

  • Configure: check for the ncursesw library.

Bug fixes:

  • Fix UTF-8 handling for tag names and commit messages.

  • Fix the check for git-config(1) in configure to handle the case when Git has been installed using a libexecdir which is not in the path.

  • Fix replacing of SYSCONFDIR when installing from released tarballs.

tig-0.10

Incompatibilities:

  • Deprecate most Tig specific command line options to make Tig more compatible with gitk. The deprecated options are: -g, -l, -d, and -S. Use of any of them will result in a warning being printed to stderr. Instead of -S, use the new status subcommand.

  • Make man page building depend on DocBook XSL version >= 1.72.0.

  • Install man pages in $(prefix)/share/man.

  • Implement the cherry pick action (bound to C) using new support for running external commands. This obsoletes the TIG_CHEERY_PICK environment variable

New features:

  • Add support for binding keys to external commands. To bind . to running git-commit(1), add the line: "bind generic . !git commit" to your ~/.tigrc. Each command can have replacement string such as %(commit), %(head), and %(blob), which are substituted before the command is run.

  • Add system-wide configuration file defaulting to $(prefix)/etc/tigrc.

  • Add the environment variables TIGRC_USER and TIGRC_SYSTEM to change user and system-wide configuration files, respectively.

Improvements:

  • Main view: color the revision graph.

  • Main view: show boundary commits; they are marked with ^ in the revision graph.

  • Tree view: add tree-parent action to jump to view of the parent tree. Bound to , by default.

  • Allow the default terminal colors to be overwritten. To use black text on white, add the line "color default white black" to your ~/.tigrc.

  • Misc. documentation improvements.

Bug fixes:

  • Use git-diff-index(1) and git-diff-files(1) instead of git-diff(1) to avoid running external diff drivers.

  • Use --no-color when calling git-log(1).

  • Fix crash when opening mergetool for lines that are not unmerged.

tig-0.9.1

Incompatibilities:

  • Make the clean rule to never remove generated documentation files. Use the distclean rule for accomplishing this.

New features:

  • Add support for cherry-picking commits in the main view to the current branch. Bound to C by default.

Improvements:

  • Add support for launching git-mergetool(1) from the status view. Bound to M by default.

  • Add support for refreshing/reloading the status view

  • Detect working trees and disable the status view when it is missing.

Bug fixes:

  • Fix iconv() checking in configure.

  • Fix editor invocation to make paths relative to the project root.

  • Fix out-of-range current line when reloading the status view.

  • Include autoconf files in the tarball generated by make dist.

tig-0.9

New features:

  • Add bash completion script for Tig (contrib/tig-completion.bash).

  • Add optional autoconf-based build infrastructure.

  • Add stage view for showing changes in the working tree and add support for staging individual diff chunks for commit.

Improvements:

  • Status view: allow all files in a section to be staged for commit.

  • Status view: Add support for opening files in an editor. Bound to e by default.

  • Tree view: use a stack for remembering the lines for parent tree.

/* vim: set tw=80: */


tig-2.4.1/README.adoc000066400000000000000000000033061332650737300141010ustar00rootroot00000000000000Tig: text-mode interface for Git ================================ :docext: adoc image:https://secure.travis-ci.org/jonas/tig.svg?branch=master[Travis Build,link=https://travis-ci.org/jonas/tig] image:https://ci.appveyor.com/api/projects/status/jxt1uf52o7r0a8r7/branch/master?svg=true[AppVeyor Build,link=https://ci.appveyor.com/project/fonseca/tig] image:https://badges.gitter.im/Join%20Chat.svg[Join Chat,link="https://gitter.im/jonas/tig?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"] What is Tig? ------------ Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands. Resources --------- - Homepage: https://jonas.github.io/tig/[] - Manual: https://jonas.github.io/tig/doc/manual.html[] - Tarballs: https://github.com/jonas/tig/releases[] - Git URL: git://github.com/jonas/tig.git - Gitter: https://gitter.im/jonas/tig[] - Q&A: https://stackoverflow.com/questions/tagged/tig[] Bugs and Feature Requests ------------------------- Bugs and feature requests can be reported using the https://github.com/jonas/tig/issues[issue tracker] or by mail to either the Git mailing list or directly to the maintainer. Ensure that the word "tig" is in the subject. For other Tig related questions please use Stack Overflow: https://stackoverflow.com/questions/tagged/tig[]. Installation and News --------------------- Information on how to build and install Tig are found in link:INSTALL.{docext}[the installation instructions]. News about releases and latest features and bug fixes are found in link:NEWS.{docext}[the release notes]. tig-2.4.1/README.html000066400000000000000000000053341332650737300141420ustar00rootroot00000000000000

Tig: text-mode interface for Git

Travis Build AppVeyor Build Join Chat

What is Tig?

Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands.

Bugs and Feature Requests

Bugs and feature requests can be reported using the issue tracker or by mail to either the Git mailing list or directly to the maintainer. Ensure that the word "tig" is in the subject. For other Tig related questions please use Stack Overflow: https://stackoverflow.com/questions/tagged/tig.

Installation and News

Information on how to build and install Tig are found in the installation instructions.

News about releases and latest features and bug fixes are found in the release notes.

tig-2.4.1/appveyor.yml000066400000000000000000000006201332650737300147000ustar00rootroot00000000000000environment: matrix: - TARGET: cygwin64 ARCH: x86_64 install: - cmd: C:\%TARGET%\setup-%ARCH%.exe -qgnNdO -l C:\%TARGET%\var\cache\setup -R C:\%TARGET% -s http://cygwin.mirror.constant.com -P git -P gcc-code -P make -P automake -P libiconv-devel -P libncurses-devel - cmd: SET PATH=C:\%TARGET%\bin;%PATH% build_script: - make configure - sh configure - make test_script: - make test tig-2.4.1/autogen.sh000077500000000000000000000010051332650737300143070ustar00rootroot00000000000000#!/bin/sh export WARNINGS="all" set -e # Ideally, we could just do this: # #${AUTORECONF:-autoreconf} -v -I tools # # Unfortunately, Autoconf 2.61's autoreconf(1) (found in Mac OS X 10.5 # Leopard) neglects to pass the -I on to aclocal(1), which is # precisely where we need it! So we do basically what it would have # done. run () { test "${V}" = 1 && echo $0: running: "$@" "$@" } run ${ACLOCAL:-aclocal} -I tools run ${AUTOCONF:-autoconf} --include=tools run ${AUTOHEADER:-autoheader} --include=tools tig-2.4.1/book.json000066400000000000000000000005721332650737300141430ustar00rootroot00000000000000{ "gitbook": "3.2.x", "title": "Tig - Text-mode interface for Git", "structure": { "readme": "README.adoc", "summary": "book.md" }, "links": { "sharing": { "twitter": false, "facebook": false, "google": false, "all": false } }, "plugins": ["ga"], "pluginsConfig": { "ga": { "token": "UA-7492166-1" } } } tig-2.4.1/book.md000066400000000000000000000004651332650737300135730ustar00rootroot00000000000000# Summary - [Installation](INSTALL.adoc) - [Release notes](NEWS.adoc) - [tig(1)](doc/tig.1.adoc) - [tigrc(5)](doc/tigrc.5.adoc) - [Manual](doc/manual.adoc) - [Screenshots](https://www.flickr.com/photos/jonasfonseca/albums/72157614470764617) - Developer Documentation - [Testing](test/README.adoc) tig-2.4.1/compat/000077500000000000000000000000001332650737300135755ustar00rootroot00000000000000tig-2.4.1/compat/ansidecl.h000066400000000000000000000244761332650737300155450ustar00rootroot00000000000000/* ANSI and traditional C compatability macros Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2013 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* ANSI and traditional C compatibility macros ANSI C is assumed if __STDC__ is #defined. Macro ANSI C definition Traditional C definition ----- ---- - ---------- ----------- - ---------- PTR `void *' `char *' const not defined `' volatile not defined `' signed not defined `' For ease of writing code which uses GCC extensions but needs to be portable to other compilers, we provide the GCC_VERSION macro that simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various wrappers around __attribute__. Also, __extension__ will be #defined to nothing if it doesn't work. See below. */ #ifndef _ANSIDECL_H #define _ANSIDECL_H 1 #ifdef __cplusplus extern "C" { #endif /* Every source file includes this file, so they will all get the switch for lint. */ /* LINTLIBRARY */ /* Using MACRO(x,y) in cpp #if conditionals does not work with some older preprocessors. Thus we can't define something like this: #define HAVE_GCC_VERSION(MAJOR, MINOR) \ (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) and then test "#if HAVE_GCC_VERSION(2,7)". So instead we use the macro below and test it against specific values. */ /* This macro simplifies testing whether we are using gcc, and if it is of a particular minimum version. (Both major & minor numbers are significant.) This macro will evaluate to 0 if we are not using gcc at all. */ #ifndef GCC_VERSION #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #endif /* GCC_VERSION */ #if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) /* All known AIX compilers implement these things (but don't always define __STDC__). The RISC/OS MIPS compiler defines these things in SVR4 mode, but does not define __STDC__. */ /* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other C++ compilers, does not define __STDC__, though it acts as if this was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */ #define PTR void * #undef const #undef volatile #undef signed /* inline requires special treatment; it's in C99, and GCC >=2.7 supports it too, but it's not in C89. */ #undef inline #if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__)) /* it's a keyword */ #else # if GCC_VERSION >= 2007 # define inline __inline__ /* __inline__ prevents -pedantic warnings */ # else # define inline /* nothing */ # endif #endif #else /* Not ANSI C. */ #define PTR char * /* some systems define these in header files for non-ansi mode */ #undef const #undef volatile #undef signed #undef inline #define const #define volatile #define signed #define inline #endif /* ANSI C. */ /* Define macros for some gcc attributes. This permits us to use the macros freely, and know that they will come into play for the version of gcc in which they are supported. */ #if (GCC_VERSION < 2007) # define __attribute__(x) #endif /* Attribute __malloc__ on functions was valid as of gcc 2.96. */ #ifndef ATTRIBUTE_MALLOC # if (GCC_VERSION >= 2096) # define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define ATTRIBUTE_MALLOC # endif /* GNUC >= 2.96 */ #endif /* ATTRIBUTE_MALLOC */ /* Attributes on labels were valid as of gcc 2.93 and g++ 4.5. For g++ an attribute on a label must be followed by a semicolon. */ #ifndef ATTRIBUTE_UNUSED_LABEL # ifndef __cplusplus # if GCC_VERSION >= 2093 # define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED # else # define ATTRIBUTE_UNUSED_LABEL # endif # else # if GCC_VERSION >= 4005 # define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED ; # else # define ATTRIBUTE_UNUSED_LABEL # endif # endif #endif /* Similarly to ARG_UNUSED below. Prior to GCC 3.4, the C++ frontend couldn't parse attributes placed after the identifier name, and now the entire compiler is built with C++. */ #ifndef ATTRIBUTE_UNUSED #if GCC_VERSION >= 3004 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #else #define ATTRIBUTE_UNUSED #endif #endif /* ATTRIBUTE_UNUSED */ /* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the identifier name. */ #if ! defined(__cplusplus) || (GCC_VERSION >= 3004) # define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED #else /* !__cplusplus || GNUC >= 3.4 */ # define ARG_UNUSED(NAME) NAME #endif /* !__cplusplus || GNUC >= 3.4 */ #ifndef ATTRIBUTE_NORETURN #define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) #endif /* ATTRIBUTE_NORETURN */ /* Attribute `nonnull' was valid as of gcc 3.3. */ #ifndef ATTRIBUTE_NONNULL # if (GCC_VERSION >= 3003) # define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) # else # define ATTRIBUTE_NONNULL(m) # endif /* GNUC >= 3.3 */ #endif /* ATTRIBUTE_NONNULL */ /* Attribute `returns_nonnull' was valid as of gcc 4.9. */ #ifndef ATTRIBUTE_RETURNS_NONNULL # if (GCC_VERSION >= 4009) # define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) # else # define ATTRIBUTE_RETURNS_NONNULL # endif /* GNUC >= 4.9 */ #endif /* ATTRIBUTE_RETURNS_NONNULL */ /* Attribute `pure' was valid as of gcc 3.0. */ #ifndef ATTRIBUTE_PURE # if (GCC_VERSION >= 3000) # define ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define ATTRIBUTE_PURE # endif /* GNUC >= 3.0 */ #endif /* ATTRIBUTE_PURE */ /* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL. This was the case for the `printf' format attribute by itself before GCC 3.3, but as of 3.3 we need to add the `nonnull' attribute to retain this behavior. */ #ifndef ATTRIBUTE_PRINTF #define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m) #define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) #define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) #define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) #define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) #define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) #endif /* ATTRIBUTE_PRINTF */ /* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on a function pointer. Format attributes were allowed on function pointers as of gcc 3.1. */ #ifndef ATTRIBUTE_FPTR_PRINTF # if (GCC_VERSION >= 3001) # define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n) # else # define ATTRIBUTE_FPTR_PRINTF(m, n) # endif /* GNUC >= 3.1 */ # define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2) # define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3) # define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4) # define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5) # define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6) #endif /* ATTRIBUTE_FPTR_PRINTF */ /* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A NULL format specifier was allowed as of gcc 3.3. */ #ifndef ATTRIBUTE_NULL_PRINTF # if (GCC_VERSION >= 3003) # define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) # else # define ATTRIBUTE_NULL_PRINTF(m, n) # endif /* GNUC >= 3.3 */ # define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2) # define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3) # define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4) # define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5) # define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6) #endif /* ATTRIBUTE_NULL_PRINTF */ /* Attribute `sentinel' was valid as of gcc 3.5. */ #ifndef ATTRIBUTE_SENTINEL # if (GCC_VERSION >= 3005) # define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) # else # define ATTRIBUTE_SENTINEL # endif /* GNUC >= 3.5 */ #endif /* ATTRIBUTE_SENTINEL */ #ifndef ATTRIBUTE_ALIGNED_ALIGNOF # if (GCC_VERSION >= 3000) # define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m)))) # else # define ATTRIBUTE_ALIGNED_ALIGNOF(m) # endif /* GNUC >= 3.0 */ #endif /* ATTRIBUTE_ALIGNED_ALIGNOF */ /* Useful for structures whose layout must much some binary specification regardless of the alignment and padding qualities of the compiler. */ #ifndef ATTRIBUTE_PACKED # define ATTRIBUTE_PACKED __attribute__ ((packed)) #endif /* Attribute `hot' and `cold' was valid as of gcc 4.3. */ #ifndef ATTRIBUTE_COLD # if (GCC_VERSION >= 4003) # define ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define ATTRIBUTE_COLD # endif /* GNUC >= 4.3 */ #endif /* ATTRIBUTE_COLD */ #ifndef ATTRIBUTE_HOT # if (GCC_VERSION >= 4003) # define ATTRIBUTE_HOT __attribute__ ((__hot__)) # else # define ATTRIBUTE_HOT # endif /* GNUC >= 4.3 */ #endif /* ATTRIBUTE_HOT */ /* We use __extension__ in some places to suppress -pedantic warnings about GCC extensions. This feature didn't work properly before gcc 2.8. */ #if GCC_VERSION < 2008 #define __extension__ #endif /* This is used to declare a const variable which should be visible outside of the current compilation unit. Use it as EXPORTED_CONST int i = 1; This is because the semantics of const are different in C and C++. "extern const" is permitted in C but it looks strange, and gcc warns about it when -Wc++-compat is not used. */ #ifdef __cplusplus #define EXPORTED_CONST extern const #else #define EXPORTED_CONST const #endif /* Be conservative and only use enum bitfields with C++ or GCC. FIXME: provide a complete autoconf test for buggy enum bitfields. */ #ifdef __cplusplus #define ENUM_BITFIELD(TYPE) enum TYPE #elif (GCC_VERSION > 2000) #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE #else #define ENUM_BITFIELD(TYPE) unsigned int #endif #ifdef __cplusplus } #endif #endif /* ansidecl.h */ tig-2.4.1/compat/compat.h000066400000000000000000000032241332650737300152320ustar00rootroot00000000000000/* Copyright (c) 2006-2013 Jonas Fonseca * Copyright (c) 2013 Drew Northup * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_COMPAT_H #define TIG_COMPAT_H #ifndef HAVE_CONFIG_H /* * Enable inclusion of header files checked by configure. */ #define HAVE_STDINT_H #define HAVE_STDLIB_H #define HAVE_STRING_H #define HAVE_SYS_TIME_H #define HAVE_UNISTD_H #define HAVE_WORDEXP_H #endif /* * XXX: Compatibility code must never be enabled by default. */ #ifdef NO_MKSTEMPS #define mkstemps compat_mkstemps int compat_mkstemps(char *pattern, int suffix_len); #endif #ifdef NO_SETENV #define setenv compat_setenv int compat_setenv(const char *name, const char *value, int replace); #endif #ifdef NO_STRNDUP #include #define strndup compat_strndup char *compat_strndup(const char *s, size_t n); #endif #ifdef NO_WORDEXP #define wordexp compat_wordexp #define wordfree compat_wordfree #define WRDE_NOCMD 4 typedef struct { char **we_wordv; } wordexp_t; int compat_wordexp (const char *words, wordexp_t *pwordexp, int flags); void compat_wordfree (wordexp_t *pwordexp); #else #include #endif #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/compat/hashtab.c000066400000000000000000000714051332650737300153620ustar00rootroot00000000000000/* An expandable hash tables datatype. Copyright (C) 1999-2018 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This file is part of the libiberty library. Libiberty 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; either version 2 of the License, or (at your option) any later version. Libiberty 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 libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This package implements basic hash table functionality. It is possible to search for an entry, create an entry and destroy an entry. Elements in the table are generic pointers. The size of the table is not fixed; if the occupancy of the table grows too high the hash table will be expanded. The abstract data implementation is based on generalized Algorithm D from Knuth's book "The art of computer programming". Hash table is expanded by creation of new hash table and transferring elements from the old table to the new table. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_INTTYPES_H #include #endif #ifdef HAVE_STDINT_H #include #endif #include #include "ansidecl.h" #include "hashtab.h" #ifndef CHAR_BIT #define CHAR_BIT 8 #endif static unsigned int higher_prime_index (unsigned long); static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int); static hashval_t htab_mod (hashval_t, htab_t); static hashval_t htab_mod_m2 (hashval_t, htab_t); static hashval_t hash_pointer (const void *); static int eq_pointer (const void *, const void *); static int htab_expand (htab_t); static PTR *find_empty_slot_for_expand (htab_t, hashval_t); /* At some point, we could make these be NULL, and modify the hash-table routines to handle NULL specially; that would avoid function-call overhead for the common case of hashing pointers. */ htab_hash htab_hash_pointer = hash_pointer; htab_eq htab_eq_pointer = eq_pointer; /* Table of primes and multiplicative inverses. Note that these are not minimally reduced inverses. Unlike when generating code to divide by a constant, we want to be able to use the same algorithm all the time. All of these inverses (are implied to) have bit 32 set. For the record, here's the function that computed the table; it's a vastly simplified version of the function of the same name from gcc. */ #if 0 unsigned int ceil_log2 (unsigned int x) { int i; for (i = 31; i >= 0 ; --i) if (x > (1u << i)) return i+1; abort (); } unsigned int choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp) { unsigned long long mhigh; double nx; int lgup, post_shift; int pow, pow2; int n = 32, precision = 32; lgup = ceil_log2 (d); pow = n + lgup; pow2 = n + lgup - precision; nx = ldexp (1.0, pow) + ldexp (1.0, pow2); mhigh = nx / d; *shiftp = lgup - 1; *mlp = mhigh; return mhigh >> 32; } #endif struct prime_ent { hashval_t prime; hashval_t inv; hashval_t inv_m2; /* inverse of prime-2 */ hashval_t shift; }; static struct prime_ent const prime_tab[] = { { 7, 0x24924925, 0x9999999b, 2 }, { 13, 0x3b13b13c, 0x745d1747, 3 }, { 31, 0x08421085, 0x1a7b9612, 4 }, { 61, 0x0c9714fc, 0x15b1e5f8, 5 }, { 127, 0x02040811, 0x0624dd30, 6 }, { 251, 0x05197f7e, 0x073260a5, 7 }, { 509, 0x01824366, 0x02864fc8, 8 }, { 1021, 0x00c0906d, 0x014191f7, 9 }, { 2039, 0x0121456f, 0x0161e69e, 10 }, { 4093, 0x00300902, 0x00501908, 11 }, { 8191, 0x00080041, 0x00180241, 12 }, { 16381, 0x000c0091, 0x00140191, 13 }, { 32749, 0x002605a5, 0x002a06e6, 14 }, { 65521, 0x000f00e2, 0x00110122, 15 }, { 131071, 0x00008001, 0x00018003, 16 }, { 262139, 0x00014002, 0x0001c004, 17 }, { 524287, 0x00002001, 0x00006001, 18 }, { 1048573, 0x00003001, 0x00005001, 19 }, { 2097143, 0x00004801, 0x00005801, 20 }, { 4194301, 0x00000c01, 0x00001401, 21 }, { 8388593, 0x00001e01, 0x00002201, 22 }, { 16777213, 0x00000301, 0x00000501, 23 }, { 33554393, 0x00001381, 0x00001481, 24 }, { 67108859, 0x00000141, 0x000001c1, 25 }, { 134217689, 0x000004e1, 0x00000521, 26 }, { 268435399, 0x00000391, 0x000003b1, 27 }, { 536870909, 0x00000019, 0x00000029, 28 }, { 1073741789, 0x0000008d, 0x00000095, 29 }, { 2147483647, 0x00000003, 0x00000007, 30 }, /* Avoid "decimal constant so large it is unsigned" for 4294967291. */ { 0xfffffffb, 0x00000006, 0x00000008, 31 } }; /* The following function returns an index into the above table of the nearest prime number which is greater than N, and near a power of two. */ static unsigned int higher_prime_index (unsigned long n) { unsigned int low = 0; unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]); while (low != high) { unsigned int mid = low + (high - low) / 2; if (n > prime_tab[mid].prime) low = mid + 1; else high = mid; } /* If we've run out of primes, abort. */ if (n > prime_tab[low].prime) { fprintf (stderr, "Cannot find prime bigger than %lu\n", n); abort (); } return low; } /* Returns non-zero if P1 and P2 are equal. */ static int eq_pointer (const PTR p1, const PTR p2) { return p1 == p2; } /* The parens around the function names in the next two definitions are essential in order to prevent macro expansions of the name. The bodies, however, are expanded as expected, so they are not recursive definitions. */ /* Return the current size of given hash table. */ #define htab_size(htab) ((htab)->size) size_t (htab_size) (htab_t htab) { return htab_size (htab); } /* Return the current number of elements in given hash table. */ #define htab_elements(htab) ((htab)->n_elements - (htab)->n_deleted) size_t (htab_elements) (htab_t htab) { return htab_elements (htab); } /* Return X % Y. */ static inline hashval_t htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift) { /* The multiplicative inverses computed above are for 32-bit types, and requires that we be able to compute a highpart multiply. */ #ifdef UNSIGNED_64BIT_TYPE __extension__ typedef UNSIGNED_64BIT_TYPE ull; if (sizeof (hashval_t) * CHAR_BIT <= 32) { hashval_t t1, t2, t3, t4, q, r; t1 = ((ull)x * inv) >> 32; t2 = x - t1; t3 = t2 >> 1; t4 = t1 + t3; q = t4 >> shift; r = x - (q * y); return r; } #endif /* Otherwise just use the native division routines. */ return x % y; } /* Compute the primary hash for HASH given HTAB's current size. */ static inline hashval_t htab_mod (hashval_t hash, htab_t htab) { const struct prime_ent *p = &prime_tab[htab->size_prime_index]; return htab_mod_1 (hash, p->prime, p->inv, p->shift); } /* Compute the secondary hash for HASH given HTAB's current size. */ static inline hashval_t htab_mod_m2 (hashval_t hash, htab_t htab) { const struct prime_ent *p = &prime_tab[htab->size_prime_index]; return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift); } /* This function creates table with length slightly longer than given source length. Created hash table is initiated as empty (all the hash table entries are HTAB_EMPTY_ENTRY). The function returns the created hash table, or NULL if memory allocation fails. */ htab_t htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f, htab_alloc alloc_f, htab_free free_f) { return htab_create_typed_alloc (size, hash_f, eq_f, del_f, alloc_f, alloc_f, free_f); } /* As above, but uses the variants of ALLOC_F and FREE_F which accept an extra argument. */ htab_t htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f, void *alloc_arg, htab_alloc_with_arg alloc_f, htab_free_with_arg free_f) { htab_t result; unsigned int size_prime_index; size_prime_index = higher_prime_index (size); size = prime_tab[size_prime_index].prime; result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab)); if (result == NULL) return NULL; result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR)); if (result->entries == NULL) { if (free_f != NULL) (*free_f) (alloc_arg, result); return NULL; } result->size = size; result->size_prime_index = size_prime_index; result->hash_f = hash_f; result->eq_f = eq_f; result->del_f = del_f; result->alloc_arg = alloc_arg; result->alloc_with_arg_f = alloc_f; result->free_with_arg_f = free_f; return result; } /* @deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @ htab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @ htab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @ htab_free @var{free_f}) This function creates a hash table that uses two different allocators @var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself and its entries respectively. This is useful when variables of different types need to be allocated with different allocators. The created hash table is slightly larger than @var{size} and it is initially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}). The function returns the created hash table, or @code{NULL} if memory allocation fails. @end deftypefn */ htab_t htab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f, htab_alloc alloc_tab_f, htab_alloc alloc_f, htab_free free_f) { htab_t result; unsigned int size_prime_index; size_prime_index = higher_prime_index (size); size = prime_tab[size_prime_index].prime; result = (htab_t) (*alloc_tab_f) (1, sizeof (struct htab)); if (result == NULL) return NULL; result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR)); if (result->entries == NULL) { if (free_f != NULL) (*free_f) (result); return NULL; } result->size = size; result->size_prime_index = size_prime_index; result->hash_f = hash_f; result->eq_f = eq_f; result->del_f = del_f; result->alloc_f = alloc_f; result->free_f = free_f; return result; } /* Update the function pointers and allocation parameter in the htab_t. */ void htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f, htab_del del_f, PTR alloc_arg, htab_alloc_with_arg alloc_f, htab_free_with_arg free_f) { htab->hash_f = hash_f; htab->eq_f = eq_f; htab->del_f = del_f; htab->alloc_arg = alloc_arg; htab->alloc_with_arg_f = alloc_f; htab->free_with_arg_f = free_f; } /* These functions exist solely for backward compatibility. */ #undef htab_create /* htab_t htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) { return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free); } htab_t htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) { return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free); } */ /* This function frees all memory allocated for given hash table. Naturally the hash table must already exist. */ void htab_delete (htab_t htab) { size_t size = htab_size (htab); PTR *entries = htab->entries; int i; if (htab->del_f) for (i = size - 1; i >= 0; i--) if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) (*htab->del_f) (entries[i]); if (htab->free_f != NULL) { (*htab->free_f) (entries); (*htab->free_f) (htab); } else if (htab->free_with_arg_f != NULL) { (*htab->free_with_arg_f) (htab->alloc_arg, entries); (*htab->free_with_arg_f) (htab->alloc_arg, htab); } } /* This function clears all entries in the given hash table. */ void htab_empty (htab_t htab) { size_t size = htab_size (htab); PTR *entries = htab->entries; int i; if (htab->del_f) for (i = size - 1; i >= 0; i--) if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) (*htab->del_f) (entries[i]); /* Instead of clearing megabyte, downsize the table. */ if (size > 1024*1024 / sizeof (PTR)) { int nindex = higher_prime_index (1024 / sizeof (PTR)); int nsize = prime_tab[nindex].prime; if (htab->free_f != NULL) (*htab->free_f) (htab->entries); else if (htab->free_with_arg_f != NULL) (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries); if (htab->alloc_with_arg_f != NULL) htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, sizeof (PTR *)); else htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); htab->size = nsize; htab->size_prime_index = nindex; } else memset (entries, 0, size * sizeof (PTR)); htab->n_deleted = 0; htab->n_elements = 0; } /* Similar to htab_find_slot, but without several unwanted side effects: - Does not call htab->eq_f when it finds an existing entry. - Does not change the count of elements/searches/collisions in the hash table. This function also assumes there are no deleted entries in the table. HASH is the hash value for the element to be inserted. */ static PTR * find_empty_slot_for_expand (htab_t htab, hashval_t hash) { hashval_t index = htab_mod (hash, htab); size_t size = htab_size (htab); PTR *slot = htab->entries + index; hashval_t hash2; if (*slot == HTAB_EMPTY_ENTRY) return slot; else if (*slot == HTAB_DELETED_ENTRY) abort (); hash2 = htab_mod_m2 (hash, htab); for (;;) { index += hash2; if (index >= size) index -= size; slot = htab->entries + index; if (*slot == HTAB_EMPTY_ENTRY) return slot; else if (*slot == HTAB_DELETED_ENTRY) abort (); } } /* The following function changes size of memory allocated for the entries and repeatedly inserts the table elements. The occupancy of the table after the call will be about 50%. Naturally the hash table must already exist. Remember also that the place of the table entries is changed. If memory allocation failures are allowed, this function will return zero, indicating that the table could not be expanded. If all goes well, it will return a non-zero value. */ static int htab_expand (htab_t htab) { PTR *oentries; PTR *olimit; PTR *p; PTR *nentries; size_t nsize, osize, elts; unsigned int oindex, nindex; oentries = htab->entries; oindex = htab->size_prime_index; osize = htab->size; olimit = oentries + osize; elts = htab_elements (htab); /* Resize only when table after removal of unused elements is either too full or too empty. */ if (elts * 2 > osize || (elts * 8 < osize && osize > 32)) { nindex = higher_prime_index (elts * 2); nsize = prime_tab[nindex].prime; } else { nindex = oindex; nsize = osize; } if (htab->alloc_with_arg_f != NULL) nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, sizeof (PTR *)); else nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); if (nentries == NULL) return 0; htab->entries = nentries; htab->size = nsize; htab->size_prime_index = nindex; htab->n_elements -= htab->n_deleted; htab->n_deleted = 0; p = oentries; do { PTR x = *p; if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) { PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); *q = x; } p++; } while (p < olimit); if (htab->free_f != NULL) (*htab->free_f) (oentries); else if (htab->free_with_arg_f != NULL) (*htab->free_with_arg_f) (htab->alloc_arg, oentries); return 1; } /* This function searches for a hash table entry equal to the given element. It cannot be used to insert or delete an element. */ PTR htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash) { hashval_t index, hash2; size_t size; PTR entry; htab->searches++; size = htab_size (htab); index = htab_mod (hash, htab); entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) return entry; hash2 = htab_mod_m2 (hash, htab); for (;;) { htab->collisions++; index += hash2; if (index >= size) index -= size; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) return entry; } } /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ PTR htab_find (htab_t htab, const PTR element) { return htab_find_with_hash (htab, element, (*htab->hash_f) (element)); } /* This function searches for a hash table slot containing an entry equal to the given element. To delete an entry, call this with insert=NO_INSERT, then call htab_clear_slot on the slot returned (possibly after doing some checks). To insert an entry, call this with insert=INSERT, then write the value you want into the returned slot. When inserting an entry, NULL may be returned if memory allocation fails. */ PTR * htab_find_slot_with_hash (htab_t htab, const PTR element, hashval_t hash, enum insert_option insert) { PTR *first_deleted_slot; hashval_t index, hash2; size_t size; PTR entry; size = htab_size (htab); if (insert == INSERT && size * 3 <= htab->n_elements * 4) { if (htab_expand (htab) == 0) return NULL; size = htab_size (htab); } index = htab_mod (hash, htab); htab->searches++; first_deleted_slot = NULL; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY) goto empty_entry; else if (entry == HTAB_DELETED_ENTRY) first_deleted_slot = &htab->entries[index]; else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; hash2 = htab_mod_m2 (hash, htab); for (;;) { htab->collisions++; index += hash2; if (index >= size) index -= size; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY) goto empty_entry; else if (entry == HTAB_DELETED_ENTRY) { if (!first_deleted_slot) first_deleted_slot = &htab->entries[index]; } else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; } empty_entry: if (insert == NO_INSERT) return NULL; if (first_deleted_slot) { htab->n_deleted--; *first_deleted_slot = HTAB_EMPTY_ENTRY; return first_deleted_slot; } htab->n_elements++; return &htab->entries[index]; } /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ PTR * htab_find_slot (htab_t htab, const PTR element, enum insert_option insert) { return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element), insert); } /* This function deletes an element with the given value from hash table (the hash is computed from the element). If there is no matching element in the hash table, this function does nothing. */ void htab_remove_elt (htab_t htab, PTR element) { htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element)); } /* This function deletes an element with the given value from hash table. If there is no matching element in the hash table, this function does nothing. */ void htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash) { PTR *slot; slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT); if (!slot || *slot == HTAB_EMPTY_ENTRY) return; if (htab->del_f) (*htab->del_f) (*slot); *slot = HTAB_DELETED_ENTRY; htab->n_deleted++; } /* This function clears a specified slot in a hash table. It is useful when you've already done the lookup and don't want to do it again. */ void htab_clear_slot (htab_t htab, PTR *slot) { if (slot < htab->entries || slot >= htab->entries + htab_size (htab) || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY) abort (); if (htab->del_f) (*htab->del_f) (*slot); *slot = HTAB_DELETED_ENTRY; htab->n_deleted++; } /* This function scans over the entire hash table calling CALLBACK for each live entry. If CALLBACK returns false, the iteration stops. INFO is passed as CALLBACK's second argument. */ void htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info) { PTR *slot; PTR *limit; slot = htab->entries; limit = slot + htab_size (htab); do { PTR x = *slot; if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) if (!(*callback) (slot, info)) break; } while (++slot < limit); } /* Like htab_traverse_noresize, but does resize the table when it is too empty to improve effectivity of subsequent calls. */ void htab_traverse (htab_t htab, htab_trav callback, PTR info) { size_t size = htab_size (htab); if (htab_elements (htab) * 8 < size && size > 32) htab_expand (htab); htab_traverse_noresize (htab, callback, info); } /* Return the fraction of fixed collisions during all work with given hash table. */ double htab_collisions (htab_t htab) { if (htab->searches == 0) return 0.0; return (double) htab->collisions / (double) htab->searches; } /* Hash P as a null-terminated string. Copied from gcc/hashtable.c. Zack had the following to say with respect to applicability, though note that unlike hashtable.c, this hash table implementation re-hashes rather than chain buckets. http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html From: Zack Weinberg Date: Fri, 17 Aug 2001 02:15:56 -0400 I got it by extracting all the identifiers from all the source code I had lying around in mid-1999, and testing many recurrences of the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either prime numbers or the appropriate identity. This was the best one. I don't remember exactly what constituted "best", except I was looking at bucket-length distributions mostly. So it should be very good at hashing identifiers, but might not be as good at arbitrary strings. I'll add that it thoroughly trounces the hash functions recommended for this use at http://burtleburtle.net/bob/hash/index.html, both on speed and bucket distribution. I haven't tried it against the function they just started using for Perl's hashes. */ hashval_t htab_hash_string (const PTR p) { const unsigned char *str = (const unsigned char *) p; hashval_t r = 0; unsigned char c; while ((c = *str++) != 0) r = r * 67 + c - 113; return r; } /* DERIVED FROM: -------------------------------------------------------------------- lookup2.c, by Bob Jenkins, December 1996, Public Domain. hash(), hash2(), hash3, and mix() are externally useful functions. Routines to test the hash are included if SELF_TEST is defined. You can use this free for any purpose. It has no warranty. -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- mix -- mix 3 32-bit values reversibly. For every delta with one or two bit set, and the deltas of all three high bits or all three low bits, whether the original value of a,b,c is almost all zero or is uniformly distributed, * If mix() is run forward or backward, at least 32 bits in a,b,c have at least 1/4 probability of changing. * If mix() is run forward, every bit of c will change between 1/3 and 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.) mix() was built out of 36 single-cycle latency instructions in a structure that could supported 2x parallelism, like so: a -= b; a -= c; x = (c>>13); b -= c; a ^= x; b -= a; x = (a<<8); c -= a; b ^= x; c -= b; x = (b>>13); ... Unfortunately, superscalar Pentiums and Sparcs can't take advantage of that parallelism. They've also turned some of those single-cycle latency instructions into multi-cycle latency instructions. Still, this is the fastest good hash I could find. There were about 2^^68 to choose from. I only looked at a billion or so. -------------------------------------------------------------------- */ /* same, but slower, works on systems that might have 8 byte hashval_t's */ #define mix(a,b,c) \ { \ a -= b; a -= c; a ^= (c>>13); \ b -= c; b -= a; b ^= (a<< 8); \ c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \ a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \ b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \ c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \ a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \ b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \ c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \ } /* -------------------------------------------------------------------- hash() -- hash a variable-length key into a 32-bit value k : the key (the unaligned variable-length array of bytes) len : the length of the key, counting by bytes level : can be any 4-byte value Returns a 32-bit value. Every bit of the key affects every bit of the return value. Every 1-bit and 2-bit delta achieves avalanche. About 36+6len instructions. The best hash table sizes are powers of 2. There is no need to do mod a prime (mod is sooo slow!). If you need less than 32 bits, use a bitmask. For example, if you need only 10 bits, do h = (h & hashmask(10)); In which case, the hash table should have hashsize(10) elements. If you are hashing n strings (ub1 **)k, do it like this: for (i=0, h=0; i= 12) /* aligned */ { a += *(hashval_t *)(k+0); b += *(hashval_t *)(k+4); c += *(hashval_t *)(k+8); mix(a,b,c); k += 12; len -= 12; } else /* unaligned */ #endif while (len >= 12) { a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24)); b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24)); c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24)); mix(a,b,c); k += 12; len -= 12; } /*------------------------------------- handle the last 11 bytes */ c += length; switch(len) /* all the case statements fall through */ { case 11: c+=((hashval_t)k[10]<<24); /* fall through */ case 10: c+=((hashval_t)k[9]<<16); /* fall through */ case 9 : c+=((hashval_t)k[8]<<8); /* fall through */ /* the first byte of c is reserved for the length */ case 8 : b+=((hashval_t)k[7]<<24); /* fall through */ case 7 : b+=((hashval_t)k[6]<<16); /* fall through */ case 6 : b+=((hashval_t)k[5]<<8); /* fall through */ case 5 : b+=k[4]; /* fall through */ case 4 : a+=((hashval_t)k[3]<<24); /* fall through */ case 3 : a+=((hashval_t)k[2]<<16); /* fall through */ case 2 : a+=((hashval_t)k[1]<<8); /* fall through */ case 1 : a+=k[0]; /* case 0: nothing left to add */ } mix(a,b,c); /*-------------------------------------------- report the result */ return c; } /* Returns a hash code for pointer P. Simplified version of evahash */ static hashval_t hash_pointer (const PTR p) { intptr_t v = (intptr_t) p; unsigned a, b, c; a = b = 0x9e3779b9; a += v >> (sizeof (intptr_t) * CHAR_BIT / 2); b += v & (((intptr_t) 1 << (sizeof (intptr_t) * CHAR_BIT / 2)) - 1); c = 0x42135234; mix (a, b, c); return c; } tig-2.4.1/compat/hashtab.h000066400000000000000000000163511332650737300153660ustar00rootroot00000000000000/* An expandable hash tables datatype. Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2009, 2010 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This package implements basic hash table functionality. It is possible to search for an entry, create an entry and destroy an entry. Elements in the table are generic pointers. The size of the table is not fixed; if the occupancy of the table grows too high the hash table will be expanded. The abstract data implementation is based on generalized Algorithm D from Knuth's book "The art of computer programming". Hash table is expanded by creation of new hash table and transferring elements from the old table to the new table. */ #ifndef __HASHTAB_H__ #define __HASHTAB_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ansidecl.h" #ifndef GTY #define GTY(X) #endif /* The type for a hash code. */ typedef unsigned int hashval_t; /* Callback function pointer types. */ /* Calculate hash of a table entry. */ typedef hashval_t (*htab_hash) (const void *); /* Compare a table entry with a possible entry. The entry already in the table always comes first, so the second element can be of a different type (but in this case htab_find and htab_find_slot cannot be used; instead the variants that accept a hash value must be used). */ typedef int (*htab_eq) (const void *, const void *); /* Cleanup function called whenever a live element is removed from the hash table. */ typedef void (*htab_del) (void *); /* Function called by htab_traverse for each live element. The first arg is the slot of the element (which can be passed to htab_clear_slot if desired), the second arg is the auxiliary pointer handed to htab_traverse. Return 1 to continue scan, 0 to stop. */ typedef int (*htab_trav) (void **, void *); /* Memory-allocation function, with the same functionality as calloc(). Iff it returns NULL, the hash table implementation will pass an error code back to the user, so if your code doesn't handle errors, best if you use xcalloc instead. */ typedef void *(*htab_alloc) (size_t, size_t); /* We also need a free() routine. */ typedef void (*htab_free) (void *); /* Memory allocation and deallocation; variants which take an extra argument. */ typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t); typedef void (*htab_free_with_arg) (void *, void *); /* This macro defines reserved value for empty table entry. */ #define HTAB_EMPTY_ENTRY ((PTR) 0) /* This macro defines reserved value for table entry which contained a deleted element. */ #define HTAB_DELETED_ENTRY ((PTR) 1) /* Hash tables are of the following type. The structure (implementation) of this type is not needed for using the hash tables. All work with hash table should be executed only through functions mentioned below. The size of this structure is subject to change. */ struct GTY(()) htab { /* Pointer to hash function. */ htab_hash hash_f; /* Pointer to comparison function. */ htab_eq eq_f; /* Pointer to cleanup function. */ htab_del del_f; /* Table itself. */ void ** GTY ((use_param, length ("%h.size"))) entries; /* Current size (in entries) of the hash table. */ size_t size; /* Current number of elements including also deleted elements. */ size_t n_elements; /* Current number of deleted elements in the table. */ size_t n_deleted; /* The following member is used for debugging. Its value is number of all calls of `htab_find_slot' for the hash table. */ unsigned int searches; /* The following member is used for debugging. Its value is number of collisions fixed for time of work with the hash table. */ unsigned int collisions; /* Pointers to allocate/free functions. */ htab_alloc alloc_f; htab_free free_f; /* Alternate allocate/free functions, which take an extra argument. */ void * GTY((skip)) alloc_arg; htab_alloc_with_arg alloc_with_arg_f; htab_free_with_arg free_with_arg_f; /* Current size (in entries) of the hash table, as an index into the table of primes. */ unsigned int size_prime_index; }; typedef struct htab *htab_t; /* An enum saying whether we insert into the hash table or not. */ enum insert_option {NO_INSERT, INSERT}; /* The prototypes of the package functions. */ extern htab_t htab_create_alloc (size_t, htab_hash, htab_eq, htab_del, htab_alloc, htab_free); extern htab_t htab_create_alloc_ex (size_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg); extern htab_t htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del, htab_alloc, htab_alloc, htab_free); /* Backward-compatibility functions. */ extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del); extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del); extern void htab_set_functions_ex (htab_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg); extern void htab_delete (htab_t); extern void htab_empty (htab_t); extern void * htab_find (htab_t, const void *); extern void ** htab_find_slot (htab_t, const void *, enum insert_option); extern void * htab_find_with_hash (htab_t, const void *, hashval_t); extern void ** htab_find_slot_with_hash (htab_t, const void *, hashval_t, enum insert_option); extern void htab_clear_slot (htab_t, void **); extern void htab_remove_elt (htab_t, void *); extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t); extern void htab_traverse (htab_t, htab_trav, void *); extern void htab_traverse_noresize (htab_t, htab_trav, void *); extern size_t htab_size (htab_t); extern size_t htab_elements (htab_t); extern double htab_collisions (htab_t); /* A hash function for pointers. */ extern htab_hash htab_hash_pointer; /* An equality function for pointers. */ extern htab_eq htab_eq_pointer; /* A hash function for null-terminated strings. */ extern hashval_t htab_hash_string (const void *); /* An iterative hash function for arbitrary data. */ extern hashval_t iterative_hash (const void *, size_t, hashval_t); /* Shorthand for hashing something with an intrinsic size. */ #define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __HASHTAB_H */ tig-2.4.1/compat/mkstemps.c000066400000000000000000000074511332650737300156130ustar00rootroot00000000000000/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc. This file is derived from mkstemp.c from the GNU C Library. The GNU C 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; either version 2 of the License, or (at your option) any later version. The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This file was copied on 2013-08-03 from: * https://raw.github.com/mirrors/gcc/master/libiberty/mkstemps.c */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif /* We need to provide a type for gcc_uint64_t. */ #ifdef __GNUC__ __extension__ typedef unsigned long long gcc_uint64_t; #else typedef unsigned long gcc_uint64_t; #endif #ifndef TMP_MAX #define TMP_MAX 16384 #endif #ifndef O_BINARY # define O_BINARY 0 #endif /* @deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len}) Generate a unique temporary file name from @var{pattern}. @var{pattern} has the form: @example @var{path}/ccXXXXXX@var{suffix} @end example @var{suffix_len} tells us how long @var{suffix} is (it can be zero length). The last six characters of @var{pattern} before @var{suffix} must be @samp{XXXXXX}; they are replaced with a string that makes the filename unique. Returns a file descriptor open on the file for reading and writing. @end deftypefn */ int compat_mkstemps (char *pattern, int suffix_len) { static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static gcc_uint64_t value; #ifdef HAVE_GETTIMEOFDAY struct timeval tv; #endif char *XXXXXX; size_t len; int count; len = strlen (pattern); if ((int) len < 6 + suffix_len || strncmp (&pattern[len - 6 - suffix_len], "XXXXXX", 6)) { return -1; } XXXXXX = &pattern[len - 6 - suffix_len]; #ifdef HAVE_GETTIMEOFDAY /* Get some more or less random data. */ gettimeofday (&tv, NULL); value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); #else value += getpid (); #endif for (count = 0; count < TMP_MAX; ++count) { gcc_uint64_t v = value; int fd; /* Fill in the random bits. */ XXXXXX[0] = letters[v % 62]; v /= 62; XXXXXX[1] = letters[v % 62]; v /= 62; XXXXXX[2] = letters[v % 62]; v /= 62; XXXXXX[3] = letters[v % 62]; v /= 62; XXXXXX[4] = letters[v % 62]; v /= 62; XXXXXX[5] = letters[v % 62]; fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600); if (fd >= 0) /* The file does not exist. */ return fd; if (errno != EEXIST #ifdef EISDIR && errno != EISDIR #endif ) /* Fatal error (EPERM, ENOSPC etc). Doesn't make sense to loop. */ break; /* This is a random value. It is only necessary that the next TMP_MAX values generated by adding 7777 to VALUE are different with (module 2^32). */ value += 7777; } /* We return the null string if we can't find a unique file name. */ pattern[0] = '\0'; return -1; } tig-2.4.1/compat/setenv.c000066400000000000000000000110471332650737300152500ustar00rootroot00000000000000/* Copyright (C) 1992, 1995, 1996, 1997, 2002, 2011 Free Software Foundation, Inc. This file based on setenv.c in the GNU C Library. The GNU C 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; either version 2 of the License, or (at your option) any later version. The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This file was borrowed on 2013-08-08 from: * https://raw.github.com/mirrors/gcc/master/libiberty/setenv.c */ /* @deftypefn Supplemental int setenv (const char *@var{name}, @ const char *@var{value}, int @var{overwrite}) @deftypefnx Supplemental void unsetenv (const char *@var{name}) @code{setenv} adds @var{name} to the environment with value @var{value}. If the name was already present in the environment, the new value will be stored only if @var{overwrite} is nonzero. The companion @code{unsetenv} function removes @var{name} from the environment. This implementation is not safe for multithreaded code. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat.h" #include /* For `size_t' */ #include /* For `NULL' */ #include #if !defined(errno) && !defined(HAVE_DECL_ERRNO) extern int errno; #endif #define __set_errno(ev) ((errno) = (ev)) #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #define __environ environ #ifndef HAVE_DECL_ENVIRON extern char **environ; #endif /* LOCK and UNLOCK are defined as no-ops. This makes the tig * implementation MT-Unsafe. */ #define LOCK #define UNLOCK /* Below this point, it's verbatim code from the glibc-2.0 implementation */ /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; int compat_setenv (const char *name, const char *value, int replace) { register char **ep = 0; register size_t size; const size_t namelen = strlen (name); const size_t vallen = strlen (value) + 1; LOCK; size = 0; if (__environ != NULL) { for (ep = __environ; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (__environ == NULL || *ep == NULL) { char **new_environ; if (__environ == last_environ && __environ != NULL) /* We allocated this space; we can extend it. */ new_environ = (char **) realloc (last_environ, (size + 2) * sizeof (char *)); else new_environ = (char **) malloc ((size + 2) * sizeof (char *)); if (new_environ == NULL) { UNLOCK; return -1; } new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { free ((char *) new_environ); __set_errno (ENOMEM); UNLOCK; return -1; } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { size_t len = strlen (*ep); if (len + 1 < namelen + 1 + vallen) { /* The existing string is too short; malloc a new one. */ char *new_string = (char *) malloc (namelen + 1 + vallen); if (new_string == NULL) { UNLOCK; return -1; } *ep = new_string; } memcpy (*ep, name, namelen); (*ep)[namelen] = '='; memcpy (&(*ep)[namelen + 1], value, vallen); } UNLOCK; return 0; } #if 0 void compat_unsetenv (const char *name) { const size_t len = strlen (name); char **ep; LOCK; for (ep = __environ; *ep; ++ep) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } UNLOCK; } #endif tig-2.4.1/compat/strndup.c000066400000000000000000000027271332650737300154500ustar00rootroot00000000000000/* Implement the strndup function. Copyright (C) 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty 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; either version 2 of the License, or (at your option) any later version. Libiberty 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 libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This file was borrowed on 2014-05-05 and adapted from: * https://raw.github.com/mirrors/gcc/master/libiberty/strndup.c */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif char * compat_strndup (const char *s, size_t n) { char *result; size_t len = strlen (s); if (n < len) len = n; result = (char *) malloc (len + 1); if (!result) return 0; result[len] = '\0'; return (char *) memcpy (result, s, len); } tig-2.4.1/compat/utf8proc.c000066400000000000000000000732061332650737300155230ustar00rootroot00000000000000/* -*- mode: c; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*- */ /* * Copyright (c) 2015 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors. * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS 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. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /* * This library contains derived data from a modified version of the * Unicode data files. * * The original data files are available at * http://www.unicode.org/Public/UNIDATA/ * * Please notice the copyright statement in the file "utf8proc_data.c". */ /* * File name: utf8proc.c * * Description: * Implementation of libutf8proc. */ #include "utf8proc.h" #include "utf8proc_data.c" UTF8PROC_DLLEXPORT const utf8proc_int8_t utf8proc_utf8class[256] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 }; #define UTF8PROC_HANGUL_SBASE 0xAC00 #define UTF8PROC_HANGUL_LBASE 0x1100 #define UTF8PROC_HANGUL_VBASE 0x1161 #define UTF8PROC_HANGUL_TBASE 0x11A7 #define UTF8PROC_HANGUL_LCOUNT 19 #define UTF8PROC_HANGUL_VCOUNT 21 #define UTF8PROC_HANGUL_TCOUNT 28 #define UTF8PROC_HANGUL_NCOUNT 588 #define UTF8PROC_HANGUL_SCOUNT 11172 /* END is exclusive */ #define UTF8PROC_HANGUL_L_START 0x1100 #define UTF8PROC_HANGUL_L_END 0x115A #define UTF8PROC_HANGUL_L_FILLER 0x115F #define UTF8PROC_HANGUL_V_START 0x1160 #define UTF8PROC_HANGUL_V_END 0x11A3 #define UTF8PROC_HANGUL_T_START 0x11A8 #define UTF8PROC_HANGUL_T_END 0x11FA #define UTF8PROC_HANGUL_S_START 0xAC00 #define UTF8PROC_HANGUL_S_END 0xD7A4 /* Should follow semantic-versioning rules (semver.org) based on API compatibility. (Note that the shared-library version number will be different, being based on ABI compatibility.): */ #define STRINGIZEx(x) #x #define STRINGIZE(x) STRINGIZEx(x) UTF8PROC_DLLEXPORT const char *utf8proc_version(void) { return STRINGIZE(UTF8PROC_VERSION_MAJOR) "." STRINGIZE(UTF8PROC_VERSION_MINOR) "." STRINGIZE(UTF8PROC_VERSION_PATCH) ""; } UTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode) { switch (errcode) { case UTF8PROC_ERROR_NOMEM: return "Memory for processing UTF-8 data could not be allocated."; case UTF8PROC_ERROR_OVERFLOW: return "UTF-8 string is too long to be processed."; case UTF8PROC_ERROR_INVALIDUTF8: return "Invalid UTF-8 string"; case UTF8PROC_ERROR_NOTASSIGNED: return "Unassigned Unicode code point found in UTF-8 string."; case UTF8PROC_ERROR_INVALIDOPTS: return "Invalid options for UTF-8 processing chosen."; default: return "An unknown error occurred while processing UTF-8 data."; } } #define utf_cont(ch) (((ch) & 0xc0) == 0x80) UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *dst ) { utf8proc_uint32_t uc; const utf8proc_uint8_t *end; *dst = -1; if (!strlen) return 0; end = str + ((strlen < 0) ? 4 : strlen); uc = *str++; if (uc < 0x80) { *dst = uc; return 1; } // Must be between 0xc2 and 0xf4 inclusive to be valid if ((uc - 0xc2) > (0xf4-0xc2)) return UTF8PROC_ERROR_INVALIDUTF8; if (uc < 0xe0) { // 2-byte sequence // Must have valid continuation character if (str >= end || !utf_cont(*str)) return UTF8PROC_ERROR_INVALIDUTF8; *dst = ((uc & 0x1f)<<6) | (*str & 0x3f); return 2; } if (uc < 0xf0) { // 3-byte sequence if ((str + 1 >= end) || !utf_cont(*str) || !utf_cont(str[1])) return UTF8PROC_ERROR_INVALIDUTF8; // Check for surrogate chars if (uc == 0xed && *str > 0x9f) return UTF8PROC_ERROR_INVALIDUTF8; uc = ((uc & 0xf)<<12) | ((*str & 0x3f)<<6) | (str[1] & 0x3f); if (uc < 0x800) return UTF8PROC_ERROR_INVALIDUTF8; *dst = uc; return 3; } // 4-byte sequence // Must have 3 valid continuation characters if ((str + 2 >= end) || !utf_cont(*str) || !utf_cont(str[1]) || !utf_cont(str[2])) return UTF8PROC_ERROR_INVALIDUTF8; // Make sure in correct range (0x10000 - 0x10ffff) if (uc == 0xf0) { if (*str < 0x90) return UTF8PROC_ERROR_INVALIDUTF8; } else if (uc == 0xf4) { if (*str > 0x8f) return UTF8PROC_ERROR_INVALIDUTF8; } *dst = ((uc & 7)<<18) | ((*str & 0x3f)<<12) | ((str[1] & 0x3f)<<6) | (str[2] & 0x3f); return 4; } UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t uc) { return (((utf8proc_uint32_t)uc)-0xd800 > 0x07ff) && ((utf8proc_uint32_t)uc < 0x110000); } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) { if (uc < 0x00) { return 0; } else if (uc < 0x80) { dst[0] = (utf8proc_uint8_t) uc; return 1; } else if (uc < 0x800) { dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6)); dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 2; // Note: we allow encoding 0xd800-0xdfff here, so as not to change // the API, however, these are actually invalid in UTF-8 } else if (uc < 0x10000) { dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12)); dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F)); dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 3; } else if (uc < 0x110000) { dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18)); dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F)); dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F)); dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 4; } else return 0; } /* internal "unsafe" version that does not check whether uc is in range */ static utf8proc_ssize_t unsafe_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) { if (uc < 0x00) { return 0; } else if (uc < 0x80) { dst[0] = (utf8proc_uint8_t)uc; return 1; } else if (uc < 0x800) { dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6)); dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 2; } else if (uc == 0xFFFF) { dst[0] = (utf8proc_uint8_t)0xFF; return 1; } else if (uc == 0xFFFE) { dst[0] = (utf8proc_uint8_t)0xFE; return 1; } else if (uc < 0x10000) { dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12)); dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F)); dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 3; } else if (uc < 0x110000) { dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18)); dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F)); dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F)); dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F)); return 4; } else return 0; } /* internal "unsafe" version that does not check whether uc is in range */ static const utf8proc_property_t *unsafe_get_property(utf8proc_int32_t uc) { /* ASSERT: uc >= 0 && uc < 0x110000 */ return utf8proc_properties + ( utf8proc_stage2table[ utf8proc_stage1table[uc >> 8] + (uc & 0xFF) ] ); } UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t uc) { return uc < 0 || uc >= 0x110000 ? utf8proc_properties : unsafe_get_property(uc); } /* return whether there is a grapheme break between boundclasses lbc and tbc (according to the definition of extended grapheme clusters) Rule numbering refers to TR29 Version 29 (Unicode 9.0.0): http://www.unicode.org/reports/tr29/tr29-29.html CAVEATS: Please note that evaluation of GB10 (grapheme breaks between emoji zwj sequences) and GB 12/13 (regional indicator code points) require knowledge of previous characters and are thus not handled by this function. This may result in an incorrect break before an E_Modifier class codepoint and an incorrectly missing break between two REGIONAL_INDICATOR class code points if such support does not exist in the caller. See the special support in grapheme_break_extended, for required bookkeeping by the caller. */ static utf8proc_bool grapheme_break_simple(int lbc, int tbc) { return (lbc == UTF8PROC_BOUNDCLASS_START) ? true : // GB1 (lbc == UTF8PROC_BOUNDCLASS_CR && // GB3 tbc == UTF8PROC_BOUNDCLASS_LF) ? false : // --- (lbc >= UTF8PROC_BOUNDCLASS_CR && lbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true : // GB4 (tbc >= UTF8PROC_BOUNDCLASS_CR && tbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true : // GB5 (lbc == UTF8PROC_BOUNDCLASS_L && // GB6 (tbc == UTF8PROC_BOUNDCLASS_L || // --- tbc == UTF8PROC_BOUNDCLASS_V || // --- tbc == UTF8PROC_BOUNDCLASS_LV || // --- tbc == UTF8PROC_BOUNDCLASS_LVT)) ? false : // --- ((lbc == UTF8PROC_BOUNDCLASS_LV || // GB7 lbc == UTF8PROC_BOUNDCLASS_V) && // --- (tbc == UTF8PROC_BOUNDCLASS_V || // --- tbc == UTF8PROC_BOUNDCLASS_T)) ? false : // --- ((lbc == UTF8PROC_BOUNDCLASS_LVT || // GB8 lbc == UTF8PROC_BOUNDCLASS_T) && // --- tbc == UTF8PROC_BOUNDCLASS_T) ? false : // --- (tbc == UTF8PROC_BOUNDCLASS_EXTEND || // GB9 tbc == UTF8PROC_BOUNDCLASS_ZWJ || // --- tbc == UTF8PROC_BOUNDCLASS_SPACINGMARK || // GB9a lbc == UTF8PROC_BOUNDCLASS_PREPEND) ? false : // GB9b ((lbc == UTF8PROC_BOUNDCLASS_E_BASE || // GB10 (requires additional handling below) lbc == UTF8PROC_BOUNDCLASS_E_BASE_GAZ) && // ---- tbc == UTF8PROC_BOUNDCLASS_E_MODIFIER) ? false : // ---- (lbc == UTF8PROC_BOUNDCLASS_ZWJ && // GB11 (tbc == UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ || // ---- tbc == UTF8PROC_BOUNDCLASS_E_BASE_GAZ)) ? false : // ---- (lbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR && // GB12/13 (requires additional handling below) tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) ? false : // ---- true; // GB999 } static utf8proc_bool grapheme_break_extended(int lbc, int tbc, utf8proc_int32_t *state) { int lbc_override = ((state && *state != UTF8PROC_BOUNDCLASS_START) ? *state : lbc); utf8proc_bool break_permitted = grapheme_break_simple(lbc_override, tbc); if (state) { // Special support for GB 12/13 made possible by GB999. After two RI // class codepoints we want to force a break. Do this by resetting the // second RI's bound class to UTF8PROC_BOUNDCLASS_OTHER, to force a break // after that character according to GB999 (unless of course such a break is // forbidden by a different rule such as GB9). if (*state == tbc && tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) *state = UTF8PROC_BOUNDCLASS_OTHER; // Special support for GB10. Fold any EXTEND codepoints into the previous // boundclass if we're dealing with an emoji base boundclass. else if ((*state == UTF8PROC_BOUNDCLASS_E_BASE || *state == UTF8PROC_BOUNDCLASS_E_BASE_GAZ) && tbc == UTF8PROC_BOUNDCLASS_EXTEND) *state = UTF8PROC_BOUNDCLASS_E_BASE; else *state = tbc; } return break_permitted; } UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful( utf8proc_int32_t c1, utf8proc_int32_t c2, utf8proc_int32_t *state) { return grapheme_break_extended(utf8proc_get_property(c1)->boundclass, utf8proc_get_property(c2)->boundclass, state); } UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break( utf8proc_int32_t c1, utf8proc_int32_t c2) { return utf8proc_grapheme_break_stateful(c1, c2, NULL); } static utf8proc_int32_t seqindex_decode_entry(const utf8proc_uint16_t **entry) { utf8proc_int32_t entry_cp = **entry; if ((entry_cp & 0xF800) == 0xD800) { *entry = *entry + 1; entry_cp = ((entry_cp & 0x03FF) << 10) | (**entry & 0x03FF); entry_cp += 0x10000; } return entry_cp; } static utf8proc_int32_t seqindex_decode_index(const utf8proc_uint32_t seqindex) { const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex]; return seqindex_decode_entry(&entry); } static utf8proc_ssize_t seqindex_write_char_decomposed(utf8proc_uint16_t seqindex, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) { utf8proc_ssize_t written = 0; const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex & 0x1FFF]; int len = seqindex >> 13; if (len >= 7) { len = *entry; entry++; } for (; len >= 0; entry++, len--) { utf8proc_int32_t entry_cp = seqindex_decode_entry(&entry); written += utf8proc_decompose_char(entry_cp, dst+written, (bufsize > written) ? (bufsize - written) : 0, options, last_boundclass); if (written < 0) return UTF8PROC_ERROR_OVERFLOW; } return written; } UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c) { utf8proc_int32_t cl = utf8proc_get_property(c)->lowercase_seqindex; return cl != UINT16_MAX ? seqindex_decode_index(cl) : c; } UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c) { utf8proc_int32_t cu = utf8proc_get_property(c)->uppercase_seqindex; return cu != UINT16_MAX ? seqindex_decode_index(cu) : c; } UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c) { utf8proc_int32_t cu = utf8proc_get_property(c)->titlecase_seqindex; return cu != UINT16_MAX ? seqindex_decode_index(cu) : c; } /* return a character width analogous to wcwidth (except portable and hopefully less buggy than most system wcwidth functions). */ UTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t c) { return utf8proc_get_property(c)->charwidth; } UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t c) { return utf8proc_get_property(c)->category; } UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t c) { static const char s[][3] = {"Cn","Lu","Ll","Lt","Lm","Lo","Mn","Mc","Me","Nd","Nl","No","Pc","Pd","Ps","Pe","Pi","Pf","Po","Sm","Sc","Sk","So","Zs","Zl","Zp","Cc","Cf","Cs","Co"}; return s[utf8proc_category(c)]; } #define utf8proc_decompose_lump(replacement_uc) \ return utf8proc_decompose_char((replacement_uc), dst, bufsize, \ options & ~UTF8PROC_LUMP, last_boundclass) UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) { const utf8proc_property_t *property; utf8proc_propval_t category; utf8proc_int32_t hangul_sindex; if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED; property = unsafe_get_property(uc); category = property->category; hangul_sindex = uc - UTF8PROC_HANGUL_SBASE; if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) { if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) { utf8proc_int32_t hangul_tindex; if (bufsize >= 1) { dst[0] = UTF8PROC_HANGUL_LBASE + hangul_sindex / UTF8PROC_HANGUL_NCOUNT; if (bufsize >= 2) dst[1] = UTF8PROC_HANGUL_VBASE + (hangul_sindex % UTF8PROC_HANGUL_NCOUNT) / UTF8PROC_HANGUL_TCOUNT; } hangul_tindex = hangul_sindex % UTF8PROC_HANGUL_TCOUNT; if (!hangul_tindex) return 2; if (bufsize >= 3) dst[2] = UTF8PROC_HANGUL_TBASE + hangul_tindex; return 3; } } if (options & UTF8PROC_REJECTNA) { if (!category) return UTF8PROC_ERROR_NOTASSIGNED; } if (options & UTF8PROC_IGNORE) { if (property->ignorable) return 0; } if (options & UTF8PROC_STRIPNA) { if (!category) return 0; } if (options & UTF8PROC_LUMP) { if (category == UTF8PROC_CATEGORY_ZS) utf8proc_decompose_lump(0x0020); if (uc == 0x2018 || uc == 0x2019 || uc == 0x02BC || uc == 0x02C8) utf8proc_decompose_lump(0x0027); if (category == UTF8PROC_CATEGORY_PD || uc == 0x2212) utf8proc_decompose_lump(0x002D); if (uc == 0x2044 || uc == 0x2215) utf8proc_decompose_lump(0x002F); if (uc == 0x2236) utf8proc_decompose_lump(0x003A); if (uc == 0x2039 || uc == 0x2329 || uc == 0x3008) utf8proc_decompose_lump(0x003C); if (uc == 0x203A || uc == 0x232A || uc == 0x3009) utf8proc_decompose_lump(0x003E); if (uc == 0x2216) utf8proc_decompose_lump(0x005C); if (uc == 0x02C4 || uc == 0x02C6 || uc == 0x2038 || uc == 0x2303) utf8proc_decompose_lump(0x005E); if (category == UTF8PROC_CATEGORY_PC || uc == 0x02CD) utf8proc_decompose_lump(0x005F); if (uc == 0x02CB) utf8proc_decompose_lump(0x0060); if (uc == 0x2223) utf8proc_decompose_lump(0x007C); if (uc == 0x223C) utf8proc_decompose_lump(0x007E); if ((options & UTF8PROC_NLF2LS) && (options & UTF8PROC_NLF2PS)) { if (category == UTF8PROC_CATEGORY_ZL || category == UTF8PROC_CATEGORY_ZP) utf8proc_decompose_lump(0x000A); } } if (options & UTF8PROC_STRIPMARK) { if (category == UTF8PROC_CATEGORY_MN || category == UTF8PROC_CATEGORY_MC || category == UTF8PROC_CATEGORY_ME) return 0; } if (options & UTF8PROC_CASEFOLD) { if (property->casefold_seqindex != UINT16_MAX) { return seqindex_write_char_decomposed(property->casefold_seqindex, dst, bufsize, options, last_boundclass); } } if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) { if (property->decomp_seqindex != UINT16_MAX && (!property->decomp_type || (options & UTF8PROC_COMPAT))) { return seqindex_write_char_decomposed(property->decomp_seqindex, dst, bufsize, options, last_boundclass); } } if (options & UTF8PROC_CHARBOUND) { utf8proc_bool boundary; int tbc = property->boundclass; boundary = grapheme_break_extended(*last_boundclass, tbc, last_boundclass); if (boundary) { if (bufsize >= 1) dst[0] = 0xFFFF; if (bufsize >= 2) dst[1] = uc; return 2; } } if (bufsize >= 1) *dst = uc; return 1; } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options ) { return utf8proc_decompose_custom(str, strlen, buffer, bufsize, options, NULL, NULL); } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options, utf8proc_custom_func custom_func, void *custom_data ) { /* strlen will be ignored, if UTF8PROC_NULLTERM is set in options */ utf8proc_ssize_t wpos = 0; if ((options & UTF8PROC_COMPOSE) && (options & UTF8PROC_DECOMPOSE)) return UTF8PROC_ERROR_INVALIDOPTS; if ((options & UTF8PROC_STRIPMARK) && !(options & UTF8PROC_COMPOSE) && !(options & UTF8PROC_DECOMPOSE)) return UTF8PROC_ERROR_INVALIDOPTS; { utf8proc_int32_t uc; utf8proc_ssize_t rpos = 0; utf8proc_ssize_t decomp_result; int boundclass = UTF8PROC_BOUNDCLASS_START; while (1) { if (options & UTF8PROC_NULLTERM) { rpos += utf8proc_iterate(str + rpos, -1, &uc); /* checking of return value is not necessary, as 'uc' is < 0 in case of error */ if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8; if (rpos < 0) return UTF8PROC_ERROR_OVERFLOW; if (uc == 0) break; } else { if (rpos >= strlen) break; rpos += utf8proc_iterate(str + rpos, strlen - rpos, &uc); if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8; } if (custom_func != NULL) { uc = custom_func(uc, custom_data); /* user-specified custom mapping */ } decomp_result = utf8proc_decompose_char( uc, buffer + wpos, (bufsize > wpos) ? (bufsize - wpos) : 0, options, &boundclass ); if (decomp_result < 0) return decomp_result; wpos += decomp_result; /* prohibiting integer overflows due to too long strings: */ if (wpos < 0 || wpos > (utf8proc_ssize_t)(SSIZE_MAX/sizeof(utf8proc_int32_t)/2)) return UTF8PROC_ERROR_OVERFLOW; } } if ((options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) && bufsize >= wpos) { utf8proc_ssize_t pos = 0; while (pos < wpos-1) { utf8proc_int32_t uc1, uc2; const utf8proc_property_t *property1, *property2; uc1 = buffer[pos]; uc2 = buffer[pos+1]; property1 = unsafe_get_property(uc1); property2 = unsafe_get_property(uc2); if (property1->combining_class > property2->combining_class && property2->combining_class > 0) { buffer[pos] = uc2; buffer[pos+1] = uc1; if (pos > 0) pos--; else pos++; } else { pos++; } } } return wpos; } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) { /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored */ if (options & (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS | UTF8PROC_STRIPCC)) { utf8proc_ssize_t rpos; utf8proc_ssize_t wpos = 0; utf8proc_int32_t uc; for (rpos = 0; rpos < length; rpos++) { uc = buffer[rpos]; if (uc == 0x000D && rpos < length-1 && buffer[rpos+1] == 0x000A) rpos++; if (uc == 0x000A || uc == 0x000D || uc == 0x0085 || ((options & UTF8PROC_STRIPCC) && (uc == 0x000B || uc == 0x000C))) { if (options & UTF8PROC_NLF2LS) { if (options & UTF8PROC_NLF2PS) { buffer[wpos++] = 0x000A; } else { buffer[wpos++] = 0x2028; } } else { if (options & UTF8PROC_NLF2PS) { buffer[wpos++] = 0x2029; } else { buffer[wpos++] = 0x0020; } } } else if ((options & UTF8PROC_STRIPCC) && (uc < 0x0020 || (uc >= 0x007F && uc < 0x00A0))) { if (uc == 0x0009) buffer[wpos++] = 0x0020; } else { buffer[wpos++] = uc; } } length = wpos; } if (options & UTF8PROC_COMPOSE) { utf8proc_int32_t *starter = NULL; utf8proc_int32_t current_char; const utf8proc_property_t *starter_property = NULL, *current_property; utf8proc_propval_t max_combining_class = -1; utf8proc_ssize_t rpos; utf8proc_ssize_t wpos = 0; utf8proc_int32_t composition; for (rpos = 0; rpos < length; rpos++) { current_char = buffer[rpos]; current_property = unsafe_get_property(current_char); if (starter && current_property->combining_class > max_combining_class) { /* combination perhaps possible */ utf8proc_int32_t hangul_lindex; utf8proc_int32_t hangul_sindex; hangul_lindex = *starter - UTF8PROC_HANGUL_LBASE; if (hangul_lindex >= 0 && hangul_lindex < UTF8PROC_HANGUL_LCOUNT) { utf8proc_int32_t hangul_vindex; hangul_vindex = current_char - UTF8PROC_HANGUL_VBASE; if (hangul_vindex >= 0 && hangul_vindex < UTF8PROC_HANGUL_VCOUNT) { *starter = UTF8PROC_HANGUL_SBASE + (hangul_lindex * UTF8PROC_HANGUL_VCOUNT + hangul_vindex) * UTF8PROC_HANGUL_TCOUNT; starter_property = NULL; continue; } } hangul_sindex = *starter - UTF8PROC_HANGUL_SBASE; if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT && (hangul_sindex % UTF8PROC_HANGUL_TCOUNT) == 0) { utf8proc_int32_t hangul_tindex; hangul_tindex = current_char - UTF8PROC_HANGUL_TBASE; if (hangul_tindex >= 0 && hangul_tindex < UTF8PROC_HANGUL_TCOUNT) { *starter += hangul_tindex; starter_property = NULL; continue; } } if (!starter_property) { starter_property = unsafe_get_property(*starter); } if (starter_property->comb_index < 0x8000 && current_property->comb_index != UINT16_MAX && current_property->comb_index >= 0x8000) { int sidx = starter_property->comb_index; int idx = current_property->comb_index & 0x3FFF; if (idx >= utf8proc_combinations[sidx] && idx <= utf8proc_combinations[sidx + 1] ) { idx += sidx + 2 - utf8proc_combinations[sidx]; if (current_property->comb_index & 0x4000) { composition = (utf8proc_combinations[idx] << 16) | utf8proc_combinations[idx+1]; } else composition = utf8proc_combinations[idx]; if (composition > 0 && (!(options & UTF8PROC_STABLE) || !(unsafe_get_property(composition)->comp_exclusion))) { *starter = composition; starter_property = NULL; continue; } } } } buffer[wpos] = current_char; if (current_property->combining_class) { if (current_property->combining_class > max_combining_class) { max_combining_class = current_property->combining_class; } } else { starter = buffer + wpos; starter_property = NULL; max_combining_class = -1; } wpos++; } length = wpos; } return length; } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) { /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored ASSERT: 'buffer' has one spare byte of free space at the end! */ length = utf8proc_normalize_utf32(buffer, length, options); if (length < 0) return length; { utf8proc_ssize_t rpos, wpos = 0; utf8proc_int32_t uc; if (options & UTF8PROC_CHARBOUND) { for (rpos = 0; rpos < length; rpos++) { uc = buffer[rpos]; wpos += unsafe_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos); } } else { for (rpos = 0; rpos < length; rpos++) { uc = buffer[rpos]; wpos += utf8proc_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos); } } ((utf8proc_uint8_t *)buffer)[wpos] = 0; return wpos; } } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options ) { return utf8proc_map_custom(str, strlen, dstptr, options, NULL, NULL); } UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options, utf8proc_custom_func custom_func, void *custom_data ) { utf8proc_int32_t *buffer; utf8proc_ssize_t result; *dstptr = NULL; result = utf8proc_decompose_custom(str, strlen, NULL, 0, options, custom_func, custom_data); if (result < 0) return result; buffer = (utf8proc_int32_t *) malloc(result * sizeof(utf8proc_int32_t) + 1); if (!buffer) return UTF8PROC_ERROR_NOMEM; result = utf8proc_decompose_custom(str, strlen, buffer, result, options, custom_func, custom_data); if (result < 0) { free(buffer); return result; } result = utf8proc_reencode(buffer, result, options); if (result < 0) { free(buffer); return result; } { utf8proc_int32_t *newptr; newptr = (utf8proc_int32_t *) realloc(buffer, (size_t)result+1); if (newptr) buffer = newptr; } *dstptr = (utf8proc_uint8_t *)buffer; return result; } UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str) { utf8proc_uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE); return retval; } UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) { utf8proc_uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE); return retval; } UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) { utf8proc_uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT); return retval; } UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) { utf8proc_uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT); return retval; } UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC_Casefold(const utf8proc_uint8_t *str) { utf8proc_uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD | UTF8PROC_IGNORE); return retval; }tig-2.4.1/compat/utf8proc.h000066400000000000000000000724271332650737300155340ustar00rootroot00000000000000/* * Copyright (c) 2015 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors. * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS 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. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /** * @mainpage * * utf8proc is a free/open-source (MIT/expat licensed) C library * providing Unicode normalization, case-folding, and other operations * for strings in the UTF-8 encoding, supporting Unicode version * 9.0.0. See the utf8proc home page (http://julialang.org/utf8proc/) * for downloads and other information, or the source code on github * (https://github.com/JuliaLang/utf8proc). * * For the utf8proc API documentation, see: @ref utf8proc.h * * The features of utf8proc include: * * - Transformation of strings (@ref utf8proc_map) to: * - decompose (@ref UTF8PROC_DECOMPOSE) or compose (@ref UTF8PROC_COMPOSE) Unicode combining characters (http://en.wikipedia.org/wiki/Combining_character) * - canonicalize Unicode compatibility characters (@ref UTF8PROC_COMPAT) * - strip "ignorable" (@ref UTF8PROC_IGNORE) characters, control characters (@ref UTF8PROC_STRIPCC), or combining characters such as accents (@ref UTF8PROC_STRIPMARK) * - case-folding (@ref UTF8PROC_CASEFOLD) * - Unicode normalization: @ref utf8proc_NFD, @ref utf8proc_NFC, @ref utf8proc_NFKD, @ref utf8proc_NFKC * - Detecting grapheme boundaries (@ref utf8proc_grapheme_break and @ref UTF8PROC_CHARBOUND) * - Character-width computation: @ref utf8proc_charwidth * - Classification of characters by Unicode category: @ref utf8proc_category and @ref utf8proc_category_string * - Encode (@ref utf8proc_encode_char) and decode (@ref utf8proc_iterate) Unicode codepoints to/from UTF-8. */ /** @file */ #ifndef UTF8PROC_H #define UTF8PROC_H /** @name API version * * The utf8proc API version MAJOR.MINOR.PATCH, following * semantic-versioning rules (http://semver.org) based on API * compatibility. * * This is also returned at runtime by @ref utf8proc_version; however, the * runtime version may append a string like "-dev" to the version number * for prerelease versions. * * @note The shared-library version number in the Makefile * (and CMakeLists.txt, and MANIFEST) may be different, * being based on ABI compatibility rather than API compatibility. */ /** @{ */ /** The MAJOR version number (increased when backwards API compatibility is broken). */ #define UTF8PROC_VERSION_MAJOR 2 /** The MINOR version number (increased when new functionality is added in a backwards-compatible manner). */ #define UTF8PROC_VERSION_MINOR 2 /** The PATCH version (increased for fixes that do not change the API). */ #define UTF8PROC_VERSION_PATCH 0 /** @} */ #include #if defined(_MSC_VER) && _MSC_VER < 1800 // MSVC prior to 2013 lacked stdbool.h and inttypes.h typedef signed char utf8proc_int8_t; typedef unsigned char utf8proc_uint8_t; typedef short utf8proc_int16_t; typedef unsigned short utf8proc_uint16_t; typedef int utf8proc_int32_t; typedef unsigned int utf8proc_uint32_t; # ifdef _WIN64 typedef __int64 utf8proc_ssize_t; typedef unsigned __int64 utf8proc_size_t; # else typedef int utf8proc_ssize_t; typedef unsigned int utf8proc_size_t; # endif # ifndef __cplusplus // emulate C99 bool typedef unsigned char utf8proc_bool; # ifndef __bool_true_false_are_defined # define false 0 # define true 1 # define __bool_true_false_are_defined 1 # endif # else typedef bool utf8proc_bool; # endif #else # include # include # include typedef int8_t utf8proc_int8_t; typedef uint8_t utf8proc_uint8_t; typedef int16_t utf8proc_int16_t; typedef uint16_t utf8proc_uint16_t; typedef int32_t utf8proc_int32_t; typedef uint32_t utf8proc_uint32_t; typedef size_t utf8proc_size_t; typedef ptrdiff_t utf8proc_ssize_t; typedef bool utf8proc_bool; #endif #include #ifdef UTF8PROC_STATIC # define UTF8PROC_DLLEXPORT #else # ifdef _WIN32 # ifdef UTF8PROC_EXPORTS # define UTF8PROC_DLLEXPORT __declspec(dllexport) # else # define UTF8PROC_DLLEXPORT __declspec(dllimport) # endif # elif __GNUC__ >= 4 # define UTF8PROC_DLLEXPORT __attribute__ ((visibility("default"))) # else # define UTF8PROC_DLLEXPORT # endif #endif #ifdef __cplusplus extern "C" { #endif #ifndef SSIZE_MAX #define SSIZE_MAX ((size_t)SIZE_MAX/2) #endif #ifndef UINT16_MAX # define UINT16_MAX 65535U #endif /** * Option flags used by several functions in the library. */ typedef enum { /** The given UTF-8 input is NULL terminated. */ UTF8PROC_NULLTERM = (1<<0), /** Unicode Versioning Stability has to be respected. */ UTF8PROC_STABLE = (1<<1), /** Compatibility decomposition (i.e. formatting information is lost). */ UTF8PROC_COMPAT = (1<<2), /** Return a result with decomposed characters. */ UTF8PROC_COMPOSE = (1<<3), /** Return a result with decomposed characters. */ UTF8PROC_DECOMPOSE = (1<<4), /** Strip "default ignorable characters" such as SOFT-HYPHEN or ZERO-WIDTH-SPACE. */ UTF8PROC_IGNORE = (1<<5), /** Return an error, if the input contains unassigned codepoints. */ UTF8PROC_REJECTNA = (1<<6), /** * Indicating that NLF-sequences (LF, CRLF, CR, NEL) are representing a * line break, and should be converted to the codepoint for line * separation (LS). */ UTF8PROC_NLF2LS = (1<<7), /** * Indicating that NLF-sequences are representing a paragraph break, and * should be converted to the codepoint for paragraph separation * (PS). */ UTF8PROC_NLF2PS = (1<<8), /** Indicating that the meaning of NLF-sequences is unknown. */ UTF8PROC_NLF2LF = (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS), /** Strips and/or convers control characters. * * NLF-sequences are transformed into space, except if one of the * NLF2LS/PS/LF options is given. HorizontalTab (HT) and FormFeed (FF) * are treated as a NLF-sequence in this case. All other control * characters are simply removed. */ UTF8PROC_STRIPCC = (1<<9), /** * Performs unicode case folding, to be able to do a case-insensitive * string comparison. */ UTF8PROC_CASEFOLD = (1<<10), /** * Inserts 0xFF bytes at the beginning of each sequence which is * representing a single grapheme cluster (see UAX#29). */ UTF8PROC_CHARBOUND = (1<<11), /** Lumps certain characters together. * * E.g. HYPHEN U+2010 and MINUS U+2212 to ASCII "-". See lump.md for details. * * If NLF2LF is set, this includes a transformation of paragraph and * line separators to ASCII line-feed (LF). */ UTF8PROC_LUMP = (1<<12), /** Strips all character markings. * * This includes non-spacing, spacing and enclosing (i.e. accents). * @note This option works only with @ref UTF8PROC_COMPOSE or * @ref UTF8PROC_DECOMPOSE */ UTF8PROC_STRIPMARK = (1<<13), /** * Strip unassigned codepoints. */ UTF8PROC_STRIPNA = (1<<14), } utf8proc_option_t; /** @name Error codes * Error codes being returned by almost all functions. */ /** @{ */ /** Memory could not be allocated. */ #define UTF8PROC_ERROR_NOMEM -1 /** The given string is too long to be processed. */ #define UTF8PROC_ERROR_OVERFLOW -2 /** The given string is not a legal UTF-8 string. */ #define UTF8PROC_ERROR_INVALIDUTF8 -3 /** The @ref UTF8PROC_REJECTNA flag was set and an unassigned codepoint was found. */ #define UTF8PROC_ERROR_NOTASSIGNED -4 /** Invalid options have been used. */ #define UTF8PROC_ERROR_INVALIDOPTS -5 /** @} */ /* @name Types */ /** Holds the value of a property. */ typedef utf8proc_int16_t utf8proc_propval_t; /** Struct containing information about a codepoint. */ typedef struct utf8proc_property_struct { /** * Unicode category. * @see utf8proc_category_t. */ utf8proc_propval_t category; utf8proc_propval_t combining_class; /** * Bidirectional class. * @see utf8proc_bidi_class_t. */ utf8proc_propval_t bidi_class; /** * @anchor Decomposition type. * @see utf8proc_decomp_type_t. */ utf8proc_propval_t decomp_type; utf8proc_uint16_t decomp_seqindex; utf8proc_uint16_t casefold_seqindex; utf8proc_uint16_t uppercase_seqindex; utf8proc_uint16_t lowercase_seqindex; utf8proc_uint16_t titlecase_seqindex; utf8proc_uint16_t comb_index; unsigned bidi_mirrored:1; unsigned comp_exclusion:1; /** * Can this codepoint be ignored? * * Used by @ref utf8proc_decompose_char when @ref UTF8PROC_IGNORE is * passed as an option. */ unsigned ignorable:1; unsigned control_boundary:1; /** The width of the codepoint. */ unsigned charwidth:2; unsigned pad:2; /** * Boundclass. * @see utf8proc_boundclass_t. */ unsigned boundclass:8; } utf8proc_property_t; /** Unicode categories. */ typedef enum { UTF8PROC_CATEGORY_CN = 0, /**< Other, not assigned */ UTF8PROC_CATEGORY_LU = 1, /**< Letter, uppercase */ UTF8PROC_CATEGORY_LL = 2, /**< Letter, lowercase */ UTF8PROC_CATEGORY_LT = 3, /**< Letter, titlecase */ UTF8PROC_CATEGORY_LM = 4, /**< Letter, modifier */ UTF8PROC_CATEGORY_LO = 5, /**< Letter, other */ UTF8PROC_CATEGORY_MN = 6, /**< Mark, nonspacing */ UTF8PROC_CATEGORY_MC = 7, /**< Mark, spacing combining */ UTF8PROC_CATEGORY_ME = 8, /**< Mark, enclosing */ UTF8PROC_CATEGORY_ND = 9, /**< Number, decimal digit */ UTF8PROC_CATEGORY_NL = 10, /**< Number, letter */ UTF8PROC_CATEGORY_NO = 11, /**< Number, other */ UTF8PROC_CATEGORY_PC = 12, /**< Punctuation, connector */ UTF8PROC_CATEGORY_PD = 13, /**< Punctuation, dash */ UTF8PROC_CATEGORY_PS = 14, /**< Punctuation, open */ UTF8PROC_CATEGORY_PE = 15, /**< Punctuation, close */ UTF8PROC_CATEGORY_PI = 16, /**< Punctuation, initial quote */ UTF8PROC_CATEGORY_PF = 17, /**< Punctuation, final quote */ UTF8PROC_CATEGORY_PO = 18, /**< Punctuation, other */ UTF8PROC_CATEGORY_SM = 19, /**< Symbol, math */ UTF8PROC_CATEGORY_SC = 20, /**< Symbol, currency */ UTF8PROC_CATEGORY_SK = 21, /**< Symbol, modifier */ UTF8PROC_CATEGORY_SO = 22, /**< Symbol, other */ UTF8PROC_CATEGORY_ZS = 23, /**< Separator, space */ UTF8PROC_CATEGORY_ZL = 24, /**< Separator, line */ UTF8PROC_CATEGORY_ZP = 25, /**< Separator, paragraph */ UTF8PROC_CATEGORY_CC = 26, /**< Other, control */ UTF8PROC_CATEGORY_CF = 27, /**< Other, format */ UTF8PROC_CATEGORY_CS = 28, /**< Other, surrogate */ UTF8PROC_CATEGORY_CO = 29, /**< Other, private use */ } utf8proc_category_t; /** Bidirectional character classes. */ typedef enum { UTF8PROC_BIDI_CLASS_L = 1, /**< Left-to-Right */ UTF8PROC_BIDI_CLASS_LRE = 2, /**< Left-to-Right Embedding */ UTF8PROC_BIDI_CLASS_LRO = 3, /**< Left-to-Right Override */ UTF8PROC_BIDI_CLASS_R = 4, /**< Right-to-Left */ UTF8PROC_BIDI_CLASS_AL = 5, /**< Right-to-Left Arabic */ UTF8PROC_BIDI_CLASS_RLE = 6, /**< Right-to-Left Embedding */ UTF8PROC_BIDI_CLASS_RLO = 7, /**< Right-to-Left Override */ UTF8PROC_BIDI_CLASS_PDF = 8, /**< Pop Directional Format */ UTF8PROC_BIDI_CLASS_EN = 9, /**< European Number */ UTF8PROC_BIDI_CLASS_ES = 10, /**< European Separator */ UTF8PROC_BIDI_CLASS_ET = 11, /**< European Number Terminator */ UTF8PROC_BIDI_CLASS_AN = 12, /**< Arabic Number */ UTF8PROC_BIDI_CLASS_CS = 13, /**< Common Number Separator */ UTF8PROC_BIDI_CLASS_NSM = 14, /**< Nonspacing Mark */ UTF8PROC_BIDI_CLASS_BN = 15, /**< Boundary Neutral */ UTF8PROC_BIDI_CLASS_B = 16, /**< Paragraph Separator */ UTF8PROC_BIDI_CLASS_S = 17, /**< Segment Separator */ UTF8PROC_BIDI_CLASS_WS = 18, /**< Whitespace */ UTF8PROC_BIDI_CLASS_ON = 19, /**< Other Neutrals */ UTF8PROC_BIDI_CLASS_LRI = 20, /**< Left-to-Right Isolate */ UTF8PROC_BIDI_CLASS_RLI = 21, /**< Right-to-Left Isolate */ UTF8PROC_BIDI_CLASS_FSI = 22, /**< First Strong Isolate */ UTF8PROC_BIDI_CLASS_PDI = 23, /**< Pop Directional Isolate */ } utf8proc_bidi_class_t; /** Decomposition type. */ typedef enum { UTF8PROC_DECOMP_TYPE_FONT = 1, /**< Font */ UTF8PROC_DECOMP_TYPE_NOBREAK = 2, /**< Nobreak */ UTF8PROC_DECOMP_TYPE_INITIAL = 3, /**< Initial */ UTF8PROC_DECOMP_TYPE_MEDIAL = 4, /**< Medial */ UTF8PROC_DECOMP_TYPE_FINAL = 5, /**< Final */ UTF8PROC_DECOMP_TYPE_ISOLATED = 6, /**< Isolated */ UTF8PROC_DECOMP_TYPE_CIRCLE = 7, /**< Circle */ UTF8PROC_DECOMP_TYPE_SUPER = 8, /**< Super */ UTF8PROC_DECOMP_TYPE_SUB = 9, /**< Sub */ UTF8PROC_DECOMP_TYPE_VERTICAL = 10, /**< Vertical */ UTF8PROC_DECOMP_TYPE_WIDE = 11, /**< Wide */ UTF8PROC_DECOMP_TYPE_NARROW = 12, /**< Narrow */ UTF8PROC_DECOMP_TYPE_SMALL = 13, /**< Small */ UTF8PROC_DECOMP_TYPE_SQUARE = 14, /**< Square */ UTF8PROC_DECOMP_TYPE_FRACTION = 15, /**< Fraction */ UTF8PROC_DECOMP_TYPE_COMPAT = 16, /**< Compat */ } utf8proc_decomp_type_t; /** Boundclass property. (TR29) */ typedef enum { UTF8PROC_BOUNDCLASS_START = 0, /**< Start */ UTF8PROC_BOUNDCLASS_OTHER = 1, /**< Other */ UTF8PROC_BOUNDCLASS_CR = 2, /**< Cr */ UTF8PROC_BOUNDCLASS_LF = 3, /**< Lf */ UTF8PROC_BOUNDCLASS_CONTROL = 4, /**< Control */ UTF8PROC_BOUNDCLASS_EXTEND = 5, /**< Extend */ UTF8PROC_BOUNDCLASS_L = 6, /**< L */ UTF8PROC_BOUNDCLASS_V = 7, /**< V */ UTF8PROC_BOUNDCLASS_T = 8, /**< T */ UTF8PROC_BOUNDCLASS_LV = 9, /**< Lv */ UTF8PROC_BOUNDCLASS_LVT = 10, /**< Lvt */ UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR = 11, /**< Regional indicator */ UTF8PROC_BOUNDCLASS_SPACINGMARK = 12, /**< Spacingmark */ UTF8PROC_BOUNDCLASS_PREPEND = 13, /**< Prepend */ UTF8PROC_BOUNDCLASS_ZWJ = 14, /**< Zero Width Joiner */ UTF8PROC_BOUNDCLASS_E_BASE = 15, /**< Emoji Base */ UTF8PROC_BOUNDCLASS_E_MODIFIER = 16, /**< Emoji Modifier */ UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ = 17, /**< Glue_After_ZWJ */ UTF8PROC_BOUNDCLASS_E_BASE_GAZ = 18, /**< E_BASE + GLUE_AFTER_ZJW */ } utf8proc_boundclass_t; /** * Function pointer type passed to @ref utf8proc_map_custom and * @ref utf8proc_decompose_custom, which is used to specify a user-defined * mapping of codepoints to be applied in conjunction with other mappings. */ typedef utf8proc_int32_t (*utf8proc_custom_func)(utf8proc_int32_t codepoint, void *data); /** * Array containing the byte lengths of a UTF-8 encoded codepoint based * on the first byte. */ UTF8PROC_DLLEXPORT extern const utf8proc_int8_t utf8proc_utf8class[256]; /** * Returns the utf8proc API version as a string MAJOR.MINOR.PATCH * (http://semver.org format), possibly with a "-dev" suffix for * development versions. */ UTF8PROC_DLLEXPORT const char *utf8proc_version(void); /** * Returns an informative error string for the given utf8proc error code * (e.g. the error codes returned by @ref utf8proc_map). */ UTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode); /** * Reads a single codepoint from the UTF-8 sequence being pointed to by `str`. * The maximum number of bytes read is `strlen`, unless `strlen` is * negative (in which case up to 4 bytes are read). * * If a valid codepoint could be read, it is stored in the variable * pointed to by `codepoint_ref`, otherwise that variable will be set to -1. * In case of success, the number of bytes read is returned; otherwise, a * negative error code is returned. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate(const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *codepoint_ref); /** * Check if a codepoint is valid (regardless of whether it has been * assigned a value by the current Unicode standard). * * @return 1 if the given `codepoint` is valid and otherwise return 0. */ UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t codepoint); /** * Encodes the codepoint as an UTF-8 string in the byte array pointed * to by `dst`. This array must be at least 4 bytes long. * * In case of success the number of bytes written is returned, and * otherwise 0 is returned. * * This function does not check whether `codepoint` is valid Unicode. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t codepoint, utf8proc_uint8_t *dst); /** * Look up the properties for a given codepoint. * * @param codepoint The Unicode codepoint. * * @returns * A pointer to a (constant) struct containing information about * the codepoint. * @par * If the codepoint is unassigned or invalid, a pointer to a special struct is * returned in which `category` is 0 (@ref UTF8PROC_CATEGORY_CN). */ UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t codepoint); /** Decompose a codepoint into an array of codepoints. * * @param codepoint the codepoint. * @param dst the destination buffer. * @param bufsize the size of the destination buffer. * @param options one or more of the following flags: * - @ref UTF8PROC_REJECTNA - return an error `codepoint` is unassigned * - @ref UTF8PROC_IGNORE - strip "default ignorable" codepoints * - @ref UTF8PROC_CASEFOLD - apply Unicode casefolding * - @ref UTF8PROC_COMPAT - replace certain codepoints with their * compatibility decomposition * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster * - @ref UTF8PROC_LUMP - lump certain different codepoints together * - @ref UTF8PROC_STRIPMARK - remove all character marks * - @ref UTF8PROC_STRIPNA - remove unassigned codepoints * @param last_boundclass * Pointer to an integer variable containing * the previous codepoint's boundary class if the @ref UTF8PROC_CHARBOUND * option is used. Otherwise, this parameter is ignored. * * @return * In case of success, the number of codepoints written is returned; in case * of an error, a negative error code is returned (@ref utf8proc_errmsg). * @par * If the number of written codepoints would be bigger than `bufsize`, the * required buffer size is returned, while the buffer will be overwritten with * undefined data. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char( utf8proc_int32_t codepoint, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass ); /** * The same as @ref utf8proc_decompose_char, but acts on a whole UTF-8 * string and orders the decomposed sequences correctly. * * If the @ref UTF8PROC_NULLTERM flag in `options` is set, processing * will be stopped, when a NULL byte is encounted, otherwise `strlen` * bytes are processed. The result (in the form of 32-bit unicode * codepoints) is written into the buffer being pointed to by * `buffer` (which must contain at least `bufsize` entries). In case of * success, the number of codepoints written is returned; in case of an * error, a negative error code is returned (@ref utf8proc_errmsg). * See @ref utf8proc_decompose_custom to supply additional transformations. * * If the number of written codepoints would be bigger than `bufsize`, the * required buffer size is returned, while the buffer will be overwritten with * undefined data. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options ); /** * The same as @ref utf8proc_decompose, but also takes a `custom_func` mapping function * that is called on each codepoint in `str` before any other transformations * (along with a `custom_data` pointer that is passed through to `custom_func`). * The `custom_func` argument is ignored if it is `NULL`. See also @ref utf8proc_map_custom. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options, utf8proc_custom_func custom_func, void *custom_data ); /** * Normalizes the sequence of `length` codepoints pointed to by `buffer` * in-place (i.e., the result is also stored in `buffer`). * * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode. * @param length the length (in codepoints) of the buffer. * @param options a bitwise or (`|`) of one or more of the following flags: * - @ref UTF8PROC_NLF2LS - convert LF, CRLF, CR and NEL into LS * - @ref UTF8PROC_NLF2PS - convert LF, CRLF, CR and NEL into PS * - @ref UTF8PROC_NLF2LF - convert LF, CRLF, CR and NEL into LF * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite * codepoints * - @ref UTF8PROC_STABLE - prohibit combining characters that would violate * the unicode versioning stability * * @return * In case of success, the length (in codepoints) of the normalized UTF-32 string is * returned; otherwise, a negative error code is returned (@ref utf8proc_errmsg). * * @warning The entries of the array pointed to by `str` have to be in the * range `0x0000` to `0x10FFFF`. Otherwise, the program might crash! */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options); /** * Reencodes the sequence of `length` codepoints pointed to by `buffer` * UTF-8 data in-place (i.e., the result is also stored in `buffer`). * Can optionally normalize the UTF-32 sequence prior to UTF-8 conversion. * * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode. * @param length the length (in codepoints) of the buffer. * @param options a bitwise or (`|`) of one or more of the following flags: * - @ref UTF8PROC_NLF2LS - convert LF, CRLF, CR and NEL into LS * - @ref UTF8PROC_NLF2PS - convert LF, CRLF, CR and NEL into PS * - @ref UTF8PROC_NLF2LF - convert LF, CRLF, CR and NEL into LF * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite * codepoints * - @ref UTF8PROC_STABLE - prohibit combining characters that would violate * the unicode versioning stability * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster * * @return * In case of success, the length (in bytes) of the resulting nul-terminated * UTF-8 string is returned; otherwise, a negative error code is returned * (@ref utf8proc_errmsg). * * @warning The amount of free space pointed to by `buffer` must * exceed the amount of the input data by one byte, and the * entries of the array pointed to by `str` have to be in the * range `0x0000` to `0x10FFFF`. Otherwise, the program might crash! */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options); /** * Given a pair of consecutive codepoints, return whether a grapheme break is * permitted between them (as defined by the extended grapheme clusters in UAX#29). * * @param state Beginning with Version 29 (Unicode 9.0.0), this algorithm requires * state to break graphemes. This state can be passed in as a pointer * in the `state` argument and should initially be set to 0. If the * state is not passed in (i.e. a null pointer is passed), UAX#29 rules * GB10/12/13 which require this state will not be applied, essentially * matching the rules in Unicode 8.0.0. * * @warning If the state parameter is used, `utf8proc_grapheme_break_stateful` must * be called IN ORDER on ALL potential breaks in a string. */ UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful( utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2, utf8proc_int32_t *state); /** * Same as @ref utf8proc_grapheme_break_stateful, except without support for the * Unicode 9 additions to the algorithm. Supported for legacy reasons. */ UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break( utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2); /** * Given a codepoint `c`, return the codepoint of the corresponding * lower-case character, if any; otherwise (if there is no lower-case * variant, or if `c` is not a valid codepoint) return `c`. */ UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c); /** * Given a codepoint `c`, return the codepoint of the corresponding * upper-case character, if any; otherwise (if there is no upper-case * variant, or if `c` is not a valid codepoint) return `c`. */ UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c); /** * Given a codepoint `c`, return the codepoint of the corresponding * title-case character, if any; otherwise (if there is no title-case * variant, or if `c` is not a valid codepoint) return `c`. */ UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c); /** * Given a codepoint, return a character width analogous to `wcwidth(codepoint)`, * except that a width of 0 is returned for non-printable codepoints * instead of -1 as in `wcwidth`. * * @note * If you want to check for particular types of non-printable characters, * (analogous to `isprint` or `iscntrl`), use @ref utf8proc_category. */ UTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t codepoint); /** * Return the Unicode category for the codepoint (one of the * @ref utf8proc_category_t constants.) */ UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t codepoint); /** * Return the two-letter (nul-terminated) Unicode category string for * the codepoint (e.g. `"Lu"` or `"Co"`). */ UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t codepoint); /** * Maps the given UTF-8 string pointed to by `str` to a new UTF-8 * string, allocated dynamically by `malloc` and returned via `dstptr`. * * If the @ref UTF8PROC_NULLTERM flag in the `options` field is set, * the length is determined by a NULL terminator, otherwise the * parameter `strlen` is evaluated to determine the string length, but * in any case the result will be NULL terminated (though it might * contain NULL characters with the string if `str` contained NULL * characters). Other flags in the `options` field are passed to the * functions defined above, and regarded as described. See also * @ref utfproc_map_custom to supply a custom codepoint transformation. * * In case of success the length of the new string is returned, * otherwise a negative error code is returned. * * @note The memory of the new UTF-8 string will have been allocated * with `malloc`, and should therefore be deallocated with `free`. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options ); /** * Like @ref utf8proc_map, but also takes a `custom_func` mapping function * that is called on each codepoint in `str` before any other transformations * (along with a `custom_data` pointer that is passed through to `custom_func`). * The `custom_func` argument is ignored if it is `NULL`. */ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom( const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options, utf8proc_custom_func custom_func, void *custom_data ); /** @name Unicode normalization * * Returns a pointer to newly allocated memory of a NFD, NFC, NFKD, NFKC or * NFKC_Casefold normalized version of the null-terminated string `str`. These * are shortcuts to calling @ref utf8proc_map with @ref UTF8PROC_NULLTERM * combined with @ref UTF8PROC_STABLE and flags indicating the normalization. */ /** @{ */ /** NFD normalization (@ref UTF8PROC_DECOMPOSE). */ UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str); /** NFC normalization (@ref UTF8PROC_COMPOSE). */ UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str); /** NFKD normalization (@ref UTF8PROC_DECOMPOSE and @ref UTF8PROC_COMPAT). */ UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str); /** NFKC normalization (@ref UTF8PROC_COMPOSE and @ref UTF8PROC_COMPAT). */ UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str); /** * NFKC_Casefold normalization (@ref UTF8PROC_COMPOSE and @ref UTF8PROC_COMPAT * and @ref UTF8PROC_CASEFOLD and @ref UTF8PROC_IGNORE). **/ UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC_Casefold(const utf8proc_uint8_t *str); /** @} */ #ifdef __cplusplus } #endif #endiftig-2.4.1/compat/utf8proc.license.md000066400000000000000000000120101332650737300173040ustar00rootroot00000000000000## utf8proc license ## **utf8proc** is a software package originally developed by Jan Behrens and the rest of the Public Software Group, who deserve nearly all of the credit for this library, that is now maintained by the Julia-language developers. Like the original utf8proc, whose copyright and license statements are reproduced below, all new work on the utf8proc library is licensed under the [MIT "expat" license](http://opensource.org/licenses/MIT): *Copyright © 2014-2015 by Steven G. Johnson, Jiahao Chen, Tony Kelman, Jonas Fonseca, and other contributors listed in the git history.* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS 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. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## Original utf8proc license ## *Copyright (c) 2009, 2013 Public Software Group e. V., Berlin, Germany* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS 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. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## Unicode data license ## This software distribution contains derived data from a modified version of the Unicode data files. The following license applies to that data: **COPYRIGHT AND PERMISSION NOTICE** *Copyright (c) 1991-2007 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://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. 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. 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.tig-2.4.1/compat/utf8proc_data.c000066400000000000000000061534131332650737300165210ustar00rootroot00000000000000static const utf8proc_uint16_t utf8proc_sequences[] = { 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 32, 32, 776, 32, 772, 50, 51, 32, 769, 956, 32, 807, 49, 49, 8260, 52, 49, 8260, 50, 51, 8260, 52, 65, 768, 224, 65, 769, 225, 65, 770, 226, 65, 771, 227, 65, 776, 228, 65, 778, 229, 230, 67, 807, 231, 69, 768, 232, 69, 769, 233, 69, 770, 234, 69, 776, 235, 73, 768, 236, 73, 769, 237, 73, 770, 238, 73, 776, 239, 240, 78, 771, 241, 79, 768, 242, 79, 769, 243, 79, 770, 244, 79, 771, 245, 79, 776, 246, 248, 85, 768, 249, 85, 769, 250, 85, 770, 251, 85, 776, 252, 89, 769, 253, 254, 115, 115, 97, 768, 97, 769, 97, 770, 97, 771, 97, 776, 97, 778, 99, 807, 101, 768, 101, 769, 101, 770, 101, 776, 105, 768, 105, 769, 105, 770, 105, 776, 110, 771, 111, 768, 111, 769, 111, 770, 111, 771, 111, 776, 117, 768, 117, 769, 117, 770, 117, 776, 121, 769, 121, 776, 65, 772, 257, 97, 772, 65, 774, 259, 97, 774, 65, 808, 261, 97, 808, 67, 769, 263, 99, 769, 67, 770, 265, 99, 770, 67, 775, 267, 99, 775, 67, 780, 269, 99, 780, 68, 780, 271, 100, 780, 273, 69, 772, 275, 101, 772, 69, 774, 277, 101, 774, 69, 775, 279, 101, 775, 69, 808, 281, 101, 808, 69, 780, 283, 101, 780, 71, 770, 285, 103, 770, 71, 774, 287, 103, 774, 71, 775, 289, 103, 775, 71, 807, 291, 103, 807, 72, 770, 293, 104, 770, 295, 73, 771, 297, 105, 771, 73, 772, 299, 105, 772, 73, 774, 301, 105, 774, 73, 808, 303, 105, 808, 73, 775, 105, 775, 73, 74, 307, 105, 106, 74, 770, 309, 106, 770, 75, 807, 311, 107, 807, 76, 769, 314, 108, 769, 76, 807, 316, 108, 807, 76, 780, 318, 108, 780, 76, 183, 320, 108, 183, 322, 78, 769, 324, 110, 769, 78, 807, 326, 110, 807, 78, 780, 328, 110, 780, 700, 110, 331, 79, 772, 333, 111, 772, 79, 774, 335, 111, 774, 79, 779, 337, 111, 779, 339, 82, 769, 341, 114, 769, 82, 807, 343, 114, 807, 82, 780, 345, 114, 780, 83, 769, 347, 115, 769, 83, 770, 349, 115, 770, 83, 807, 351, 115, 807, 83, 780, 353, 115, 780, 84, 807, 355, 116, 807, 84, 780, 357, 116, 780, 359, 85, 771, 361, 117, 771, 85, 772, 363, 117, 772, 85, 774, 365, 117, 774, 85, 778, 367, 117, 778, 85, 779, 369, 117, 779, 85, 808, 371, 117, 808, 87, 770, 373, 119, 770, 89, 770, 375, 121, 770, 89, 776, 255, 90, 769, 378, 122, 769, 90, 775, 380, 122, 775, 90, 780, 382, 122, 780, 595, 387, 389, 596, 392, 598, 599, 396, 477, 601, 603, 402, 608, 611, 617, 616, 409, 623, 626, 629, 79, 795, 417, 111, 795, 419, 421, 640, 424, 643, 429, 648, 85, 795, 432, 117, 795, 650, 651, 436, 438, 658, 441, 445, 68, 381, 454, 68, 382, 100, 382, 76, 74, 457, 76, 106, 108, 106, 78, 74, 460, 78, 106, 110, 106, 65, 780, 462, 97, 780, 73, 780, 464, 105, 780, 79, 780, 466, 111, 780, 85, 780, 468, 117, 780, 220, 772, 470, 252, 772, 220, 769, 472, 252, 769, 220, 780, 474, 252, 780, 220, 768, 476, 252, 768, 196, 772, 479, 228, 772, 550, 772, 481, 551, 772, 198, 772, 483, 230, 772, 485, 71, 780, 487, 103, 780, 75, 780, 489, 107, 780, 79, 808, 491, 111, 808, 490, 772, 493, 491, 772, 439, 780, 495, 658, 780, 106, 780, 68, 90, 499, 68, 122, 100, 122, 71, 769, 501, 103, 769, 405, 447, 78, 768, 505, 110, 768, 197, 769, 507, 229, 769, 198, 769, 509, 230, 769, 216, 769, 511, 248, 769, 65, 783, 513, 97, 783, 65, 785, 515, 97, 785, 69, 783, 517, 101, 783, 69, 785, 519, 101, 785, 73, 783, 521, 105, 783, 73, 785, 523, 105, 785, 79, 783, 525, 111, 783, 79, 785, 527, 111, 785, 82, 783, 529, 114, 783, 82, 785, 531, 114, 785, 85, 783, 533, 117, 783, 85, 785, 535, 117, 785, 83, 806, 537, 115, 806, 84, 806, 539, 116, 806, 541, 72, 780, 543, 104, 780, 414, 547, 549, 65, 775, 551, 97, 775, 69, 807, 553, 101, 807, 214, 772, 555, 246, 772, 213, 772, 557, 245, 772, 79, 775, 559, 111, 775, 558, 772, 561, 559, 772, 89, 772, 563, 121, 772, 11365, 572, 410, 11366, 578, 384, 649, 652, 583, 585, 587, 589, 591, 614, 633, 635, 641, 32, 774, 32, 775, 32, 778, 32, 808, 32, 771, 32, 779, 661, 768, 769, 787, 776, 769, 953, 881, 883, 697, 887, 32, 837, 59, 1011, 168, 769, 913, 769, 940, 183, 917, 769, 941, 919, 769, 942, 921, 769, 943, 927, 769, 972, 933, 769, 973, 937, 769, 974, 970, 769, 953, 776, 769, 945, 946, 947, 948, 949, 950, 951, 952, 954, 955, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 921, 776, 970, 933, 776, 971, 945, 769, 949, 769, 951, 769, 953, 769, 971, 769, 965, 776, 769, 953, 776, 965, 776, 959, 769, 965, 769, 969, 769, 983, 933, 978, 769, 978, 776, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 962, 920, 1016, 931, 1010, 1019, 891, 892, 893, 1045, 768, 1104, 1045, 776, 1105, 1106, 1043, 769, 1107, 1108, 1109, 1110, 1030, 776, 1111, 1112, 1113, 1114, 1115, 1050, 769, 1116, 1048, 768, 1117, 1059, 774, 1118, 1119, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1048, 774, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1080, 774, 1077, 768, 1077, 776, 1075, 769, 1110, 776, 1082, 769, 1080, 768, 1091, 774, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1140, 783, 1143, 1141, 783, 1145, 1147, 1149, 1151, 1153, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1231, 1046, 774, 1218, 1078, 774, 1220, 1222, 1224, 1226, 1228, 1230, 1040, 774, 1233, 1072, 774, 1040, 776, 1235, 1072, 776, 1237, 1045, 774, 1239, 1077, 774, 1241, 1240, 776, 1243, 1241, 776, 1046, 776, 1245, 1078, 776, 1047, 776, 1247, 1079, 776, 1249, 1048, 772, 1251, 1080, 772, 1048, 776, 1253, 1080, 776, 1054, 776, 1255, 1086, 776, 1257, 1256, 776, 1259, 1257, 776, 1069, 776, 1261, 1101, 776, 1059, 772, 1263, 1091, 772, 1059, 776, 1265, 1091, 776, 1059, 779, 1267, 1091, 779, 1063, 776, 1269, 1095, 776, 1271, 1067, 776, 1273, 1099, 776, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1381, 1410, 1575, 1619, 1575, 1620, 1608, 1620, 1575, 1621, 1610, 1620, 1575, 1652, 1608, 1652, 1735, 1652, 1610, 1652, 1749, 1620, 1729, 1620, 1746, 1620, 2344, 2364, 2352, 2364, 2355, 2364, 2325, 2364, 2326, 2364, 2327, 2364, 2332, 2364, 2337, 2364, 2338, 2364, 2347, 2364, 2351, 2364, 2503, 2494, 2503, 2519, 2465, 2492, 2466, 2492, 2479, 2492, 2610, 2620, 2616, 2620, 2582, 2620, 2583, 2620, 2588, 2620, 2603, 2620, 2887, 2902, 2887, 2878, 2887, 2903, 2849, 2876, 2850, 2876, 2962, 3031, 3014, 3006, 3015, 3006, 3014, 3031, 3142, 3158, 3263, 3285, 3270, 3285, 3270, 3286, 3270, 3266, 3274, 3285, 3398, 3390, 3399, 3390, 3398, 3415, 3545, 3530, 3545, 3535, 3548, 3530, 3545, 3551, 3661, 3634, 3789, 3762, 3755, 3737, 3755, 3745, 3851, 3906, 4023, 3916, 4023, 3921, 4023, 3926, 4023, 3931, 4023, 3904, 4021, 3953, 3954, 3953, 3956, 4018, 3968, 4018, 3969, 4019, 3968, 4019, 3969, 3953, 3968, 3986, 4023, 3996, 4023, 4001, 4023, 4006, 4023, 4011, 4023, 3984, 4021, 4133, 4142, 11520, 11521, 11522, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11546, 11547, 11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11559, 11565, 4316, 5104, 5105, 5106, 5107, 5108, 5109, 6917, 6965, 6919, 6965, 6921, 6965, 6923, 6965, 6925, 6965, 6929, 6965, 6970, 6965, 6972, 6965, 6974, 6965, 6975, 6965, 6978, 6965, 42571, 65, 198, 66, 68, 69, 398, 71, 72, 73, 74, 75, 76, 77, 78, 79, 546, 80, 82, 84, 85, 87, 592, 593, 7426, 604, 7446, 7447, 7453, 7461, 594, 597, 607, 609, 613, 618, 7547, 669, 621, 7557, 671, 625, 624, 627, 628, 632, 642, 427, 7452, 656, 657, 65, 805, 7681, 97, 805, 66, 775, 7683, 98, 775, 66, 803, 7685, 98, 803, 66, 817, 7687, 98, 817, 199, 769, 7689, 231, 769, 68, 775, 7691, 100, 775, 68, 803, 7693, 100, 803, 68, 817, 7695, 100, 817, 68, 807, 7697, 100, 807, 68, 813, 7699, 100, 813, 274, 768, 7701, 275, 768, 274, 769, 7703, 275, 769, 69, 813, 7705, 101, 813, 69, 816, 7707, 101, 816, 552, 774, 7709, 553, 774, 70, 775, 7711, 102, 775, 71, 772, 7713, 103, 772, 72, 775, 7715, 104, 775, 72, 803, 7717, 104, 803, 72, 776, 7719, 104, 776, 72, 807, 7721, 104, 807, 72, 814, 7723, 104, 814, 73, 816, 7725, 105, 816, 207, 769, 7727, 239, 769, 75, 769, 7729, 107, 769, 75, 803, 7731, 107, 803, 75, 817, 7733, 107, 817, 76, 803, 7735, 108, 803, 7734, 772, 7737, 7735, 772, 76, 817, 7739, 108, 817, 76, 813, 7741, 108, 813, 77, 769, 7743, 109, 769, 77, 775, 7745, 109, 775, 77, 803, 7747, 109, 803, 78, 775, 7749, 110, 775, 78, 803, 7751, 110, 803, 78, 817, 7753, 110, 817, 78, 813, 7755, 110, 813, 213, 769, 7757, 245, 769, 213, 776, 7759, 245, 776, 332, 768, 7761, 333, 768, 332, 769, 7763, 333, 769, 80, 769, 7765, 112, 769, 80, 775, 7767, 112, 775, 82, 775, 7769, 114, 775, 82, 803, 7771, 114, 803, 7770, 772, 7773, 7771, 772, 82, 817, 7775, 114, 817, 83, 775, 7777, 115, 775, 83, 803, 7779, 115, 803, 346, 775, 7781, 347, 775, 352, 775, 7783, 353, 775, 7778, 775, 7785, 7779, 775, 84, 775, 7787, 116, 775, 84, 803, 7789, 116, 803, 84, 817, 7791, 116, 817, 84, 813, 7793, 116, 813, 85, 804, 7795, 117, 804, 85, 816, 7797, 117, 816, 85, 813, 7799, 117, 813, 360, 769, 7801, 361, 769, 362, 776, 7803, 363, 776, 86, 771, 7805, 118, 771, 86, 803, 7807, 118, 803, 87, 768, 7809, 119, 768, 87, 769, 7811, 119, 769, 87, 776, 7813, 119, 776, 87, 775, 7815, 119, 775, 87, 803, 7817, 119, 803, 88, 775, 7819, 120, 775, 88, 776, 7821, 120, 776, 89, 775, 7823, 121, 775, 90, 770, 7825, 122, 770, 90, 803, 7827, 122, 803, 90, 817, 7829, 122, 817, 104, 817, 116, 776, 119, 778, 121, 778, 97, 702, 383, 775, 65, 803, 7841, 97, 803, 65, 777, 7843, 97, 777, 194, 769, 7845, 226, 769, 194, 768, 7847, 226, 768, 194, 777, 7849, 226, 777, 194, 771, 7851, 226, 771, 7840, 770, 7853, 7841, 770, 258, 769, 7855, 259, 769, 258, 768, 7857, 259, 768, 258, 777, 7859, 259, 777, 258, 771, 7861, 259, 771, 7840, 774, 7863, 7841, 774, 69, 803, 7865, 101, 803, 69, 777, 7867, 101, 777, 69, 771, 7869, 101, 771, 202, 769, 7871, 234, 769, 202, 768, 7873, 234, 768, 202, 777, 7875, 234, 777, 202, 771, 7877, 234, 771, 7864, 770, 7879, 7865, 770, 73, 777, 7881, 105, 777, 73, 803, 7883, 105, 803, 79, 803, 7885, 111, 803, 79, 777, 7887, 111, 777, 212, 769, 7889, 244, 769, 212, 768, 7891, 244, 768, 212, 777, 7893, 244, 777, 212, 771, 7895, 244, 771, 7884, 770, 7897, 7885, 770, 416, 769, 7899, 417, 769, 416, 768, 7901, 417, 768, 416, 777, 7903, 417, 777, 416, 771, 7905, 417, 771, 416, 803, 7907, 417, 803, 85, 803, 7909, 117, 803, 85, 777, 7911, 117, 777, 431, 769, 7913, 432, 769, 431, 768, 7915, 432, 768, 431, 777, 7917, 432, 777, 431, 771, 7919, 432, 771, 431, 803, 7921, 432, 803, 89, 768, 7923, 121, 768, 89, 803, 7925, 121, 803, 89, 777, 7927, 121, 777, 89, 771, 7929, 121, 771, 7931, 7933, 7935, 945, 787, 945, 788, 7936, 768, 7937, 768, 7936, 769, 7937, 769, 7936, 834, 7937, 834, 913, 787, 7936, 913, 788, 7937, 7944, 768, 7938, 7945, 768, 7939, 7944, 769, 7940, 7945, 769, 7941, 7944, 834, 7942, 7945, 834, 7943, 949, 787, 949, 788, 7952, 768, 7953, 768, 7952, 769, 7953, 769, 917, 787, 7952, 917, 788, 7953, 7960, 768, 7954, 7961, 768, 7955, 7960, 769, 7956, 7961, 769, 7957, 951, 787, 951, 788, 7968, 768, 7969, 768, 7968, 769, 7969, 769, 7968, 834, 7969, 834, 919, 787, 7968, 919, 788, 7969, 7976, 768, 7970, 7977, 768, 7971, 7976, 769, 7972, 7977, 769, 7973, 7976, 834, 7974, 7977, 834, 7975, 953, 787, 953, 788, 7984, 768, 7985, 768, 7984, 769, 7985, 769, 7984, 834, 7985, 834, 921, 787, 7984, 921, 788, 7985, 7992, 768, 7986, 7993, 768, 7987, 7992, 769, 7988, 7993, 769, 7989, 7992, 834, 7990, 7993, 834, 7991, 959, 787, 959, 788, 8000, 768, 8001, 768, 8000, 769, 8001, 769, 927, 787, 8000, 927, 788, 8001, 8008, 768, 8002, 8009, 768, 8003, 8008, 769, 8004, 8009, 769, 8005, 965, 787, 965, 788, 8016, 768, 965, 787, 768, 8017, 768, 8016, 769, 965, 787, 769, 8017, 769, 8016, 834, 965, 787, 834, 8017, 834, 933, 788, 8017, 8025, 768, 8019, 8025, 769, 8021, 8025, 834, 8023, 969, 787, 969, 788, 8032, 768, 8033, 768, 8032, 769, 8033, 769, 8032, 834, 8033, 834, 937, 787, 8032, 937, 788, 8033, 8040, 768, 8034, 8041, 768, 8035, 8040, 769, 8036, 8041, 769, 8037, 8040, 834, 8038, 8041, 834, 8039, 945, 768, 949, 768, 951, 768, 953, 768, 959, 768, 965, 768, 969, 768, 7936, 837, 7936, 953, 7937, 837, 7937, 953, 7938, 837, 7938, 953, 7939, 837, 7939, 953, 7940, 837, 7940, 953, 7941, 837, 7941, 953, 7942, 837, 7942, 953, 7943, 837, 7943, 953, 7944, 837, 7945, 837, 7946, 837, 7947, 837, 7948, 837, 7949, 837, 7950, 837, 7951, 837, 7968, 837, 7968, 953, 7969, 837, 7969, 953, 7970, 837, 7970, 953, 7971, 837, 7971, 953, 7972, 837, 7972, 953, 7973, 837, 7973, 953, 7974, 837, 7974, 953, 7975, 837, 7975, 953, 7976, 837, 7977, 837, 7978, 837, 7979, 837, 7980, 837, 7981, 837, 7982, 837, 7983, 837, 8032, 837, 8032, 953, 8033, 837, 8033, 953, 8034, 837, 8034, 953, 8035, 837, 8035, 953, 8036, 837, 8036, 953, 8037, 837, 8037, 953, 8038, 837, 8038, 953, 8039, 837, 8039, 953, 8040, 837, 8041, 837, 8042, 837, 8043, 837, 8044, 837, 8045, 837, 8046, 837, 8047, 837, 945, 774, 945, 772, 8048, 837, 8048, 953, 945, 837, 945, 953, 940, 837, 940, 953, 945, 834, 8118, 837, 945, 834, 953, 913, 774, 8112, 913, 772, 8113, 913, 768, 8048, 902, 8049, 913, 837, 32, 787, 32, 834, 168, 834, 8052, 837, 8052, 953, 951, 837, 951, 953, 942, 837, 942, 953, 951, 834, 8134, 837, 951, 834, 953, 917, 768, 8050, 904, 8051, 919, 768, 8052, 905, 8053, 919, 837, 8127, 768, 8127, 769, 8127, 834, 953, 774, 953, 772, 970, 768, 953, 776, 768, 912, 953, 834, 970, 834, 953, 776, 834, 921, 774, 8144, 921, 772, 8145, 921, 768, 8054, 906, 8055, 8190, 768, 8190, 769, 8190, 834, 965, 774, 965, 772, 971, 768, 965, 776, 768, 944, 961, 787, 961, 788, 965, 834, 971, 834, 965, 776, 834, 933, 774, 8160, 933, 772, 8161, 933, 768, 8058, 910, 8059, 929, 788, 8165, 168, 768, 901, 96, 8060, 837, 8060, 953, 969, 837, 969, 953, 974, 837, 974, 953, 969, 834, 8182, 837, 969, 834, 953, 927, 768, 8056, 908, 8057, 937, 768, 8060, 911, 8061, 937, 837, 180, 32, 788, 8194, 8195, 8208, 32, 819, 46, 46, 46, 46, 46, 46, 8242, 8242, 8242, 8242, 8242, 8245, 8245, 8245, 8245, 8245, 33, 33, 32, 773, 63, 63, 63, 33, 33, 63, 8242, 8242, 8242, 8242, 48, 52, 53, 54, 55, 56, 57, 43, 8722, 61, 40, 41, 82, 115, 97, 47, 99, 97, 47, 115, 67, 176, 67, 99, 47, 111, 99, 47, 117, 400, 176, 70, 78, 111, 81, 83, 77, 84, 69, 76, 84, 77, 90, 937, 197, 70, 8526, 1488, 1489, 1490, 1491, 70, 65, 88, 915, 928, 8721, 49, 8260, 55, 49, 8260, 57, 49, 8260, 49, 48, 49, 8260, 51, 50, 8260, 51, 49, 8260, 53, 50, 8260, 53, 51, 8260, 53, 52, 8260, 53, 49, 8260, 54, 53, 8260, 54, 49, 8260, 56, 51, 8260, 56, 53, 8260, 56, 55, 8260, 56, 49, 8260, 8560, 73, 73, 8561, 73, 73, 73, 8562, 73, 86, 8563, 86, 8564, 86, 73, 8565, 86, 73, 73, 8566, 86, 73, 73, 73, 8567, 73, 88, 8568, 88, 8569, 88, 73, 8570, 88, 73, 73, 8571, 8572, 8573, 8574, 8575, 105, 105, 105, 105, 105, 105, 118, 118, 105, 118, 105, 105, 118, 105, 105, 105, 105, 120, 120, 105, 120, 105, 105, 8580, 48, 8260, 51, 8592, 824, 8594, 824, 8596, 824, 8656, 824, 8660, 824, 8658, 824, 8707, 824, 8712, 824, 8715, 824, 8739, 824, 8741, 824, 8747, 8747, 8747, 8747, 8747, 8750, 8750, 8750, 8750, 8750, 8764, 824, 8771, 824, 8773, 824, 8776, 824, 61, 824, 8801, 824, 8781, 824, 60, 824, 62, 824, 8804, 824, 8805, 824, 8818, 824, 8819, 824, 8822, 824, 8823, 824, 8826, 824, 8827, 824, 8834, 824, 8835, 824, 8838, 824, 8839, 824, 8866, 824, 8872, 824, 8873, 824, 8875, 824, 8828, 824, 8829, 824, 8849, 824, 8850, 824, 8882, 824, 8883, 824, 8884, 824, 8885, 824, 12296, 12297, 49, 48, 49, 49, 49, 50, 49, 51, 49, 52, 49, 53, 49, 54, 49, 55, 49, 56, 49, 57, 50, 48, 40, 49, 41, 40, 50, 41, 40, 51, 41, 40, 52, 41, 40, 53, 41, 40, 54, 41, 40, 55, 41, 40, 56, 41, 40, 57, 41, 40, 49, 48, 41, 40, 49, 49, 41, 40, 49, 50, 41, 40, 49, 51, 41, 40, 49, 52, 41, 40, 49, 53, 41, 40, 49, 54, 41, 40, 49, 55, 41, 40, 49, 56, 41, 40, 49, 57, 41, 40, 50, 48, 41, 49, 46, 50, 46, 51, 46, 52, 46, 53, 46, 54, 46, 55, 46, 56, 46, 57, 46, 49, 48, 46, 49, 49, 46, 49, 50, 46, 49, 51, 46, 49, 52, 46, 49, 53, 46, 49, 54, 46, 49, 55, 46, 49, 56, 46, 49, 57, 46, 50, 48, 46, 40, 97, 41, 40, 98, 41, 40, 99, 41, 40, 100, 41, 40, 101, 41, 40, 102, 41, 40, 103, 41, 40, 104, 41, 40, 105, 41, 40, 106, 41, 40, 107, 41, 40, 108, 41, 40, 109, 41, 40, 110, 41, 40, 111, 41, 40, 112, 41, 40, 113, 41, 40, 114, 41, 40, 115, 41, 40, 116, 41, 40, 117, 41, 40, 118, 41, 40, 119, 41, 40, 120, 41, 40, 121, 41, 40, 122, 41, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 83, 9442, 9443, 9444, 9445, 9446, 9447, 89, 9448, 9449, 8747, 8747, 8747, 8747, 58, 58, 61, 61, 61, 61, 61, 61, 10973, 824, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 11361, 619, 7549, 637, 11368, 11370, 11372, 11379, 11382, 575, 576, 11393, 11395, 11397, 11399, 11401, 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 11421, 11423, 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 11451, 11453, 11455, 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 11481, 11483, 11485, 11487, 11489, 11491, 11500, 11502, 11507, 11617, 27597, 40863, 19968, 20008, 20022, 20031, 20057, 20101, 20108, 20128, 20154, 20799, 20837, 20843, 20866, 20886, 20907, 20960, 20981, 20992, 21147, 21241, 21269, 21274, 21304, 21313, 21340, 21353, 21378, 21430, 21448, 21475, 22231, 22303, 22763, 22786, 22794, 22805, 22823, 22899, 23376, 23424, 23544, 23567, 23586, 23608, 23662, 23665, 24027, 24037, 24049, 24062, 24178, 24186, 24191, 24308, 24318, 24331, 24339, 24400, 24417, 24435, 24515, 25096, 25142, 25163, 25903, 25908, 25991, 26007, 26020, 26041, 26080, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27571, 27595, 27604, 27611, 27663, 27668, 27700, 28779, 29226, 29238, 29243, 29247, 29255, 29273, 29275, 29356, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 30000, 30091, 30098, 30326, 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31160, 31166, 31348, 31435, 31481, 31859, 31992, 32566, 32593, 32650, 32701, 32769, 32780, 32786, 32819, 32895, 32905, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33400, 34381, 34411, 34880, 34892, 34915, 35198, 35211, 35282, 35328, 35895, 35910, 35925, 35960, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36789, 37009, 37193, 37318, 37324, 37329, 38263, 38272, 38428, 38582, 38585, 38632, 38737, 38750, 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 39340, 39592, 39640, 39647, 39717, 39727, 39730, 39740, 39770, 40165, 40565, 40575, 40613, 40635, 40643, 40653, 40657, 40697, 40701, 40718, 40723, 40736, 40763, 40778, 40786, 40845, 40860, 40864, 12306, 21316, 21317, 12363, 12441, 12365, 12441, 12367, 12441, 12369, 12441, 12371, 12441, 12373, 12441, 12375, 12441, 12377, 12441, 12379, 12441, 12381, 12441, 12383, 12441, 12385, 12441, 12388, 12441, 12390, 12441, 12392, 12441, 12399, 12441, 12399, 12442, 12402, 12441, 12402, 12442, 12405, 12441, 12405, 12442, 12408, 12441, 12408, 12442, 12411, 12441, 12411, 12442, 12358, 12441, 32, 12441, 32, 12442, 12445, 12441, 12424, 12426, 12459, 12441, 12461, 12441, 12463, 12441, 12465, 12441, 12467, 12441, 12469, 12441, 12471, 12441, 12473, 12441, 12475, 12441, 12477, 12441, 12479, 12441, 12481, 12441, 12484, 12441, 12486, 12441, 12488, 12441, 12495, 12441, 12495, 12442, 12498, 12441, 12498, 12442, 12501, 12441, 12501, 12442, 12504, 12441, 12504, 12442, 12507, 12441, 12507, 12442, 12454, 12441, 12527, 12441, 12528, 12441, 12529, 12441, 12530, 12441, 12541, 12441, 12467, 12488, 4352, 4353, 4522, 4354, 4524, 4525, 4355, 4356, 4357, 4528, 4529, 4530, 4531, 4532, 4533, 4378, 4358, 4359, 4360, 4385, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4448, 4372, 4373, 4551, 4552, 4556, 4558, 4563, 4567, 4569, 4380, 4573, 4575, 4381, 4382, 4384, 4386, 4387, 4391, 4393, 4395, 4396, 4397, 4398, 4399, 4402, 4406, 4416, 4423, 4428, 4593, 4594, 4439, 4440, 4441, 4484, 4485, 4488, 4497, 4498, 4500, 4510, 4513, 19977, 22235, 19978, 20013, 19979, 30002, 19993, 19969, 22825, 22320, 40, 4352, 41, 40, 4354, 41, 40, 4355, 41, 40, 4357, 41, 40, 4358, 41, 40, 4359, 41, 40, 4361, 41, 40, 4363, 41, 40, 4364, 41, 40, 4366, 41, 40, 4367, 41, 40, 4368, 41, 40, 4369, 41, 40, 4370, 41, 40, 4352, 4449, 41, 40, 4354, 4449, 41, 40, 4355, 4449, 41, 40, 4357, 4449, 41, 40, 4358, 4449, 41, 40, 4359, 4449, 41, 40, 4361, 4449, 41, 40, 4363, 4449, 41, 40, 4364, 4449, 41, 40, 4366, 4449, 41, 40, 4367, 4449, 41, 40, 4368, 4449, 41, 40, 4369, 4449, 41, 40, 4370, 4449, 41, 40, 4364, 4462, 41, 40, 4363, 4457, 4364, 4453, 4523, 41, 40, 4363, 4457, 4370, 4462, 41, 40, 19968, 41, 40, 20108, 41, 40, 19977, 41, 40, 22235, 41, 40, 20116, 41, 40, 20845, 41, 40, 19971, 41, 40, 20843, 41, 40, 20061, 41, 40, 21313, 41, 40, 26376, 41, 40, 28779, 41, 40, 27700, 41, 40, 26408, 41, 40, 37329, 41, 40, 22303, 41, 40, 26085, 41, 40, 26666, 41, 40, 26377, 41, 40, 31038, 41, 40, 21517, 41, 40, 29305, 41, 40, 36001, 41, 40, 31069, 41, 40, 21172, 41, 40, 20195, 41, 40, 21628, 41, 40, 23398, 41, 40, 30435, 41, 40, 20225, 41, 40, 36039, 41, 40, 21332, 41, 40, 31085, 41, 40, 20241, 41, 40, 33258, 41, 40, 33267, 41, 21839, 24188, 31631, 80, 84, 69, 50, 49, 50, 50, 50, 51, 50, 52, 50, 53, 50, 54, 50, 55, 50, 56, 50, 57, 51, 48, 51, 49, 51, 50, 51, 51, 51, 52, 51, 53, 4352, 4449, 4354, 4449, 4355, 4449, 4357, 4449, 4358, 4449, 4359, 4449, 4361, 4449, 4363, 4449, 4364, 4449, 4366, 4449, 4367, 4449, 4368, 4449, 4369, 4449, 4370, 4449, 4366, 4449, 4535, 4352, 4457, 4364, 4462, 4363, 4468, 4363, 4462, 20116, 20845, 19971, 20061, 26666, 26377, 31038, 21517, 29305, 36001, 31069, 21172, 31192, 30007, 36969, 20778, 21360, 27880, 38917, 20241, 20889, 27491, 24038, 21491, 21307, 23447, 23398, 30435, 20225, 36039, 21332, 22812, 51, 54, 51, 55, 51, 56, 51, 57, 52, 48, 52, 49, 52, 50, 52, 51, 52, 52, 52, 53, 52, 54, 52, 55, 52, 56, 52, 57, 53, 48, 49, 26376, 50, 26376, 51, 26376, 52, 26376, 53, 26376, 54, 26376, 55, 26376, 56, 26376, 57, 26376, 49, 48, 26376, 49, 49, 26376, 49, 50, 26376, 72, 103, 101, 114, 103, 101, 86, 76, 84, 68, 12450, 12452, 12454, 12456, 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12528, 12529, 12530, 12450, 12497, 12540, 12488, 12450, 12523, 12501, 12449, 12450, 12531, 12506, 12450, 12450, 12540, 12523, 12452, 12491, 12531, 12464, 12452, 12531, 12481, 12454, 12457, 12531, 12456, 12473, 12463, 12540, 12489, 12456, 12540, 12459, 12540, 12458, 12531, 12473, 12458, 12540, 12512, 12459, 12452, 12522, 12459, 12521, 12483, 12488, 12459, 12525, 12522, 12540, 12460, 12525, 12531, 12460, 12531, 12510, 12462, 12460, 12462, 12491, 12540, 12461, 12517, 12522, 12540, 12462, 12523, 12480, 12540, 12461, 12525, 12461, 12525, 12464, 12521, 12512, 12461, 12525, 12513, 12540, 12488, 12523, 12461, 12525, 12527, 12483, 12488, 12464, 12521, 12512, 12464, 12521, 12512, 12488, 12531, 12463, 12523, 12476, 12452, 12525, 12463, 12525, 12540, 12493, 12465, 12540, 12473, 12467, 12523, 12490, 12467, 12540, 12509, 12469, 12452, 12463, 12523, 12469, 12531, 12481, 12540, 12512, 12471, 12522, 12531, 12464, 12475, 12531, 12481, 12475, 12531, 12488, 12480, 12540, 12473, 12487, 12471, 12489, 12523, 12488, 12531, 12490, 12494, 12494, 12483, 12488, 12495, 12452, 12484, 12497, 12540, 12475, 12531, 12488, 12497, 12540, 12484, 12496, 12540, 12524, 12523, 12500, 12450, 12473, 12488, 12523, 12500, 12463, 12523, 12500, 12467, 12499, 12523, 12501, 12449, 12521, 12483, 12489, 12501, 12451, 12540, 12488, 12502, 12483, 12471, 12455, 12523, 12501, 12521, 12531, 12504, 12463, 12479, 12540, 12523, 12506, 12477, 12506, 12491, 12498, 12504, 12523, 12484, 12506, 12531, 12473, 12506, 12540, 12472, 12505, 12540, 12479, 12509, 12452, 12531, 12488, 12508, 12523, 12488, 12507, 12531, 12509, 12531, 12489, 12507, 12540, 12523, 12507, 12540, 12531, 12510, 12452, 12463, 12525, 12510, 12452, 12523, 12510, 12483, 12495, 12510, 12523, 12463, 12510, 12531, 12471, 12519, 12531, 12511, 12463, 12525, 12531, 12511, 12522, 12511, 12522, 12496, 12540, 12523, 12513, 12460, 12513, 12460, 12488, 12531, 12513, 12540, 12488, 12523, 12516, 12540, 12489, 12516, 12540, 12523, 12518, 12450, 12531, 12522, 12483, 12488, 12523, 12522, 12521, 12523, 12500, 12540, 12523, 12540, 12502, 12523, 12524, 12512, 12524, 12531, 12488, 12466, 12531, 12527, 12483, 12488, 48, 28857, 49, 28857, 50, 28857, 51, 28857, 52, 28857, 53, 28857, 54, 28857, 55, 28857, 56, 28857, 57, 28857, 49, 48, 28857, 49, 49, 28857, 49, 50, 28857, 49, 51, 28857, 49, 52, 28857, 49, 53, 28857, 49, 54, 28857, 49, 55, 28857, 49, 56, 28857, 49, 57, 28857, 50, 48, 28857, 50, 49, 28857, 50, 50, 28857, 50, 51, 28857, 50, 52, 28857, 104, 80, 97, 100, 97, 65, 85, 98, 97, 114, 111, 86, 112, 99, 100, 109, 100, 109, 178, 100, 109, 179, 73, 85, 24179, 25104, 26157, 21644, 22823, 27491, 26126, 27835, 26666, 24335, 20250, 31038, 112, 65, 110, 65, 956, 65, 109, 65, 107, 65, 75, 66, 77, 66, 71, 66, 99, 97, 108, 107, 99, 97, 108, 112, 70, 110, 70, 956, 70, 956, 103, 109, 103, 107, 103, 72, 122, 107, 72, 122, 77, 72, 122, 71, 72, 122, 84, 72, 122, 956, 8467, 109, 8467, 100, 8467, 107, 8467, 102, 109, 110, 109, 956, 109, 109, 109, 99, 109, 107, 109, 109, 109, 178, 99, 109, 178, 109, 178, 107, 109, 178, 109, 109, 179, 99, 109, 179, 109, 179, 107, 109, 179, 109, 8725, 115, 109, 8725, 115, 178, 80, 97, 107, 80, 97, 77, 80, 97, 71, 80, 97, 114, 97, 100, 114, 97, 100, 8725, 115, 114, 97, 100, 8725, 115, 178, 112, 115, 110, 115, 956, 115, 109, 115, 112, 86, 110, 86, 956, 86, 109, 86, 107, 86, 77, 86, 112, 87, 110, 87, 956, 87, 109, 87, 107, 87, 77, 87, 107, 937, 77, 937, 97, 46, 109, 46, 66, 113, 99, 99, 99, 100, 67, 8725, 107, 103, 67, 111, 46, 100, 66, 71, 121, 104, 97, 72, 80, 105, 110, 75, 75, 75, 77, 107, 116, 108, 109, 108, 110, 108, 111, 103, 108, 120, 109, 98, 109, 105, 108, 109, 111, 108, 80, 72, 112, 46, 109, 46, 80, 80, 77, 80, 82, 115, 114, 83, 118, 87, 98, 86, 8725, 109, 65, 8725, 109, 49, 26085, 50, 26085, 51, 26085, 52, 26085, 53, 26085, 54, 26085, 55, 26085, 56, 26085, 57, 26085, 49, 48, 26085, 49, 49, 26085, 49, 50, 26085, 49, 51, 26085, 49, 52, 26085, 49, 53, 26085, 49, 54, 26085, 49, 55, 26085, 49, 56, 26085, 49, 57, 26085, 50, 48, 26085, 50, 49, 26085, 50, 50, 26085, 50, 51, 26085, 50, 52, 26085, 50, 53, 26085, 50, 54, 26085, 50, 55, 26085, 50, 56, 26085, 50, 57, 26085, 51, 48, 26085, 51, 49, 26085, 103, 97, 108, 42561, 42563, 42565, 42567, 42569, 42573, 42575, 42577, 42579, 42581, 42583, 42585, 42587, 42589, 42591, 42593, 42595, 42597, 42599, 42601, 42603, 42605, 42625, 42627, 42629, 42631, 42633, 42635, 42637, 42639, 42641, 42643, 42645, 42647, 42649, 42651, 42787, 42789, 42791, 42793, 42795, 42797, 42799, 42803, 42805, 42807, 42809, 42811, 42813, 42815, 42817, 42819, 42821, 42823, 42825, 42827, 42829, 42831, 42833, 42835, 42837, 42839, 42841, 42843, 42845, 42847, 42849, 42851, 42853, 42855, 42857, 42859, 42861, 42863, 42874, 42876, 7545, 42879, 42881, 42883, 42885, 42887, 42892, 42897, 42899, 42903, 42905, 42907, 42909, 42911, 42913, 42915, 42917, 42919, 42921, 620, 670, 647, 43859, 42933, 42935, 294, 43831, 43858, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 35912, 26356, 36040, 28369, 20018, 21477, 22865, 21895, 22856, 25078, 30313, 32645, 34367, 34746, 35064, 37007, 27138, 27931, 28889, 29662, 33853, 37226, 39409, 20098, 21365, 27396, 29211, 34349, 40478, 23888, 28651, 34253, 35172, 25289, 33240, 34847, 24266, 26391, 28010, 29436, 37070, 20358, 20919, 21214, 25796, 27347, 29200, 30439, 34310, 34396, 36335, 38706, 39791, 40442, 30860, 31103, 32160, 33737, 37636, 35542, 22751, 24324, 31840, 32894, 29282, 30922, 36034, 38647, 22744, 23650, 27155, 28122, 28431, 32047, 32311, 38475, 21202, 32907, 20956, 20940, 31260, 32190, 33777, 38517, 35712, 25295, 35582, 20025, 23527, 24594, 29575, 30064, 21271, 30971, 20415, 24489, 19981, 27852, 25976, 32034, 21443, 22622, 30465, 33865, 35498, 27578, 27784, 25342, 33509, 25504, 30053, 20142, 20841, 20937, 26753, 31975, 33391, 35538, 37327, 21237, 21570, 24300, 26053, 28670, 31018, 38317, 39530, 40599, 40654, 26310, 27511, 36706, 24180, 24976, 25088, 25754, 28451, 29001, 29833, 31178, 32244, 32879, 36646, 34030, 36899, 37706, 21015, 21155, 21693, 28872, 35010, 24265, 24565, 25467, 27566, 31806, 29557, 20196, 22265, 23994, 24604, 29618, 29801, 32666, 32838, 37428, 38646, 38728, 38936, 20363, 31150, 37300, 38584, 24801, 20102, 20698, 23534, 23615, 26009, 29134, 30274, 34044, 36988, 26248, 38446, 21129, 26491, 26611, 27969, 28316, 29705, 30041, 30827, 32016, 39006, 25134, 38520, 20523, 23833, 28138, 36650, 24459, 24900, 26647, 38534, 21033, 21519, 23653, 26131, 26446, 26792, 27877, 29702, 30178, 32633, 35023, 35041, 38626, 21311, 28346, 21533, 29136, 29848, 34298, 38563, 40023, 40607, 26519, 28107, 33256, 31520, 31890, 29376, 28825, 35672, 20160, 33590, 21050, 20999, 24230, 25299, 31958, 23429, 27934, 26292, 36667, 38477, 24275, 20800, 21952, 22618, 26228, 20958, 29482, 30410, 31036, 31070, 31077, 31119, 38742, 31934, 34322, 35576, 36920, 37117, 39151, 39164, 39208, 40372, 37086, 38583, 20398, 20711, 20813, 21193, 21220, 21329, 21917, 22022, 22120, 22592, 22696, 23652, 24724, 24936, 24974, 25074, 25935, 26082, 26257, 26757, 28023, 28186, 28450, 29038, 29227, 29730, 30865, 31049, 31048, 31056, 31062, 31117, 31118, 31296, 31361, 31680, 32265, 32321, 32626, 32773, 33261, 33401, 33879, 35088, 35222, 35585, 35641, 36051, 36104, 36790, 38627, 38911, 38971, 24693, 55376, 57070, 33304, 20006, 20917, 20840, 20352, 20805, 20864, 21191, 21242, 21845, 21913, 21986, 22707, 22852, 22868, 23138, 23336, 24274, 24281, 24425, 24493, 24792, 24910, 24840, 24928, 25140, 25540, 25628, 25682, 25942, 26395, 26454, 28379, 28363, 28702, 30631, 29237, 29359, 29809, 29958, 30011, 30237, 30239, 30427, 30452, 30538, 30528, 30924, 31409, 31867, 32091, 32574, 33618, 33775, 34681, 35137, 35206, 35519, 35531, 35565, 35722, 36664, 36978, 37273, 37494, 38524, 38875, 38923, 39698, 55370, 56394, 55370, 56388, 55372, 57301, 15261, 16408, 16441, 55380, 56905, 55383, 56528, 55391, 57043, 40771, 40846, 102, 102, 102, 105, 102, 108, 102, 102, 105, 102, 102, 108, 383, 116, 115, 116, 1396, 1398, 1396, 1381, 1396, 1387, 1406, 1398, 1396, 1389, 1497, 1460, 1522, 1463, 1506, 1492, 1499, 1500, 1501, 1512, 1514, 1513, 1473, 1513, 1474, 64329, 1473, 64329, 1474, 1488, 1463, 1488, 1464, 1488, 1468, 1489, 1468, 1490, 1468, 1491, 1468, 1492, 1468, 1493, 1468, 1494, 1468, 1496, 1468, 1497, 1468, 1498, 1468, 1499, 1468, 1500, 1468, 1502, 1468, 1504, 1468, 1505, 1468, 1507, 1468, 1508, 1468, 1510, 1468, 1511, 1468, 1512, 1468, 1513, 1468, 1514, 1468, 1493, 1465, 1489, 1471, 1499, 1471, 1508, 1471, 1488, 1500, 1649, 1659, 1662, 1664, 1658, 1663, 1657, 1700, 1702, 1668, 1667, 1670, 1671, 1677, 1676, 1678, 1672, 1688, 1681, 1705, 1711, 1715, 1713, 1722, 1723, 1728, 1729, 1726, 1746, 1747, 1709, 1735, 1734, 1736, 1655, 1739, 1733, 1737, 1744, 1609, 1574, 1575, 1574, 1749, 1574, 1608, 1574, 1735, 1574, 1734, 1574, 1736, 1574, 1744, 1574, 1609, 1740, 1574, 1580, 1574, 1581, 1574, 1605, 1574, 1610, 1576, 1580, 1576, 1581, 1576, 1582, 1576, 1605, 1576, 1609, 1576, 1610, 1578, 1580, 1578, 1581, 1578, 1582, 1578, 1605, 1578, 1609, 1578, 1610, 1579, 1580, 1579, 1605, 1579, 1609, 1579, 1610, 1580, 1581, 1580, 1605, 1581, 1580, 1581, 1605, 1582, 1580, 1582, 1581, 1582, 1605, 1587, 1580, 1587, 1581, 1587, 1582, 1587, 1605, 1589, 1581, 1589, 1605, 1590, 1580, 1590, 1581, 1590, 1582, 1590, 1605, 1591, 1581, 1591, 1605, 1592, 1605, 1593, 1580, 1593, 1605, 1594, 1580, 1594, 1605, 1601, 1580, 1601, 1581, 1601, 1582, 1601, 1605, 1601, 1609, 1601, 1610, 1602, 1581, 1602, 1605, 1602, 1609, 1602, 1610, 1603, 1575, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, 1603, 1605, 1603, 1609, 1603, 1610, 1604, 1580, 1604, 1581, 1604, 1582, 1604, 1605, 1604, 1609, 1604, 1610, 1605, 1580, 1605, 1581, 1605, 1582, 1605, 1605, 1605, 1609, 1605, 1610, 1606, 1580, 1606, 1581, 1606, 1582, 1606, 1605, 1606, 1609, 1606, 1610, 1607, 1580, 1607, 1605, 1607, 1609, 1607, 1610, 1610, 1580, 1610, 1581, 1610, 1582, 1610, 1605, 1610, 1609, 1610, 1610, 1584, 1648, 1585, 1648, 1609, 1648, 32, 1612, 1617, 32, 1613, 1617, 32, 1614, 1617, 32, 1615, 1617, 32, 1616, 1617, 32, 1617, 1648, 1574, 1585, 1574, 1586, 1574, 1606, 1576, 1585, 1576, 1586, 1576, 1606, 1578, 1585, 1578, 1586, 1578, 1606, 1579, 1585, 1579, 1586, 1579, 1606, 1605, 1575, 1606, 1585, 1606, 1586, 1606, 1606, 1610, 1585, 1610, 1586, 1610, 1606, 1574, 1582, 1574, 1607, 1576, 1607, 1578, 1607, 1589, 1582, 1604, 1607, 1606, 1607, 1607, 1648, 1610, 1607, 1579, 1607, 1587, 1607, 1588, 1605, 1588, 1607, 1600, 1614, 1617, 1600, 1615, 1617, 1600, 1616, 1617, 1591, 1609, 1591, 1610, 1593, 1609, 1593, 1610, 1594, 1609, 1594, 1610, 1587, 1609, 1587, 1610, 1588, 1609, 1588, 1610, 1581, 1609, 1581, 1610, 1580, 1609, 1580, 1610, 1582, 1609, 1582, 1610, 1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, 1588, 1580, 1588, 1581, 1588, 1582, 1588, 1585, 1587, 1585, 1589, 1585, 1590, 1585, 1575, 1611, 1578, 1580, 1605, 1578, 1581, 1580, 1578, 1581, 1605, 1578, 1582, 1605, 1578, 1605, 1580, 1578, 1605, 1581, 1578, 1605, 1582, 1580, 1605, 1581, 1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, 1580, 1587, 1580, 1581, 1587, 1580, 1609, 1587, 1605, 1581, 1587, 1605, 1580, 1587, 1605, 1605, 1589, 1581, 1581, 1589, 1605, 1605, 1588, 1581, 1605, 1588, 1580, 1610, 1588, 1605, 1582, 1588, 1605, 1605, 1590, 1581, 1609, 1590, 1582, 1605, 1591, 1605, 1581, 1591, 1605, 1605, 1591, 1605, 1610, 1593, 1580, 1605, 1593, 1605, 1605, 1593, 1605, 1609, 1594, 1605, 1605, 1594, 1605, 1610, 1594, 1605, 1609, 1601, 1582, 1605, 1602, 1605, 1581, 1602, 1605, 1605, 1604, 1581, 1605, 1604, 1581, 1610, 1604, 1581, 1609, 1604, 1580, 1580, 1604, 1582, 1605, 1604, 1605, 1581, 1605, 1581, 1580, 1605, 1581, 1605, 1605, 1581, 1610, 1605, 1580, 1581, 1605, 1580, 1605, 1605, 1582, 1580, 1605, 1582, 1605, 1605, 1580, 1582, 1607, 1605, 1580, 1607, 1605, 1605, 1606, 1581, 1605, 1606, 1581, 1609, 1606, 1580, 1605, 1606, 1580, 1609, 1606, 1605, 1610, 1606, 1605, 1609, 1610, 1605, 1605, 1576, 1582, 1610, 1578, 1580, 1610, 1578, 1580, 1609, 1578, 1582, 1610, 1578, 1582, 1609, 1578, 1605, 1610, 1578, 1605, 1609, 1580, 1605, 1610, 1580, 1581, 1609, 1580, 1605, 1609, 1587, 1582, 1609, 1589, 1581, 1610, 1588, 1581, 1610, 1590, 1581, 1610, 1604, 1580, 1610, 1604, 1605, 1610, 1610, 1581, 1610, 1610, 1580, 1610, 1610, 1605, 1610, 1605, 1605, 1610, 1602, 1605, 1610, 1606, 1581, 1610, 1593, 1605, 1610, 1603, 1605, 1610, 1606, 1580, 1581, 1605, 1582, 1610, 1604, 1580, 1605, 1603, 1605, 1605, 1580, 1581, 1610, 1581, 1580, 1610, 1605, 1580, 1610, 1601, 1605, 1610, 1576, 1581, 1610, 1587, 1582, 1610, 1606, 1580, 1610, 1589, 1604, 1746, 1602, 1604, 1746, 1575, 1604, 1604, 1607, 1575, 1603, 1576, 1585, 1605, 1581, 1605, 1583, 1589, 1604, 1593, 1605, 1585, 1587, 1608, 1604, 1593, 1604, 1610, 1607, 1608, 1587, 1604, 1605, 1589, 1604, 1609, 17, 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, 7, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1585, 1740, 1575, 1604, 44, 12289, 12290, 58, 33, 63, 12310, 12311, 8230, 8229, 8212, 8211, 95, 123, 125, 12308, 12309, 12304, 12305, 12298, 12299, 12300, 12301, 12302, 12303, 91, 93, 8254, 35, 38, 42, 45, 60, 62, 92, 36, 37, 64, 32, 1611, 1600, 1611, 32, 1612, 32, 1613, 32, 1614, 1600, 1614, 32, 1615, 1600, 1615, 32, 1616, 1600, 1616, 32, 1617, 1600, 1617, 32, 1618, 1600, 1618, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1610, 1604, 1570, 1604, 1571, 1604, 1573, 1604, 1575, 34, 39, 47, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 94, 124, 126, 10629, 10630, 12539, 12449, 12451, 12453, 12455, 12457, 12515, 12517, 12519, 12483, 12540, 12531, 12441, 12442, 12644, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 162, 163, 172, 175, 166, 165, 8361, 9474, 8592, 8593, 8594, 8595, 9632, 9675, 55297, 56360, 55297, 56361, 55297, 56362, 55297, 56363, 55297, 56364, 55297, 56365, 55297, 56366, 55297, 56367, 55297, 56368, 55297, 56369, 55297, 56370, 55297, 56371, 55297, 56372, 55297, 56373, 55297, 56374, 55297, 56375, 55297, 56376, 55297, 56377, 55297, 56378, 55297, 56379, 55297, 56380, 55297, 56381, 55297, 56382, 55297, 56383, 55297, 56384, 55297, 56385, 55297, 56386, 55297, 56387, 55297, 56388, 55297, 56389, 55297, 56390, 55297, 56391, 55297, 56392, 55297, 56393, 55297, 56394, 55297, 56395, 55297, 56396, 55297, 56397, 55297, 56398, 55297, 56399, 55297, 56536, 55297, 56537, 55297, 56538, 55297, 56539, 55297, 56540, 55297, 56541, 55297, 56542, 55297, 56543, 55297, 56544, 55297, 56545, 55297, 56546, 55297, 56547, 55297, 56548, 55297, 56549, 55297, 56550, 55297, 56551, 55297, 56552, 55297, 56553, 55297, 56554, 55297, 56555, 55297, 56556, 55297, 56557, 55297, 56558, 55297, 56559, 55297, 56560, 55297, 56561, 55297, 56562, 55297, 56563, 55297, 56564, 55297, 56565, 55297, 56566, 55297, 56567, 55297, 56568, 55297, 56569, 55297, 56570, 55297, 56571, 55299, 56512, 55299, 56513, 55299, 56514, 55299, 56515, 55299, 56516, 55299, 56517, 55299, 56518, 55299, 56519, 55299, 56520, 55299, 56521, 55299, 56522, 55299, 56523, 55299, 56524, 55299, 56525, 55299, 56526, 55299, 56527, 55299, 56528, 55299, 56529, 55299, 56530, 55299, 56531, 55299, 56532, 55299, 56533, 55299, 56534, 55299, 56535, 55299, 56536, 55299, 56537, 55299, 56538, 55299, 56539, 55299, 56540, 55299, 56541, 55299, 56542, 55299, 56543, 55299, 56544, 55299, 56545, 55299, 56546, 55299, 56547, 55299, 56548, 55299, 56549, 55299, 56550, 55299, 56551, 55299, 56552, 55299, 56553, 55299, 56554, 55299, 56555, 55299, 56556, 55299, 56557, 55299, 56558, 55299, 56559, 55299, 56560, 55299, 56561, 55299, 56562, 55300, 56473, 55300, 56506, 55300, 56475, 55300, 56506, 55300, 56485, 55300, 56506, 55300, 56625, 55300, 56615, 55300, 56626, 55300, 56615, 55300, 57159, 55300, 57150, 55300, 57159, 55300, 57175, 55301, 56505, 55301, 56506, 55301, 56505, 55301, 56496, 55301, 56505, 55301, 56509, 55301, 56760, 55301, 56751, 55301, 56761, 55301, 56751, 55302, 56512, 55302, 56513, 55302, 56514, 55302, 56515, 55302, 56516, 55302, 56517, 55302, 56518, 55302, 56519, 55302, 56520, 55302, 56521, 55302, 56522, 55302, 56523, 55302, 56524, 55302, 56525, 55302, 56526, 55302, 56527, 55302, 56528, 55302, 56529, 55302, 56530, 55302, 56531, 55302, 56532, 55302, 56533, 55302, 56534, 55302, 56535, 55302, 56536, 55302, 56537, 55302, 56538, 55302, 56539, 55302, 56540, 55302, 56541, 55302, 56542, 55302, 56543, 55348, 56663, 55348, 56677, 55348, 56664, 55348, 56677, 55348, 56671, 55348, 56686, 55348, 56671, 55348, 56687, 55348, 56671, 55348, 56688, 55348, 56671, 55348, 56689, 55348, 56671, 55348, 56690, 55348, 56761, 55348, 56677, 55348, 56762, 55348, 56677, 55348, 56763, 55348, 56686, 55348, 56764, 55348, 56686, 55348, 56763, 55348, 56687, 55348, 56764, 55348, 56687, 305, 567, 913, 914, 916, 917, 918, 919, 921, 922, 923, 924, 925, 926, 927, 929, 1012, 932, 934, 935, 936, 8711, 8706, 1013, 977, 1008, 981, 1009, 982, 988, 55354, 56610, 55354, 56611, 55354, 56612, 55354, 56613, 55354, 56614, 55354, 56615, 55354, 56616, 55354, 56617, 55354, 56618, 55354, 56619, 55354, 56620, 55354, 56621, 55354, 56622, 55354, 56623, 55354, 56624, 55354, 56625, 55354, 56626, 55354, 56627, 55354, 56628, 55354, 56629, 55354, 56630, 55354, 56631, 55354, 56632, 55354, 56633, 55354, 56634, 55354, 56635, 55354, 56636, 55354, 56637, 55354, 56638, 55354, 56639, 55354, 56640, 55354, 56641, 55354, 56642, 55354, 56643, 1646, 1697, 1647, 48, 46, 48, 44, 49, 44, 50, 44, 51, 44, 52, 44, 53, 44, 54, 44, 55, 44, 56, 44, 57, 44, 40, 65, 41, 40, 66, 41, 40, 67, 41, 40, 68, 41, 40, 69, 41, 40, 70, 41, 40, 71, 41, 40, 72, 41, 40, 73, 41, 40, 74, 41, 40, 75, 41, 40, 76, 41, 40, 77, 41, 40, 78, 41, 40, 79, 41, 40, 80, 41, 40, 81, 41, 40, 82, 41, 40, 83, 41, 40, 84, 41, 40, 85, 41, 40, 86, 41, 40, 87, 41, 40, 88, 41, 40, 89, 41, 40, 90, 41, 12308, 83, 12309, 67, 68, 87, 90, 72, 86, 83, 68, 83, 83, 80, 80, 86, 87, 67, 77, 67, 77, 68, 68, 74, 12411, 12363, 12467, 12467, 23383, 21452, 12487, 22810, 35299, 20132, 26144, 28961, 21069, 24460, 20877, 26032, 21021, 32066, 36009, 22768, 21561, 28436, 25237, 25429, 36938, 25351, 25171, 31105, 31354, 21512, 28288, 30003, 21106, 21942, 37197, 12308, 26412, 12309, 12308, 19977, 12309, 12308, 20108, 12309, 12308, 23433, 12309, 12308, 28857, 12309, 12308, 25171, 12309, 12308, 30423, 12309, 12308, 21213, 12309, 12308, 25943, 12309, 24471, 21487, 20029, 20024, 20033, 55360, 56610, 20320, 20411, 20482, 20602, 20633, 20687, 13470, 55361, 56890, 20820, 20836, 20855, 55361, 56604, 13497, 20839, 55361, 56651, 20887, 20900, 20172, 20908, 55396, 56799, 20995, 13535, 21051, 21062, 21111, 13589, 21253, 21254, 21321, 21338, 21363, 21373, 21375, 55362, 56876, 28784, 21450, 21471, 55362, 57187, 21483, 21489, 21510, 21662, 21560, 21576, 21608, 21666, 21750, 21776, 21843, 21859, 21892, 21931, 21939, 21954, 22294, 22295, 22097, 22132, 22766, 22478, 22516, 22541, 22411, 22578, 22577, 22700, 55365, 56548, 22770, 22775, 22790, 22818, 22882, 55365, 57000, 55365, 57066, 23020, 23067, 23079, 23000, 23142, 14062, 14076, 23304, 23358, 55366, 56776, 23491, 23512, 23539, 55366, 57112, 23551, 23558, 24403, 14209, 23648, 23744, 23693, 55367, 56804, 23875, 55367, 56806, 23918, 23915, 23932, 24033, 24034, 14383, 24061, 24104, 24125, 24169, 14434, 55368, 56707, 14460, 24240, 24243, 24246, 55400, 57234, 55368, 57137, 33281, 24354, 14535, 55372, 57016, 55384, 56794, 24418, 24427, 14563, 24474, 24525, 24535, 24569, 24705, 14650, 14620, 55369, 57044, 24775, 24904, 24908, 24954, 25010, 24996, 25007, 25054, 25104, 25115, 25181, 25265, 25300, 25424, 55370, 57100, 25405, 25340, 25448, 25475, 25572, 55370, 57329, 25634, 25541, 25513, 14894, 25705, 25726, 25757, 25719, 14956, 25964, 55372, 56330, 26083, 26360, 26185, 15129, 15112, 15076, 20882, 20885, 26368, 26268, 32941, 17369, 26401, 26462, 26451, 55372, 57283, 15177, 26618, 26501, 26706, 55373, 56429, 26766, 26655, 26900, 26946, 27043, 27114, 27304, 55373, 56995, 27355, 15384, 27425, 55374, 56487, 27476, 15438, 27506, 27551, 27579, 55374, 56973, 55367, 56587, 55374, 57082, 27726, 55375, 56508, 27839, 27853, 27751, 27926, 27966, 28009, 28024, 28037, 55375, 56606, 27956, 28207, 28270, 15667, 28359, 55375, 57041, 28153, 28526, 55375, 57182, 55375, 57230, 28614, 28729, 28699, 15766, 28746, 28797, 28791, 28845, 55361, 56613, 28997, 55376, 56931, 29084, 55376, 57259, 29224, 29264, 55377, 56840, 29312, 29333, 55377, 57141, 55378, 56340, 29562, 29579, 16044, 29605, 16056, 29767, 29788, 29829, 29898, 16155, 29988, 55379, 56374, 30014, 55379, 56466, 55368, 56735, 30224, 55379, 57249, 55379, 57272, 55380, 56388, 16380, 16392, 55380, 56563, 55380, 56562, 55380, 56601, 55380, 56627, 30494, 30495, 30603, 16454, 16534, 55381, 56349, 30798, 16611, 55381, 56870, 55381, 56986, 55381, 57029, 31211, 16687, 31306, 31311, 55382, 56700, 55382, 56999, 31470, 16898, 55382, 57259, 31686, 31689, 16935, 55383, 56448, 31954, 17056, 31976, 31971, 32000, 55383, 57222, 32099, 17153, 32199, 32258, 32325, 17204, 55384, 56872, 55384, 56903, 17241, 55384, 57049, 32634, 55384, 57150, 32661, 32762, 55385, 56538, 55385, 56611, 32864, 55385, 56744, 32880, 55372, 57183, 17365, 32946, 33027, 17419, 33086, 23221, 55385, 57255, 55385, 57269, 55372, 57235, 55372, 57244, 33284, 36766, 17515, 33425, 33419, 33437, 21171, 33457, 33459, 33469, 33510, 55386, 57148, 33565, 33635, 33709, 33571, 33725, 33767, 33619, 33738, 33740, 33756, 55387, 56374, 55387, 56683, 55387, 56533, 17707, 34033, 34035, 34070, 55388, 57290, 34148, 55387, 57132, 17757, 17761, 55387, 57265, 55388, 56530, 17771, 34384, 34407, 34409, 34473, 34440, 34574, 34530, 34600, 34667, 34694, 17879, 34785, 34817, 17913, 34912, 55389, 56935, 35031, 35038, 17973, 35066, 13499, 55390, 56494, 55390, 56678, 18110, 18119, 35488, 55391, 56488, 36011, 36033, 36123, 36215, 55391, 57135, 55362, 56324, 36299, 36284, 36336, 55362, 56542, 36564, 55393, 56786, 55393, 56813, 37012, 37105, 37137, 55393, 57134, 37147, 37432, 37591, 37592, 37500, 37881, 37909, 55394, 57338, 38283, 18837, 38327, 55395, 56695, 18918, 38595, 23986, 38691, 55396, 56645, 55396, 56858, 19054, 19062, 38880, 55397, 56330, 19122, 55397, 56470, 38953, 55397, 56758, 39138, 19251, 39209, 39335, 39362, 39422, 19406, 55398, 57136, 40000, 40189, 19662, 19693, 40295, 55400, 56526, 19704, 55400, 56581, 55400, 56846, 55400, 56977, 19798, 40702, 40709, 40719, 40726, 55401, 56832, 7838, 192, 193, 194, 195, 196, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 376, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 296, 298, 300, 302, 306, 308, 310, 313, 315, 317, 319, 321, 323, 325, 327, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 377, 379, 381, 579, 386, 388, 391, 395, 401, 502, 408, 573, 544, 416, 418, 420, 423, 428, 431, 435, 437, 440, 444, 503, 453, 452, 456, 455, 459, 458, 461, 463, 465, 467, 469, 471, 473, 475, 478, 480, 482, 484, 486, 488, 490, 492, 494, 498, 497, 500, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 548, 550, 552, 554, 556, 558, 560, 562, 571, 11390, 11391, 577, 582, 584, 586, 588, 590, 11375, 11373, 11376, 385, 390, 393, 394, 399, 42923, 403, 42924, 404, 42893, 42922, 407, 406, 42926, 11362, 42925, 412, 11374, 413, 415, 11364, 422, 425, 42929, 430, 580, 433, 434, 581, 439, 42930, 42928, 880, 882, 886, 1021, 1022, 1023, 938, 939, 975, 984, 986, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1017, 895, 1015, 1018, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1216, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43895, 43896, 43897, 43898, 43899, 43900, 43901, 43902, 43903, 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, 43920, 43921, 43922, 43923, 43924, 43925, 43926, 43927, 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, 43936, 43937, 43938, 43939, 43940, 43941, 43942, 43943, 43944, 43945, 43946, 43947, 43948, 43949, 43950, 43951, 43952, 43953, 43954, 43955, 43956, 43957, 43958, 43959, 43960, 43961, 43962, 43963, 43964, 43965, 43966, 43967, 5112, 5113, 5114, 5115, 5116, 5117, 42570, 42877, 11363, 7680, 7682, 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, 7828, 223, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922, 7924, 7926, 7928, 7930, 7932, 7934, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7960, 7961, 7962, 7963, 7964, 7965, 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, 8008, 8009, 8010, 8011, 8012, 8013, 8025, 8027, 8029, 8031, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8122, 8123, 8136, 8137, 8138, 8139, 8154, 8155, 8184, 8185, 8170, 8171, 8186, 8187, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8120, 8121, 8124, 8115, 8140, 8131, 8152, 8153, 8168, 8169, 8172, 8188, 8179, 8498, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8579, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, 11272, 11273, 11274, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, 11309, 11310, 11360, 570, 574, 11367, 11369, 11371, 11378, 11381, 11392, 11394, 11396, 11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 11418, 11420, 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 11450, 11452, 11454, 11456, 11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, 11482, 11484, 11486, 11488, 11490, 11499, 11501, 11506, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4295, 4301, 42560, 42562, 42564, 42566, 42568, 42572, 42574, 42576, 42578, 42580, 42582, 42584, 42586, 42588, 42590, 42592, 42594, 42596, 42598, 42600, 42602, 42604, 42624, 42626, 42628, 42630, 42632, 42634, 42636, 42638, 42640, 42642, 42644, 42646, 42648, 42650, 42786, 42788, 42790, 42792, 42794, 42796, 42798, 42802, 42804, 42806, 42808, 42810, 42812, 42814, 42816, 42818, 42820, 42822, 42824, 42826, 42828, 42830, 42832, 42834, 42836, 42838, 42840, 42842, 42844, 42846, 42848, 42850, 42852, 42854, 42856, 42858, 42860, 42862, 42873, 42875, 42878, 42880, 42882, 42884, 42886, 42891, 42896, 42898, 42902, 42904, 42906, 42908, 42910, 42912, 42914, 42916, 42918, 42920, 42932, 42934, 42931, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 55297, 56320, 55297, 56321, 55297, 56322, 55297, 56323, 55297, 56324, 55297, 56325, 55297, 56326, 55297, 56327, 55297, 56328, 55297, 56329, 55297, 56330, 55297, 56331, 55297, 56332, 55297, 56333, 55297, 56334, 55297, 56335, 55297, 56336, 55297, 56337, 55297, 56338, 55297, 56339, 55297, 56340, 55297, 56341, 55297, 56342, 55297, 56343, 55297, 56344, 55297, 56345, 55297, 56346, 55297, 56347, 55297, 56348, 55297, 56349, 55297, 56350, 55297, 56351, 55297, 56352, 55297, 56353, 55297, 56354, 55297, 56355, 55297, 56356, 55297, 56357, 55297, 56358, 55297, 56359, 55297, 56496, 55297, 56497, 55297, 56498, 55297, 56499, 55297, 56500, 55297, 56501, 55297, 56502, 55297, 56503, 55297, 56504, 55297, 56505, 55297, 56506, 55297, 56507, 55297, 56508, 55297, 56509, 55297, 56510, 55297, 56511, 55297, 56512, 55297, 56513, 55297, 56514, 55297, 56515, 55297, 56516, 55297, 56517, 55297, 56518, 55297, 56519, 55297, 56520, 55297, 56521, 55297, 56522, 55297, 56523, 55297, 56524, 55297, 56525, 55297, 56526, 55297, 56527, 55297, 56528, 55297, 56529, 55297, 56530, 55297, 56531, 55299, 56448, 55299, 56449, 55299, 56450, 55299, 56451, 55299, 56452, 55299, 56453, 55299, 56454, 55299, 56455, 55299, 56456, 55299, 56457, 55299, 56458, 55299, 56459, 55299, 56460, 55299, 56461, 55299, 56462, 55299, 56463, 55299, 56464, 55299, 56465, 55299, 56466, 55299, 56467, 55299, 56468, 55299, 56469, 55299, 56470, 55299, 56471, 55299, 56472, 55299, 56473, 55299, 56474, 55299, 56475, 55299, 56476, 55299, 56477, 55299, 56478, 55299, 56479, 55299, 56480, 55299, 56481, 55299, 56482, 55299, 56483, 55299, 56484, 55299, 56485, 55299, 56486, 55299, 56487, 55299, 56488, 55299, 56489, 55299, 56490, 55299, 56491, 55299, 56492, 55299, 56493, 55299, 56494, 55299, 56495, 55299, 56496, 55299, 56497, 55299, 56498, 55302, 56480, 55302, 56481, 55302, 56482, 55302, 56483, 55302, 56484, 55302, 56485, 55302, 56486, 55302, 56487, 55302, 56488, 55302, 56489, 55302, 56490, 55302, 56491, 55302, 56492, 55302, 56493, 55302, 56494, 55302, 56495, 55302, 56496, 55302, 56497, 55302, 56498, 55302, 56499, 55302, 56500, 55302, 56501, 55302, 56502, 55302, 56503, 55302, 56504, 55302, 56505, 55302, 56506, 55302, 56507, 55302, 56508, 55302, 56509, 55302, 56510, 55302, 56511, 55354, 56576, 55354, 56577, 55354, 56578, 55354, 56579, 55354, 56580, 55354, 56581, 55354, 56582, 55354, 56583, 55354, 56584, 55354, 56585, 55354, 56586, 55354, 56587, 55354, 56588, 55354, 56589, 55354, 56590, 55354, 56591, 55354, 56592, 55354, 56593, 55354, 56594, 55354, 56595, 55354, 56596, 55354, 56597, 55354, 56598, 55354, 56599, 55354, 56600, 55354, 56601, 55354, 56602, 55354, 56603, 55354, 56604, 55354, 56605, 55354, 56606, 55354, 56607, 55354, 56608, 55354, 56609, }; static const utf8proc_uint16_t utf8proc_stage1table[] = { 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, 5888, 6144, 6400, 6656, 6912, 7168, 7424, 7680, 7936, 8192, 8448, 8704, 8960, 9216, 9472, 9728, 9984, 10240, 10496, 10752, 11008, 11264, 11520, 11776, 12032, 12288, 12544, 12800, 13056, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13568, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13824, 14080, 13312, 13312, 13312, 14336, 13312, 14592, 14848, 15104, 15360, 15616, 15872, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 17920, 18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18688, 18944, 19200, 19456, 19712, 19968, 20224, 20480, 20736, 20992, 21248, 21504, 21760, 22016, 22272, 22528, 22784, 23040, 23296, 23552, 23808, 24064, 23808, 24320, 24576, 24832, 25088, 25344, 25600, 25856, 26112, 26368, 23808, 26624, 23808, 26880, 27136, 23808, 23808, 27392, 27392, 27392, 27648, 27904, 28160, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 27392, 27392, 27392, 27392, 28416, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 27392, 27392, 28672, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 27392, 27392, 28928, 29184, 23808, 23808, 23808, 29440, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 29696, 13312, 13312, 29952, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 13312, 30208, 30464, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 30720, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 30976, 31232, 31488, 31744, 32000, 32256, 32512, 32768, 10240, 10240, 33024, 23808, 23808, 23808, 23808, 23808, 33280, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 33536, 33792, 23808, 23808, 23808, 23808, 34048, 23808, 34304, 34560, 34816, 35072, 35328, 35584, 35840, 36096, 36352, 36608, 23808, 23808, 23808, 23808, 23808, 23808, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 36864, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 37120, 37376, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 37632, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 37888, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 38144, 38400, 38656, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 38912, 39168, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 39424, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 39424, }; static const utf8proc_uint16_t utf8proc_stage2table[] = { 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 3, 5, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 3, 8, 9, 9, 10, 11, 10, 9, 9, 12, 13, 9, 14, 15, 16, 15, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 15, 9, 18, 19, 20, 9, 9, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 12, 9, 13, 47, 48, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 12, 75, 13, 75, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 76, 9, 11, 11, 11, 11, 77, 9, 78, 77, 79, 80, 75, 81, 77, 82, 83, 84, 85, 86, 87, 88, 9, 9, 89, 90, 91, 92, 93, 94, 95, 9, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 75, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 75, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 214, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 214, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 214, 214, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 214, 340, 341, 342, 214, 343, 340, 340, 340, 340, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 214, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 214, 214, 214, 214, 214, 214, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 214, 482, 483, 214, 484, 214, 485, 486, 214, 214, 214, 487, 488, 214, 489, 214, 490, 491, 214, 492, 493, 494, 495, 496, 214, 214, 497, 214, 498, 499, 214, 214, 500, 214, 214, 214, 214, 214, 214, 214, 501, 214, 214, 502, 214, 214, 503, 214, 214, 214, 504, 505, 506, 507, 508, 509, 214, 214, 214, 214, 214, 510, 214, 340, 214, 214, 214, 214, 214, 214, 214, 214, 511, 512, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 522, 523, 523, 523, 523, 523, 523, 523, 47, 47, 47, 47, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, 523, 47, 47, 47, 47, 47, 47, 524, 525, 526, 527, 528, 529, 47, 47, 530, 531, 532, 533, 534, 47, 47, 47, 47, 47, 47, 47, 522, 47, 523, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 540, 540, 548, 540, 549, 540, 550, 551, 552, 553, 553, 553, 553, 552, 554, 553, 553, 553, 553, 553, 555, 555, 556, 557, 558, 559, 560, 561, 553, 553, 553, 553, 562, 563, 553, 564, 565, 553, 553, 566, 566, 566, 566, 567, 553, 553, 553, 553, 540, 540, 540, 568, 569, 570, 571, 572, 573, 540, 553, 553, 553, 540, 540, 540, 553, 553, 574, 540, 540, 540, 553, 553, 553, 553, 540, 552, 553, 553, 540, 575, 576, 576, 575, 576, 576, 575, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 577, 578, 579, 580, 581, 47, 582, 583, 0, 0, 584, 585, 586, 587, 588, 589, 0, 0, 0, 0, 87, 590, 591, 592, 593, 594, 595, 0, 596, 0, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 75, 700, 701, 702, 703, 704, 214, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 540, 540, 540, 540, 540, 839, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 0, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 0, 0, 523, 1044, 1044, 1044, 1044, 1044, 1044, 0, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 0, 1044, 1084, 0, 0, 1085, 1085, 11, 0, 553, 540, 540, 540, 540, 553, 540, 540, 540, 1086, 553, 540, 540, 540, 540, 540, 540, 553, 553, 553, 553, 553, 553, 540, 540, 553, 540, 540, 1086, 1087, 540, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1103, 540, 553, 1103, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 0, 0, 0, 0, 1106, 1106, 1106, 1103, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1107, 1108, 1108, 1108, 1107, 1107, 1109, 1109, 1110, 10, 10, 1111, 15, 1112, 1085, 1085, 540, 540, 540, 540, 540, 540, 540, 540, 1113, 1114, 1115, 1112, 1116, 0, 1117, 1112, 1118, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1125, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1126, 1118, 1127, 1128, 1129, 1130, 1113, 1114, 1115, 1131, 1132, 1133, 1134, 1135, 553, 540, 540, 540, 540, 540, 553, 540, 540, 553, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 10, 1137, 1137, 1112, 1118, 1118, 1138, 1118, 1118, 1118, 1118, 1139, 1140, 1141, 1142, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1143, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1144, 1145, 1146, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1147, 1148, 1112, 1149, 540, 540, 540, 540, 540, 540, 540, 1108, 1085, 540, 540, 540, 540, 553, 540, 1125, 1125, 540, 540, 1085, 553, 540, 540, 553, 1118, 1118, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 1118, 1118, 1118, 1150, 1150, 1118, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 0, 1151, 1143, 1152, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 540, 553, 540, 540, 553, 540, 540, 553, 553, 553, 540, 553, 553, 540, 553, 540, 540, 540, 553, 540, 553, 540, 553, 540, 553, 540, 540, 0, 0, 1143, 1143, 1143, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1143, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1143, 1143, 1143, 1118, 1118, 1118, 1118, 1118, 1118, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 540, 540, 540, 540, 540, 540, 540, 553, 540, 1155, 1155, 77, 9, 9, 9, 1155, 0, 0, 0, 0, 0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 540, 540, 540, 540, 1157, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1157, 540, 540, 540, 1157, 540, 540, 540, 540, 540, 0, 0, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 553, 553, 553, 0, 0, 1158, 0, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 0, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1107, 553, 540, 540, 553, 540, 540, 553, 540, 540, 540, 553, 553, 553, 1128, 1129, 1130, 540, 540, 540, 553, 540, 540, 553, 553, 540, 540, 540, 540, 540, 1153, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1161, 1162, 1160, 1160, 1160, 1160, 1160, 1160, 1163, 1164, 1160, 1165, 1166, 1160, 1160, 1160, 1160, 1160, 1153, 1159, 1167, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 1168, 1159, 1159, 1160, 540, 553, 540, 540, 1153, 1153, 1153, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1160, 1160, 1153, 1153, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1177, 1179, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 0, 0, 1160, 1160, 1160, 1160, 0, 0, 1180, 1160, 1181, 1159, 1159, 1153, 1153, 1153, 1153, 0, 0, 1182, 1159, 0, 0, 1183, 1184, 1168, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 1186, 1187, 0, 1188, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1160, 1160, 1189, 1189, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1189, 1160, 1177, 0, 0, 0, 1153, 1153, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1192, 0, 1160, 1193, 0, 1160, 1160, 0, 0, 1180, 0, 1159, 1159, 1159, 1153, 1153, 0, 0, 0, 0, 1153, 1153, 0, 0, 1153, 1153, 1168, 0, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 1194, 1195, 1196, 1160, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1153, 1153, 1160, 1160, 1160, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 0, 0, 1180, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 0, 1153, 1153, 1159, 0, 1159, 1159, 1168, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1177, 1189, 0, 0, 0, 0, 0, 0, 0, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 0, 1153, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 0, 0, 1180, 1160, 1198, 1153, 1159, 1153, 1153, 1153, 1153, 0, 0, 1199, 1200, 0, 0, 1201, 1202, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 1203, 1204, 0, 0, 0, 0, 1205, 1206, 0, 1160, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1191, 1160, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1160, 1160, 1160, 0, 1207, 1160, 1208, 1160, 0, 0, 0, 1160, 1160, 0, 1160, 0, 1160, 1160, 0, 0, 0, 1160, 1160, 0, 0, 0, 1160, 1160, 1160, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 1209, 1159, 1153, 1159, 1159, 0, 0, 0, 1210, 1211, 1159, 0, 1212, 1213, 1214, 1168, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1190, 1190, 1190, 1085, 1085, 1085, 1085, 1085, 1085, 1189, 1085, 0, 0, 0, 0, 0, 1153, 1159, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1160, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 0, 1216, 1153, 1217, 0, 1153, 1153, 1153, 1168, 0, 0, 0, 0, 0, 0, 0, 1218, 1219, 0, 1160, 1160, 1160, 0, 0, 0, 0, 0, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1191, 1160, 1153, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 0, 0, 1180, 1160, 1159, 1221, 1222, 1159, 1223, 1159, 1159, 0, 1224, 1225, 1226, 0, 1227, 1228, 1153, 1168, 0, 0, 0, 0, 0, 0, 0, 1229, 1230, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1168, 1168, 1160, 1231, 1159, 1159, 1153, 1153, 1153, 1153, 0, 1232, 1233, 1159, 0, 1234, 1235, 1236, 1168, 1237, 1191, 0, 0, 0, 0, 1160, 1160, 1160, 1238, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1160, 1160, 1160, 1153, 1153, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1239, 0, 0, 0, 0, 1240, 1159, 1159, 1153, 1153, 1153, 0, 1153, 0, 1159, 1241, 1242, 1159, 1243, 1244, 1245, 1246, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 1159, 1159, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1153, 340, 1247, 1153, 1153, 1153, 1153, 1248, 1248, 1168, 0, 0, 0, 0, 11, 340, 340, 340, 340, 340, 340, 523, 1153, 1249, 1249, 1249, 1249, 1153, 1153, 1153, 1044, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1044, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 0, 340, 0, 0, 340, 340, 0, 340, 0, 0, 340, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 0, 340, 340, 340, 340, 340, 340, 340, 0, 340, 340, 340, 0, 340, 0, 340, 0, 0, 340, 340, 0, 340, 340, 340, 340, 1153, 340, 1251, 1153, 1153, 1153, 1153, 1252, 1252, 0, 1153, 1153, 340, 0, 0, 340, 340, 340, 340, 340, 0, 523, 0, 1253, 1253, 1253, 1253, 1153, 1153, 0, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 0, 1254, 1255, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 838, 1191, 1191, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1256, 1044, 1044, 1044, 1044, 1044, 1044, 838, 1044, 838, 1191, 1191, 553, 553, 838, 838, 838, 838, 838, 838, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 838, 553, 838, 553, 838, 1258, 1259, 1260, 12, 13, 1159, 1159, 340, 340, 340, 1261, 340, 340, 340, 340, 0, 340, 340, 340, 340, 1262, 340, 340, 340, 340, 1263, 340, 340, 340, 340, 1264, 340, 340, 340, 340, 1265, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1266, 340, 340, 340, 0, 0, 0, 0, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1268, 1268, 1268, 1268, 1153, 1159, 1268, 1276, 540, 540, 1168, 1044, 540, 540, 1160, 340, 340, 340, 340, 1153, 1153, 1153, 1153, 1153, 1153, 1277, 1153, 1153, 1153, 1153, 0, 1153, 1153, 1153, 1153, 1278, 1153, 1153, 1153, 1153, 1279, 1153, 1153, 1153, 1153, 1280, 1153, 1153, 1153, 1153, 1281, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1282, 1153, 1153, 1153, 0, 838, 838, 838, 838, 838, 838, 838, 1191, 553, 1191, 1191, 1191, 1191, 1191, 1191, 0, 838, 838, 1177, 1044, 1044, 1044, 1044, 1191, 1191, 1191, 1191, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1283, 1284, 1160, 1160, 1160, 1160, 1285, 1285, 1153, 1286, 1153, 1153, 1159, 1153, 1153, 1153, 1153, 1153, 1180, 1285, 1168, 1168, 1159, 1159, 1153, 1153, 1160, 1178, 1178, 1250, 1250, 1178, 1178, 1178, 1178, 1178, 1178, 1044, 1044, 1044, 1177, 1177, 1177, 1160, 1160, 1160, 1160, 340, 1160, 1159, 1159, 1153, 1153, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1160, 1285, 1285, 1285, 1160, 1160, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1285, 1159, 1153, 1153, 1285, 1285, 1285, 1285, 1285, 1285, 553, 1160, 1285, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1285, 1285, 1285, 1153, 1191, 1191, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 0, 1325, 0, 0, 0, 0, 0, 1326, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1044, 1327, 340, 340, 340, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1329, 1330, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 540, 540, 540, 1177, 1044, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 77, 77, 77, 77, 77, 1085, 77, 1085, 1085, 77, 0, 0, 0, 0, 0, 0, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 0, 0, 1419, 1420, 1421, 1422, 1423, 1424, 0, 0, 1084, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1044, 1044, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1425, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1259, 1260, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 1044, 1044, 1044, 1426, 1426, 1426, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1153, 1153, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1168, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 0, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 574, 574, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1153, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1168, 1153, 1177, 1177, 1044, 1179, 1177, 1177, 1177, 1189, 340, 540, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 0, 0, 0, 0, 0, 0, 1428, 1428, 1428, 1428, 1428, 1428, 1429, 1428, 1428, 1428, 1428, 574, 574, 574, 81, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1179, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1087, 1160, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 340, 1160, 340, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 1153, 1153, 1159, 1159, 1159, 0, 0, 0, 0, 1159, 1159, 1153, 1159, 1159, 1159, 1159, 1159, 1159, 1086, 540, 553, 0, 0, 0, 0, 1085, 0, 0, 0, 1428, 1428, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1190, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 540, 553, 1159, 1159, 1153, 0, 0, 1177, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1153, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 0, 1168, 1285, 1153, 1285, 1285, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 1159, 1159, 1153, 1153, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 553, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1179, 1177, 1177, 1177, 1177, 1177, 1177, 0, 0, 540, 540, 540, 540, 540, 553, 553, 553, 553, 553, 553, 540, 540, 553, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1153, 1153, 1159, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1160, 1160, 1440, 1441, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1180, 1442, 1153, 1153, 1153, 1153, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 540, 553, 540, 540, 540, 540, 540, 540, 540, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 0, 0, 0, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1153, 1453, 1168, 1153, 1153, 1160, 1160, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1180, 1159, 1153, 1153, 1159, 1159, 1159, 1153, 1159, 1153, 1153, 1153, 1453, 1453, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1177, 1177, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1180, 0, 0, 0, 1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 1160, 1160, 1160, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 523, 523, 523, 523, 523, 523, 1044, 1044, 1454, 1455, 1456, 1457, 1458, 1458, 1459, 1460, 1461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 1177, 566, 553, 553, 553, 553, 553, 540, 540, 553, 553, 553, 553, 540, 1159, 566, 566, 566, 566, 566, 566, 566, 1160, 1160, 1160, 1160, 553, 1160, 1160, 1160, 1160, 1159, 1159, 540, 1160, 1160, 1159, 540, 540, 0, 0, 0, 0, 0, 0, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 1462, 1463, 1464, 523, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 523, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 523, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 1522, 1523, 1524, 214, 214, 1525, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 1526, 1527, 1528, 1529, 1492, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 540, 540, 553, 540, 540, 540, 540, 540, 540, 540, 553, 540, 540, 576, 1562, 553, 555, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 552, 1087, 1087, 553, 0, 540, 575, 553, 540, 553, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 214, 214, 1719, 214, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 0, 0, 1838, 1839, 1840, 1841, 1842, 1843, 0, 0, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 0, 0, 1882, 1883, 1884, 1885, 1886, 1887, 0, 0, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 0, 1896, 0, 1897, 0, 1898, 0, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 0, 0, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 0, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 0, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 0, 0, 2012, 2013, 2014, 2015, 2016, 2017, 0, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 0, 0, 2037, 2038, 2039, 0, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 0, 2049, 2050, 2051, 2052, 2051, 2051, 2051, 2053, 2051, 2051, 2051, 81, 2054, 2055, 2056, 2057, 1084, 2058, 1084, 1084, 1084, 1084, 9, 2059, 2060, 2061, 2062, 2060, 2060, 2061, 2062, 2060, 9, 9, 9, 9, 2063, 2064, 2065, 9, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 76, 10, 10, 10, 2073, 2074, 9, 2075, 2076, 9, 80, 92, 9, 2077, 9, 2078, 48, 48, 9, 9, 9, 2079, 12, 13, 2080, 2081, 2082, 9, 9, 9, 9, 9, 9, 9, 9, 75, 9, 48, 9, 9, 2083, 9, 9, 9, 9, 9, 9, 9, 2051, 81, 81, 81, 81, 81, 0, 2084, 2085, 2086, 2087, 81, 81, 81, 81, 81, 81, 2088, 2089, 0, 0, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 0, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 2130, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1189, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 566, 566, 540, 540, 540, 540, 566, 566, 566, 540, 540, 839, 839, 839, 839, 540, 839, 839, 839, 566, 566, 540, 553, 540, 566, 566, 553, 553, 553, 553, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2131, 2132, 2133, 2134, 77, 2135, 2136, 2137, 77, 2138, 2139, 2140, 2140, 2140, 2141, 2142, 2143, 2143, 2144, 2145, 77, 2146, 2147, 77, 75, 2148, 2149, 2150, 2150, 2150, 77, 77, 2151, 2152, 2153, 77, 2154, 77, 2155, 77, 2154, 77, 2156, 2157, 2158, 2133, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 1085, 2171, 2172, 2173, 2174, 2175, 2176, 75, 75, 75, 75, 2177, 2178, 2160, 2170, 2179, 77, 75, 1085, 77, 2180, 1191, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 1426, 1426, 2229, 2230, 2231, 1426, 1426, 1426, 2229, 2232, 77, 77, 0, 0, 0, 0, 2233, 75, 2234, 75, 2235, 77, 77, 77, 77, 77, 2236, 2237, 77, 77, 77, 77, 75, 77, 77, 75, 77, 77, 75, 77, 77, 77, 77, 77, 77, 77, 2238, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 2239, 2240, 2241, 2242, 77, 2243, 77, 2244, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1109, 75, 75, 75, 75, 1109, 1109, 1109, 1109, 75, 75, 1109, 75, 2245, 2245, 2246, 2247, 75, 75, 75, 2248, 2249, 2245, 2250, 2251, 2245, 75, 75, 75, 2245, 14, 84, 75, 2245, 2245, 75, 75, 75, 2245, 2245, 2245, 2245, 75, 2245, 2245, 2245, 2245, 2252, 2253, 2254, 2255, 75, 75, 75, 75, 2245, 2256, 2257, 2245, 2258, 2259, 2245, 2245, 2245, 75, 75, 75, 75, 75, 2245, 75, 2245, 2260, 2245, 2245, 2245, 2245, 2261, 2245, 2262, 2263, 2264, 2245, 2265, 2266, 2267, 2245, 2245, 2245, 2268, 75, 75, 75, 75, 2245, 2245, 2245, 2245, 75, 75, 75, 75, 75, 75, 75, 75, 75, 2245, 2269, 2270, 2271, 75, 2272, 2273, 2245, 2245, 2245, 2245, 2245, 2245, 75, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2245, 2245, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2245, 2245, 2245, 75, 75, 2245, 2245, 2301, 2302, 75, 75, 75, 75, 75, 2245, 75, 75, 75, 75, 75, 75, 75, 75, 75, 2303, 2245, 75, 75, 2245, 2245, 2304, 2305, 2245, 2306, 2307, 2308, 2309, 2310, 2245, 2245, 2311, 2312, 2313, 2314, 2245, 2245, 2245, 75, 75, 75, 75, 75, 2245, 2245, 75, 75, 75, 75, 75, 75, 75, 75, 75, 2245, 2245, 2245, 2245, 2245, 75, 75, 2245, 2245, 75, 75, 75, 75, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2315, 2316, 2317, 2318, 2245, 2245, 2245, 2245, 2245, 2245, 2319, 2320, 2321, 2322, 75, 75, 2245, 2245, 2323, 2323, 2245, 2323, 2323, 2245, 2245, 2323, 2323, 2323, 2245, 2323, 2245, 2323, 77, 77, 77, 77, 77, 77, 77, 77, 12, 13, 12, 13, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 77, 77, 77, 77, 2245, 2245, 77, 77, 77, 77, 77, 77, 77, 2324, 2325, 77, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1085, 1109, 1085, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 838, 77, 1085, 1085, 1085, 1085, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 1109, 1109, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1109, 1109, 1109, 1109, 1109, 1109, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 75, 75, 75, 75, 1109, 1109, 75, 77, 77, 77, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 2465, 77, 77, 77, 77, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 1085, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 2466, 77, 2466, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 1085, 2467, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1085, 1085, 838, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 1085, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2245, 1109, 75, 2323, 2323, 12, 13, 75, 2323, 2323, 75, 2323, 2323, 2323, 1109, 1109, 1109, 75, 1109, 2245, 2245, 2323, 2323, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 2323, 1109, 75, 1109, 2323, 2323, 2323, 2323, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 1109, 1109, 75, 75, 1109, 75, 1109, 75, 1109, 1109, 75, 75, 1109, 1109, 75, 75, 1109, 1109, 75, 75, 1109, 1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 75, 1109, 1109, 75, 1109, 75, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 1259, 1260, 1259, 1260, 12, 13, 75, 1109, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2245, 2245, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 2323, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 2323, 2323, 2323, 2323, 1109, 1109, 1109, 2323, 1109, 1109, 1109, 1109, 2323, 2323, 2323, 2245, 2245, 75, 2245, 2245, 75, 75, 12, 13, 1259, 1260, 2323, 1109, 1109, 1109, 1109, 2323, 1109, 2323, 2323, 2323, 1109, 1109, 2323, 2323, 1109, 75, 1109, 1109, 75, 75, 75, 75, 75, 75, 2323, 2245, 2245, 2245, 2245, 2245, 75, 75, 12, 13, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 2469, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 1109, 2245, 2245, 2323, 2245, 75, 75, 2245, 75, 2245, 1109, 75, 2245, 75, 2245, 2245, 2323, 2323, 75, 75, 75, 75, 1109, 2323, 2323, 1109, 1109, 1109, 1109, 1109, 1109, 2245, 2245, 2245, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 75, 75, 75, 75, 75, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 75, 75, 1109, 1109, 2245, 2245, 2245, 2245, 1109, 2245, 2245, 75, 75, 2245, 2470, 2471, 2472, 75, 1109, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2245, 2245, 2323, 2323, 2245, 2245, 2245, 2245, 2245, 2245, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 1109, 1109, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 1109, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2323, 2323, 2245, 2245, 2245, 2245, 2323, 2323, 2323, 2323, 2323, 2323, 2245, 2245, 2245, 2245, 1109, 1109, 1109, 1109, 1109, 2473, 2474, 2245, 1109, 1109, 1109, 2323, 2323, 2323, 2323, 2323, 1109, 1109, 1109, 1109, 1109, 2323, 2323, 2245, 75, 75, 75, 75, 2323, 1109, 1109, 75, 2323, 2323, 2323, 2323, 2323, 1109, 2323, 75, 75, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 77, 77, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1085, 1085, 1109, 1109, 1109, 1109, 1109, 1109, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 0, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 0, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 214, 2586, 2587, 214, 2588, 2589, 214, 214, 214, 214, 214, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 214, 77, 77, 1085, 77, 77, 1085, 2694, 2695, 2696, 2697, 540, 540, 540, 2698, 2699, 0, 0, 0, 0, 0, 9, 9, 9, 9, 1427, 9, 9, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 0, 2738, 0, 0, 0, 0, 0, 2739, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 2740, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 9, 9, 80, 92, 80, 92, 9, 9, 9, 80, 92, 9, 80, 92, 1428, 1428, 1428, 1428, 9, 1428, 1428, 1428, 9, 1084, 9, 9, 1084, 9, 80, 92, 9, 9, 80, 92, 12, 13, 12, 13, 12, 13, 12, 13, 9, 9, 9, 9, 9, 522, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1429, 1429, 9, 9, 9, 9, 1084, 9, 2062, 1428, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1085, 1085, 1085, 1085, 2741, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 2957, 1428, 1428, 1428, 1085, 1179, 1160, 2229, 1259, 1260, 1259, 1260, 1259, 1260, 1259, 1260, 1259, 1260, 1085, 1085, 1259, 1260, 1259, 1260, 1259, 1260, 1259, 1260, 1429, 2958, 2959, 2959, 1085, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2960, 1087, 552, 1086, 2961, 2961, 1429, 1179, 1179, 1179, 1179, 1179, 2962, 1085, 2963, 2964, 2965, 1179, 1160, 1428, 1085, 77, 0, 1160, 1160, 1160, 1160, 1160, 2966, 1160, 1160, 1160, 1160, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 1160, 2991, 2992, 2993, 2994, 2995, 2996, 1160, 1160, 1160, 1160, 1160, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 3012, 1160, 1160, 0, 0, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 1429, 1160, 1160, 1160, 1160, 1160, 3020, 1160, 1160, 1160, 1160, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 1160, 3045, 3046, 3047, 3048, 3049, 3050, 1160, 1160, 1160, 1160, 1160, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 3066, 3067, 3068, 3069, 1160, 3070, 1160, 1160, 3071, 3072, 3073, 3074, 1428, 1179, 3075, 3076, 3077, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 0, 1191, 1191, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 0, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 1191, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 0, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1179, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 523, 523, 523, 523, 523, 523, 1044, 1044, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1179, 1428, 1428, 1428, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 1160, 540, 839, 839, 839, 9, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 9, 522, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 540, 540, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 540, 540, 1044, 1044, 1044, 1044, 1044, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 522, 522, 522, 522, 522, 522, 522, 522, 522, 47, 47, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 214, 214, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 214, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 522, 3855, 3855, 3856, 3857, 3858, 214, 340, 3859, 3860, 3861, 3862, 214, 214, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 0, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 3896, 3897, 214, 340, 340, 340, 340, 1160, 1160, 1160, 1153, 1160, 1160, 1160, 1168, 1160, 1160, 1160, 1160, 1153, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1153, 1153, 1159, 77, 77, 1085, 1085, 0, 0, 0, 0, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191, 1189, 2159, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1428, 1428, 1428, 1428, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1168, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1160, 1160, 1160, 1160, 1160, 1160, 1177, 1177, 1177, 1160, 1177, 1160, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1153, 553, 553, 553, 1177, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 0, 0, 0, 1153, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1180, 1159, 1159, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1159, 1159, 1159, 1453, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 0, 1179, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 1177, 1177, 340, 1160, 1160, 1160, 1160, 1153, 523, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1178, 1160, 1160, 1160, 340, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1153, 1159, 1159, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1153, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1159, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 1177, 1177, 1177, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1179, 1160, 1160, 1160, 1160, 1160, 1160, 1191, 1191, 1191, 1160, 1285, 1153, 1285, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 540, 1160, 540, 540, 553, 1160, 1160, 540, 540, 1160, 1160, 1160, 1160, 1160, 540, 540, 1160, 540, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1179, 1177, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1153, 1153, 1159, 1159, 1177, 1177, 1160, 1179, 1179, 1159, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 3898, 214, 214, 214, 214, 214, 214, 214, 3855, 3899, 3900, 3901, 3902, 214, 214, 214, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1153, 1159, 1159, 1153, 1159, 1159, 1177, 1159, 1168, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 0, 0, 0, 0, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 0, 0, 0, 0, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4006, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4096, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4080, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4006, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4082, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 1160, 1160, 4251, 1160, 4252, 1160, 1160, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 1160, 4263, 1160, 4264, 1160, 1160, 4265, 4266, 1160, 1160, 1160, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4135, 4312, 4313, 4314, 4315, 4316, 4317, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4265, 4326, 4327, 4328, 4329, 4330, 4331, 0, 0, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4279, 4340, 4341, 4342, 4251, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4288, 4355, 4289, 4356, 4357, 4358, 4359, 4360, 4252, 4027, 4361, 4362, 4363, 4097, 4184, 4364, 4365, 4296, 4366, 4297, 4367, 4368, 4369, 4254, 4370, 4371, 4372, 4373, 4374, 4255, 4375, 4376, 4377, 4378, 4379, 4380, 4311, 4381, 4382, 4135, 4383, 4315, 4384, 4385, 4386, 4387, 4388, 4320, 4389, 4264, 4390, 4321, 4078, 4391, 4322, 4392, 4324, 4393, 4394, 4395, 4396, 4397, 4326, 4260, 4398, 4327, 4399, 4328, 4400, 3994, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4419, 4420, 4421, 4422, 4423, 0, 0, 0, 0, 0, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 0, 4450, 4451, 4452, 4453, 4454, 0, 4455, 0, 4456, 4457, 0, 4458, 4459, 0, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4607, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4608, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4929, 2959, 2958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 0, 0, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 1085, 0, 0, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 553, 553, 553, 553, 553, 553, 553, 540, 540, 5071, 5072, 5073, 5074, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 1428, 1428, 5091, 5092, 5093, 5093, 5093, 5093, 5094, 5094, 5094, 5095, 5096, 5097, 0, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 0, 5117, 5118, 5119, 5120, 0, 0, 0, 0, 5121, 5122, 5123, 1118, 5124, 0, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 0, 0, 81, 0, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 0, 0, 0, 5450, 5451, 5452, 5453, 5454, 5455, 0, 0, 5456, 5457, 5458, 5459, 5460, 5461, 0, 0, 5462, 5463, 5464, 5465, 5466, 5467, 0, 0, 5468, 5469, 5470, 0, 0, 0, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 0, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5485, 5485, 5485, 1085, 77, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 340, 1160, 1160, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 1160, 1160, 1160, 340, 340, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 0, 340, 340, 0, 340, 340, 1160, 340, 340, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 340, 1160, 0, 0, 340, 340, 1160, 340, 340, 1160, 340, 1160, 1160, 1160, 340, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 1044, 9, 1044, 0, 0, 0, 0, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1190, 1257, 1190, 1257, 1190, 1190, 1190, 1190, 1190, 1190, 1257, 1190, 1257, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 1191, 838, 1191, 838, 838, 838, 838, 838, 1191, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5487, 5487, 5487, 5487, 5487, 5487, 5486, 5486, 5486, 5486, 5486, 5486, 1427, 1427, 1220, 1427, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 77, 1427, 1427, 77, 838, 838, 0, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 77, 77, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 1160, 340, 340, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1257, 1257, 1257, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1426, 340, 340, 340, 340, 340, 340, 340, 340, 1426, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1177, 2229, 2229, 2229, 2229, 2229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 1160, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 0, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 0, 0, 0, 0, 0, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 5582, 5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 0, 0, 0, 0, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 1160, 340, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 340, 340, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 340, 1160, 340, 340, 340, 340, 340, 1160, 1160, 1160, 340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 340, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 340, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 340, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 340, 1160, 1160, 340, 1160, 1160, 340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 340, 1160, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 1156, 1156, 1106, 1156, 1106, 0, 0, 1156, 0, 1106, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1106, 1156, 1156, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 0, 1156, 1106, 0, 0, 0, 1156, 0, 0, 1156, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 1103, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1156, 5642, 5642, 5641, 5641, 5643, 5643, 5643, 5643, 5641, 1156, 1106, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 1106, 1106, 0, 0, 0, 0, 0, 5641, 5641, 5641, 5641, 5641, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 5641, 5641, 5641, 5641, 5641, 5641, 0, 0, 0, 9, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1156, 1156, 1106, 0, 0, 0, 0, 5643, 5641, 1106, 1156, 5641, 5641, 5641, 5641, 5643, 5643, 5643, 5641, 5641, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 0, 0, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5641, 5641, 5641, 5641, 5643, 5641, 5643, 5643, 5643, 5643, 1156, 1153, 1153, 1153, 0, 1153, 1153, 0, 0, 0, 0, 0, 1153, 553, 1153, 540, 1156, 1156, 1156, 1156, 0, 1156, 1156, 1156, 0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 0, 0, 0, 0, 540, 566, 553, 0, 0, 0, 0, 1168, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 0, 0, 0, 0, 0, 0, 0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 5641, 5641, 1103, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 5641, 5641, 5641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1106, 1156, 1156, 1106, 1106, 1106, 1156, 1106, 5644, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 540, 553, 0, 0, 0, 0, 5641, 5643, 5643, 5643, 5643, 1158, 1158, 1158, 1158, 1103, 1103, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1106, 1156, 1156, 1156, 1156, 1106, 1106, 1106, 1156, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1156, 1156, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 1156, 1156, 1106, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1156, 1156, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 0, 0, 5641, 5641, 5641, 5641, 5641, 5641, 5643, 5641, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 1156, 1106, 0, 0, 0, 0, 0, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 1106, 1156, 1106, 0, 0, 0, 0, 0, 0, 0, 1158, 1158, 1158, 1158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5641, 5641, 5641, 5643, 5641, 5641, 5643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 0, 0, 0, 0, 0, 0, 0, 5641, 5641, 5641, 5641, 5641, 5641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5747, 5747, 5748, 5747, 5747, 5747, 5747, 5747, 5748, 5747, 5747, 5748, 5748, 5748, 5747, 5747, 5748, 5747, 5747, 5747, 5748, 5748, 5747, 5748, 5748, 5747, 5747, 5748, 5748, 5748, 5748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1168, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5749, 5750, 5751, 5752, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5753, 1160, 1160, 1160, 1160, 1160, 5754, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1159, 1159, 1168, 5755, 1177, 1177, 5756, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 0, 0, 0, 0, 0, 540, 540, 540, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5757, 1153, 1153, 1153, 1153, 1159, 1153, 5758, 5759, 1153, 5760, 5761, 1168, 1168, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 340, 340, 340, 1160, 340, 340, 340, 340, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 1160, 340, 340, 340, 340, 1180, 1044, 1044, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1453, 1160, 1237, 1237, 1160, 1177, 1177, 1177, 1177, 1177, 1180, 1153, 1153, 1177, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1160, 1177, 1160, 1177, 1177, 1177, 0, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1159, 1159, 1153, 1453, 1180, 1153, 1177, 1177, 1177, 1177, 1177, 1177, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1177, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1180, 1168, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1153, 1153, 1159, 1159, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 0, 0, 1180, 1160, 5762, 1159, 1153, 1159, 1159, 1159, 1159, 0, 0, 5763, 1159, 0, 0, 5764, 5765, 1453, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 5766, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 0, 0, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1168, 1153, 1153, 1159, 1180, 1160, 1160, 1160, 1160, 1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 1177, 0, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5767, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 5768, 5769, 5770, 5771, 5772, 5773, 1153, 1153, 1159, 1168, 1180, 1160, 1160, 1177, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5774, 1159, 1159, 1153, 1153, 1153, 1153, 0, 0, 5775, 5776, 5777, 5778, 1153, 1153, 1159, 1168, 1180, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1160, 1160, 1160, 1160, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1159, 1168, 1153, 1177, 1177, 1177, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1159, 1153, 1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1453, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 1153, 1153, 1153, 1159, 1159, 1153, 1153, 1153, 1153, 1159, 1153, 1153, 1153, 1153, 1168, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1190, 1190, 1177, 1177, 1177, 1191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1153, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1153, 1168, 1153, 1153, 1153, 1153, 1159, 5843, 1153, 1153, 1153, 1153, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 1153, 1153, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 5843, 5843, 5843, 5843, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1153, 1168, 1177, 1177, 1177, 0, 1177, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 5844, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 0, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 5845, 1160, 1177, 1177, 1177, 1177, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 1044, 1044, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 0, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 1153, 1153, 1159, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 0, 0, 0, 1153, 0, 1153, 1153, 0, 1153, 1153, 1153, 1180, 1153, 1168, 1168, 5843, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 0, 1044, 1044, 1044, 1044, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 0, 0, 0, 1044, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 566, 566, 566, 566, 566, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 540, 540, 540, 540, 540, 540, 540, 1044, 1044, 1044, 1044, 1044, 838, 838, 838, 838, 523, 523, 523, 523, 1044, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 0, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1153, 1153, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 340, 340, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 1160, 340, 340, 340, 1160, 340, 340, 1160, 1160, 1160, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 340, 340, 340, 340, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 0, 0, 1191, 1153, 566, 1177, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 838, 1191, 838, 838, 838, 1191, 838, 838, 838, 1191, 1191, 1191, 838, 1191, 838, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 838, 1191, 1191, 1191, 1191, 1191, 838, 838, 838, 838, 1191, 838, 1191, 1191, 1191, 838, 838, 838, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 838, 838, 1191, 1191, 838, 838, 838, 838, 1191, 1191, 838, 838, 838, 1191, 1191, 838, 838, 838, 838, 1191, 1191, 1191, 1191, 1191, 838, 838, 838, 838, 838, 838, 1191, 838, 838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 838, 838, 1191, 838, 1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 838, 838, 838, 1191, 1191, 838, 838, 838, 1191, 838, 1191, 838, 1191, 838, 838, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 838, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 838, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 838, 838, 1191, 1191, 1191, 1191, 838, 838, 0, 0, 1191, 838, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 1191, 1191, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 5846, 5847, 1191, 838, 838, 1191, 838, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 566, 566, 566, 1191, 1191, 1191, 5857, 5858, 5859, 5860, 5861, 5862, 81, 81, 81, 81, 81, 81, 81, 81, 553, 553, 553, 553, 553, 553, 553, 553, 838, 838, 540, 540, 540, 540, 540, 553, 553, 838, 838, 838, 838, 838, 838, 1191, 1191, 838, 838, 1191, 1191, 1191, 1191, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1191, 1191, 838, 838, 540, 540, 540, 540, 1191, 1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 1191, 1191, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 5870, 838, 838, 838, 838, 838, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 838, 838, 838, 838, 838, 838, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 77, 1085, 1085, 1085, 77, 77, 77, 77, 1085, 77, 77, 77, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 77, 1085, 77, 77, 77, 1085, 1085, 77, 1085, 77, 77, 77, 1085, 77, 1085, 77, 1085, 77, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 1085, 77, 1085, 1085, 540, 540, 540, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1257, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5871, 2158, 2133, 5872, 2161, 2162, 5873, 2140, 2143, 5874, 5875, 2144, 2164, 2146, 5876, 2148, 2149, 2150, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 2154, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 0, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5904, 0, 5906, 2177, 0, 0, 5909, 0, 0, 5912, 5913, 0, 0, 5916, 5917, 5918, 5919, 0, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 0, 5933, 0, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 0, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5871, 2158, 0, 5872, 2161, 2162, 5873, 0, 0, 5874, 5875, 2144, 2164, 2146, 5876, 2148, 2149, 0, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 0, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5871, 2158, 0, 5872, 2161, 2162, 5873, 0, 2143, 5874, 5875, 2144, 2164, 0, 5876, 0, 0, 0, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 0, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5871, 2158, 2133, 5872, 2161, 2162, 5873, 2140, 2143, 5874, 5875, 2144, 2164, 2146, 5876, 2148, 2149, 2150, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 2154, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5871, 2158, 2133, 5872, 2161, 2162, 5873, 2140, 2143, 5874, 5875, 2144, 2164, 2146, 5876, 2148, 2149, 2150, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 2154, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5871, 2158, 2133, 5872, 2161, 2162, 5873, 2140, 2143, 5874, 5875, 2144, 2164, 2146, 5876, 2148, 2149, 2150, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 2154, 5884, 5885, 5886, 5887, 2160, 5888, 2139, 5889, 2170, 2179, 5890, 2145, 5891, 5892, 2165, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5904, 5905, 5906, 2177, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 2178, 5932, 5933, 5934, 2141, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954, 0, 0, 5955, 5956, 2174, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 2175, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 2173, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 2172, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 2175, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 2173, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 2172, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 5955, 5956, 2174, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 2175, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 2173, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 2172, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 0, 0, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 838, 838, 838, 838, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 838, 838, 838, 838, 838, 838, 838, 838, 1153, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 1153, 838, 838, 1044, 1044, 1044, 1044, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1153, 1153, 1153, 1153, 0, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 540, 540, 540, 540, 540, 540, 540, 0, 540, 540, 0, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 1106, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1106, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1106, 1156, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 1156, 1156, 1106, 1156, 1106, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1106, 1156, 1156, 1156, 1106, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1156, 1106, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 1106, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 1156, 0, 0, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 553, 553, 553, 553, 553, 553, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 540, 540, 540, 540, 540, 540, 1180, 0, 0, 0, 0, 0, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 0, 0, 0, 0, 1103, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6157, 6158, 6159, 6160, 0, 6161, 6162, 6163, 6164, 6165, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 0, 6158, 6159, 0, 6188, 0, 0, 6163, 0, 6165, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 0, 6176, 6177, 6178, 6179, 0, 6181, 0, 6183, 0, 0, 0, 0, 0, 0, 6159, 0, 0, 0, 0, 6163, 0, 6165, 0, 6167, 0, 6169, 6170, 6171, 0, 6173, 6174, 0, 6176, 0, 0, 6179, 0, 6181, 0, 6183, 0, 6185, 0, 6187, 0, 6158, 6159, 0, 6189, 0, 0, 6163, 6164, 6165, 6166, 0, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 0, 6176, 6177, 6178, 6179, 0, 6181, 6182, 6183, 6184, 0, 6186, 0, 6157, 6158, 6159, 6160, 6189, 6161, 6162, 6163, 6164, 6165, 0, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 0, 0, 0, 0, 0, 6190, 6191, 6192, 0, 6193, 6194, 6195, 6196, 6197, 0, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 1220, 1220, 0, 0, 0, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 0, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, 3616, 6284, 6285, 6286, 6287, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 6288, 6289, 0, 0, 0, 0, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 6290, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6292, 6293, 6294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 0, 0, 0, 0, 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346, 6347, 0, 0, 0, 0, 0, 0, 0, 6348, 6349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 1085, 1085, 2468, 1085, 1085, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 6350, 6350, 6350, 6350, 6350, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 1085, 1085, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 6351, 6351, 6351, 6351, 1085, 1085, 1085, 1085, 2468, 1085, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 1085, 2468, 2468, 2468, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 1085, 1085, 1085, 2468, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2467, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 77, 77, 77, 1085, 1085, 1085, 1085, 77, 77, 77, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 1085, 1085, 1085, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 2468, 2468, 1085, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 2468, 2468, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6352, 6353, 6354, 6355, 6356, 4273, 6357, 6358, 6359, 6360, 4274, 6361, 6362, 6363, 4275, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 4333, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 4338, 4276, 4277, 4339, 6385, 6386, 4084, 6387, 4278, 6388, 6389, 6390, 6391, 6391, 6391, 6392, 6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, 6406, 6407, 6408, 6409, 6409, 4341, 6410, 6411, 6412, 6413, 4280, 6414, 6415, 6416, 4237, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6442, 6443, 6444, 6445, 4080, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 4285, 6454, 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 4026, 6475, 6476, 6477, 6477, 6478, 6479, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 4286, 6493, 6494, 6495, 6496, 4353, 6496, 6497, 4288, 6498, 6499, 6500, 6501, 4289, 3999, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 4290, 6524, 6525, 6526, 6527, 6528, 6529, 4292, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 4027, 4361, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 4293, 6546, 6547, 6548, 6549, 4404, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 4097, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 4294, 4184, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 4365, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 4366, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 4368, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, 6610, 6611, 6612, 6612, 6613, 6614, 4370, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 4083, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 4376, 6629, 6630, 6631, 6632, 6633, 6634, 6634, 4377, 4406, 6635, 6636, 6637, 6638, 6639, 4045, 4379, 6640, 6641, 4305, 6642, 6643, 4259, 6644, 6645, 4309, 6646, 6647, 6648, 6649, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 4315, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6478, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 4101, 6705, 6706, 6707, 6708, 6709, 6710, 4318, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 4040, 6731, 6732, 6733, 6734, 6735, 6736, 4386, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6756, 4391, 4392, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 6768, 6769, 4393, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 4399, 4399, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 4400, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 0, 0, }; static const utf8proc_property_t utf8proc_properties[] = { {0, 0, 0, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false,false,false,false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_S, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_LF}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CR}, {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5093, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5084, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5096, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1, UINT16_MAX, 1, UINT16_MAX, 2784, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2, UINT16_MAX, 2, UINT16_MAX, 49, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3, UINT16_MAX, 3, UINT16_MAX, 704, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4, UINT16_MAX, 4, UINT16_MAX, 62, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5, UINT16_MAX, 5, UINT16_MAX, 2872, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6, UINT16_MAX, 6, UINT16_MAX, 782, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7, UINT16_MAX, 7, UINT16_MAX, 808, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8, UINT16_MAX, 8, UINT16_MAX, 111, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9, UINT16_MAX, 9, UINT16_MAX, 898, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 10, UINT16_MAX, 10, UINT16_MAX, 913, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 11, UINT16_MAX, 11, UINT16_MAX, 999, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 12, UINT16_MAX, 12, UINT16_MAX, 2890, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 13, UINT16_MAX, 13, UINT16_MAX, 160, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 14, UINT16_MAX, 14, UINT16_MAX, 205, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 15, UINT16_MAX, 15, UINT16_MAX, 2982, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 16, UINT16_MAX, 16, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 17, UINT16_MAX, 17, UINT16_MAX, 1087, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 18, UINT16_MAX, 18, UINT16_MAX, 1173, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 19, UINT16_MAX, 19, UINT16_MAX, 1257, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 20, UINT16_MAX, 20, UINT16_MAX, 254, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 21, UINT16_MAX, 21, UINT16_MAX, 3042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 22, UINT16_MAX, 22, UINT16_MAX, 1337, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 23, UINT16_MAX, 23, UINT16_MAX, 3122, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 24, UINT16_MAX, 24, UINT16_MAX, 303, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 25, UINT16_MAX, 25, UINT16_MAX, 1423, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1446, UINT16_MAX, 1446, 352, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1448, UINT16_MAX, 1448, 2818, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2767, UINT16_MAX, 2767, 401, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1449, UINT16_MAX, 1449, 743, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1450, UINT16_MAX, 1450, 414, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2792, UINT16_MAX, 2792, 2875, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1452, UINT16_MAX, 1452, 795, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1453, UINT16_MAX, 1453, 853, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1454, UINT16_MAX, 1454, 463, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1455, UINT16_MAX, 1455, 901, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1456, UINT16_MAX, 1456, 956, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1457, UINT16_MAX, 1457, 1043, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1458, UINT16_MAX, 1458, 2932, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1459, UINT16_MAX, 1459, 512, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1460, UINT16_MAX, 1460, 557, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1462, UINT16_MAX, 1462, 2994, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2781, UINT16_MAX, 2781, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1463, UINT16_MAX, 1463, 1130, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3260, UINT16_MAX, 3260, 1215, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1464, UINT16_MAX, 1464, 1296, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1465, UINT16_MAX, 1465, 606, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2863, UINT16_MAX, 2863, 3082, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1466, UINT16_MAX, 1466, 1380, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2880, UINT16_MAX, 2880, 3131, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3267, UINT16_MAX, 3267, 655, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2789, UINT16_MAX, 2789, 1466, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_NOBREAK, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1621, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 35, 35, 7102, UINT16_MAX, 7102, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8240, 50, UINT16_MAX, 50, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8243, 53, UINT16_MAX, 53, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8246, 56, UINT16_MAX, 56, UINT16_MAX, 3143, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8249, 59, UINT16_MAX, 59, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8252, 62, UINT16_MAX, 62, UINT16_MAX, 1537, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8255, 65, UINT16_MAX, 65, UINT16_MAX, 1579, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 66, UINT16_MAX, 66, UINT16_MAX, 1549, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8259, 69, UINT16_MAX, 69, UINT16_MAX, 2852, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8262, 72, UINT16_MAX, 72, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8265, 75, UINT16_MAX, 75, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8268, 78, UINT16_MAX, 78, UINT16_MAX, 3357, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8271, 81, UINT16_MAX, 81, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8274, 84, UINT16_MAX, 84, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8277, 87, UINT16_MAX, 87, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8280, 90, UINT16_MAX, 90, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8283, 93, UINT16_MAX, 93, UINT16_MAX, 2878, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 94, UINT16_MAX, 94, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8287, 97, UINT16_MAX, 97, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8290, 100, UINT16_MAX, 100, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8293, 103, UINT16_MAX, 103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8296, 106, UINT16_MAX, 106, UINT16_MAX, 3461, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8299, 109, UINT16_MAX, 109, UINT16_MAX, 1597, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8302, 112, UINT16_MAX, 112, UINT16_MAX, 1591, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 113, UINT16_MAX, 113, UINT16_MAX, 1585, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8306, 116, UINT16_MAX, 116, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8309, 119, UINT16_MAX, 119, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8312, 122, UINT16_MAX, 122, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8315, 125, UINT16_MAX, 125, UINT16_MAX, 1509, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8318, 128, UINT16_MAX, 128, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 129, UINT16_MAX, 129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8322, 7949, UINT16_MAX, 7949, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8324, UINT16_MAX, 7950, UINT16_MAX, 7950, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8326, UINT16_MAX, 7951, UINT16_MAX, 7951, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8328, UINT16_MAX, 7952, UINT16_MAX, 7952, 3192, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8330, UINT16_MAX, 7953, UINT16_MAX, 7953, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8332, UINT16_MAX, 7954, UINT16_MAX, 7954, 1540, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8334, UINT16_MAX, 2791, UINT16_MAX, 2791, 1582, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1447, UINT16_MAX, 1447, 1558, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8336, UINT16_MAX, 7955, UINT16_MAX, 7955, 2855, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8338, UINT16_MAX, 7956, UINT16_MAX, 7956, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8340, UINT16_MAX, 7957, UINT16_MAX, 7957, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8342, UINT16_MAX, 7958, UINT16_MAX, 7958, 3406, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8344, UINT16_MAX, 7959, UINT16_MAX, 7959, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8346, UINT16_MAX, 7960, UINT16_MAX, 7960, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8348, UINT16_MAX, 7961, UINT16_MAX, 7961, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8350, UINT16_MAX, 7962, UINT16_MAX, 7962, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8352, UINT16_MAX, 7963, UINT16_MAX, 7963, 2881, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7964, UINT16_MAX, 7964, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8354, UINT16_MAX, 7965, UINT16_MAX, 7965, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8356, UINT16_MAX, 7966, UINT16_MAX, 7966, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8358, UINT16_MAX, 7967, UINT16_MAX, 7967, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8360, UINT16_MAX, 7968, UINT16_MAX, 7968, 3510, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8362, UINT16_MAX, 7969, UINT16_MAX, 7969, 1606, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8364, UINT16_MAX, 7970, UINT16_MAX, 7970, 1594, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7971, UINT16_MAX, 7971, 1588, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8366, UINT16_MAX, 7972, UINT16_MAX, 7972, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8368, UINT16_MAX, 7973, UINT16_MAX, 7973, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8370, UINT16_MAX, 7974, UINT16_MAX, 7974, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8372, UINT16_MAX, 7975, UINT16_MAX, 7975, 1523, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8374, UINT16_MAX, 7976, UINT16_MAX, 7976, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7977, UINT16_MAX, 7977, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8376, UINT16_MAX, 7978, UINT16_MAX, 7978, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8378, 188, UINT16_MAX, 188, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8381, UINT16_MAX, 7979, UINT16_MAX, 7979, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8383, 193, UINT16_MAX, 193, UINT16_MAX, 3259, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8386, UINT16_MAX, 7980, UINT16_MAX, 7980, 3308, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8388, 198, UINT16_MAX, 198, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8391, UINT16_MAX, 7981, UINT16_MAX, 7981, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8393, 203, UINT16_MAX, 203, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8396, UINT16_MAX, 7982, UINT16_MAX, 7982, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8398, 208, UINT16_MAX, 208, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8401, UINT16_MAX, 7983, UINT16_MAX, 7983, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8403, 213, UINT16_MAX, 213, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8406, UINT16_MAX, 7984, UINT16_MAX, 7984, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8408, 218, UINT16_MAX, 218, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8411, UINT16_MAX, 7985, UINT16_MAX, 7985, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8413, 223, UINT16_MAX, 223, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8416, UINT16_MAX, 7986, UINT16_MAX, 7986, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 226, UINT16_MAX, 226, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7987, UINT16_MAX, 7987, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8419, 229, UINT16_MAX, 229, UINT16_MAX, 2858, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8422, UINT16_MAX, 7988, UINT16_MAX, 7988, 2862, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8424, 234, UINT16_MAX, 234, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8427, UINT16_MAX, 7989, UINT16_MAX, 7989, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8429, 239, UINT16_MAX, 239, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8432, UINT16_MAX, 7990, UINT16_MAX, 7990, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8434, 244, UINT16_MAX, 244, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8437, UINT16_MAX, 7991, UINT16_MAX, 7991, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8439, 249, UINT16_MAX, 249, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8442, UINT16_MAX, 7992, UINT16_MAX, 7992, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8444, 254, UINT16_MAX, 254, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8447, UINT16_MAX, 7993, UINT16_MAX, 7993, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8449, 259, UINT16_MAX, 259, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8452, UINT16_MAX, 7994, UINT16_MAX, 7994, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8454, 264, UINT16_MAX, 264, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8457, UINT16_MAX, 7995, UINT16_MAX, 7995, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8459, 269, UINT16_MAX, 269, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8462, UINT16_MAX, 7996, UINT16_MAX, 7996, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8464, 274, UINT16_MAX, 274, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8467, UINT16_MAX, 7997, UINT16_MAX, 7997, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 277, UINT16_MAX, 277, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 5110, UINT16_MAX, 5110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8470, 280, UINT16_MAX, 280, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8473, UINT16_MAX, 7998, UINT16_MAX, 7998, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8475, 285, UINT16_MAX, 285, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8478, UINT16_MAX, 7999, UINT16_MAX, 7999, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8480, 290, UINT16_MAX, 290, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8483, UINT16_MAX, 8000, UINT16_MAX, 8000, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8485, 295, UINT16_MAX, 295, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8488, UINT16_MAX, 8001, UINT16_MAX, 8001, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8490, 8492, UINT16_MAX, 8, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1454, UINT16_MAX, 1454, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8494, 304, UINT16_MAX, 304, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8497, UINT16_MAX, 8002, UINT16_MAX, 8002, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8499, 309, UINT16_MAX, 309, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8502, UINT16_MAX, 8003, UINT16_MAX, 8003, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8504, 314, UINT16_MAX, 314, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8507, UINT16_MAX, 8004, UINT16_MAX, 8004, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8509, 319, UINT16_MAX, 319, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8512, UINT16_MAX, 8005, UINT16_MAX, 8005, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8514, 324, UINT16_MAX, 324, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8517, UINT16_MAX, 8006, UINT16_MAX, 8006, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8519, 329, UINT16_MAX, 329, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8522, UINT16_MAX, 8007, UINT16_MAX, 8007, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8524, 334, UINT16_MAX, 334, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8527, UINT16_MAX, 8008, UINT16_MAX, 8008, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 337, UINT16_MAX, 337, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8009, UINT16_MAX, 8009, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8530, 340, UINT16_MAX, 340, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8533, UINT16_MAX, 8010, UINT16_MAX, 8010, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8535, 345, UINT16_MAX, 345, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8538, UINT16_MAX, 8011, UINT16_MAX, 8011, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8540, 350, UINT16_MAX, 350, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8543, UINT16_MAX, 8012, UINT16_MAX, 8012, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8545, 8545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 355, UINT16_MAX, 355, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8013, UINT16_MAX, 8013, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8548, 358, UINT16_MAX, 358, UINT16_MAX, 2974, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8551, UINT16_MAX, 8014, UINT16_MAX, 8014, 2978, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8553, 363, UINT16_MAX, 363, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8556, UINT16_MAX, 8015, UINT16_MAX, 8015, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8558, 368, UINT16_MAX, 368, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8561, UINT16_MAX, 8016, UINT16_MAX, 8016, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 371, UINT16_MAX, 371, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8017, UINT16_MAX, 8017, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8564, 374, UINT16_MAX, 374, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8567, UINT16_MAX, 8018, UINT16_MAX, 8018, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8569, 379, UINT16_MAX, 379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8572, UINT16_MAX, 8019, UINT16_MAX, 8019, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8574, 384, UINT16_MAX, 384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8577, UINT16_MAX, 8020, UINT16_MAX, 8020, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8579, 389, UINT16_MAX, 389, UINT16_MAX, 3012, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8582, UINT16_MAX, 8021, UINT16_MAX, 8021, 3015, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8584, 394, UINT16_MAX, 394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8587, UINT16_MAX, 8022, UINT16_MAX, 8022, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8589, 399, UINT16_MAX, 399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8592, UINT16_MAX, 8023, UINT16_MAX, 8023, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8594, 404, UINT16_MAX, 404, UINT16_MAX, 3018, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8597, UINT16_MAX, 8024, UINT16_MAX, 8024, 3021, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8599, 409, UINT16_MAX, 409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8602, UINT16_MAX, 8025, UINT16_MAX, 8025, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8604, 414, UINT16_MAX, 414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8607, UINT16_MAX, 8026, UINT16_MAX, 8026, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 417, UINT16_MAX, 417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8027, UINT16_MAX, 8027, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8610, 420, UINT16_MAX, 420, UINT16_MAX, 3030, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8613, UINT16_MAX, 8028, UINT16_MAX, 8028, 3033, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8615, 425, UINT16_MAX, 425, UINT16_MAX, 3036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8618, UINT16_MAX, 8029, UINT16_MAX, 8029, 3039, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8620, 430, UINT16_MAX, 430, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8623, UINT16_MAX, 8030, UINT16_MAX, 8030, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8625, 435, UINT16_MAX, 435, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8628, UINT16_MAX, 8031, UINT16_MAX, 8031, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8630, 440, UINT16_MAX, 440, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8633, UINT16_MAX, 8032, UINT16_MAX, 8032, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8635, 445, UINT16_MAX, 445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8638, UINT16_MAX, 8033, UINT16_MAX, 8033, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8640, 450, UINT16_MAX, 450, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8643, UINT16_MAX, 8034, UINT16_MAX, 8034, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8645, 455, UINT16_MAX, 455, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8648, UINT16_MAX, 8035, UINT16_MAX, 8035, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8650, 460, UINT16_MAX, 460, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8653, 463, UINT16_MAX, 463, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8656, UINT16_MAX, 8036, UINT16_MAX, 8036, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8658, 468, UINT16_MAX, 468, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8661, UINT16_MAX, 8037, UINT16_MAX, 8037, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8663, 473, UINT16_MAX, 473, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8666, UINT16_MAX, 8038, UINT16_MAX, 8038, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18, 18, 3260, UINT16_MAX, 3260, 3140, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8039, UINT16_MAX, 8039, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 476, UINT16_MAX, 476, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 477, UINT16_MAX, 477, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8040, UINT16_MAX, 8040, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 478, UINT16_MAX, 478, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8041, UINT16_MAX, 8041, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 479, UINT16_MAX, 479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 480, UINT16_MAX, 480, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8042, UINT16_MAX, 8042, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 481, UINT16_MAX, 481, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 482, UINT16_MAX, 482, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 483, UINT16_MAX, 483, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8043, UINT16_MAX, 8043, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 484, UINT16_MAX, 484, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 485, UINT16_MAX, 485, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 486, UINT16_MAX, 486, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 487, UINT16_MAX, 487, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8044, UINT16_MAX, 8044, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 488, UINT16_MAX, 488, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 489, UINT16_MAX, 489, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8045, UINT16_MAX, 8045, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 490, UINT16_MAX, 490, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 491, UINT16_MAX, 491, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 492, UINT16_MAX, 492, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8046, UINT16_MAX, 8046, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8047, UINT16_MAX, 8047, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 493, UINT16_MAX, 493, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 494, UINT16_MAX, 494, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8048, UINT16_MAX, 8048, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 495, UINT16_MAX, 495, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8688, 498, UINT16_MAX, 498, UINT16_MAX, 3565, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8691, UINT16_MAX, 8049, UINT16_MAX, 8049, 3614, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 501, UINT16_MAX, 501, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8050, UINT16_MAX, 8050, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 502, UINT16_MAX, 502, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8051, UINT16_MAX, 8051, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 503, UINT16_MAX, 503, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 504, UINT16_MAX, 504, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8052, UINT16_MAX, 8052, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 505, UINT16_MAX, 505, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 506, UINT16_MAX, 506, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8053, UINT16_MAX, 8053, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 507, UINT16_MAX, 507, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8700, 510, UINT16_MAX, 510, UINT16_MAX, 3663, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8703, UINT16_MAX, 8054, UINT16_MAX, 8054, 3712, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 513, UINT16_MAX, 513, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 514, UINT16_MAX, 514, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 515, UINT16_MAX, 515, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8055, UINT16_MAX, 8055, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 516, UINT16_MAX, 516, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8056, UINT16_MAX, 8056, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 517, UINT16_MAX, 517, UINT16_MAX, 1573, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 518, UINT16_MAX, 518, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8057, UINT16_MAX, 8057, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 519, UINT16_MAX, 519, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8058, UINT16_MAX, 8058, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8059, UINT16_MAX, 8059, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8712, 522, UINT16_MAX, 522, 8060, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8715, 522, 8061, 522, 8060, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8717, UINT16_MAX, 8061, UINT16_MAX, 8060, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8719, 529, UINT16_MAX, 529, 8062, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8722, 529, 8063, 529, 8062, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8724, UINT16_MAX, 8063, UINT16_MAX, 8062, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8726, 536, UINT16_MAX, 536, 8064, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8729, 536, 8065, 536, 8064, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8731, UINT16_MAX, 8065, UINT16_MAX, 8064, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8733, 543, UINT16_MAX, 543, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8736, UINT16_MAX, 8066, UINT16_MAX, 8066, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8738, 548, UINT16_MAX, 548, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8741, UINT16_MAX, 8067, UINT16_MAX, 8067, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8743, 553, UINT16_MAX, 553, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8746, UINT16_MAX, 8068, UINT16_MAX, 8068, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8748, 558, UINT16_MAX, 558, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8751, UINT16_MAX, 8069, UINT16_MAX, 8069, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8753, 563, UINT16_MAX, 563, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8756, UINT16_MAX, 8070, UINT16_MAX, 8070, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8758, 568, UINT16_MAX, 568, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8761, UINT16_MAX, 8071, UINT16_MAX, 8071, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8763, 573, UINT16_MAX, 573, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8766, UINT16_MAX, 8072, UINT16_MAX, 8072, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8768, 578, UINT16_MAX, 578, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8771, UINT16_MAX, 8073, UINT16_MAX, 8073, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1451, UINT16_MAX, 1451, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8773, 583, UINT16_MAX, 583, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8776, UINT16_MAX, 8074, UINT16_MAX, 8074, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8778, 588, UINT16_MAX, 588, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8781, UINT16_MAX, 8075, UINT16_MAX, 8075, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8783, 593, UINT16_MAX, 593, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8786, UINT16_MAX, 8076, UINT16_MAX, 8076, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 596, UINT16_MAX, 596, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8077, UINT16_MAX, 8077, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8789, 599, UINT16_MAX, 599, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8792, UINT16_MAX, 8078, UINT16_MAX, 8078, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8794, 604, UINT16_MAX, 604, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8797, UINT16_MAX, 8079, UINT16_MAX, 8079, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8799, 609, UINT16_MAX, 609, UINT16_MAX, 1567, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8802, UINT16_MAX, 8080, UINT16_MAX, 8080, 1570, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8804, 614, UINT16_MAX, 614, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8807, UINT16_MAX, 8081, UINT16_MAX, 8081, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8809, 619, UINT16_MAX, 619, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8812, UINT16_MAX, 8082, UINT16_MAX, 8082, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8814, 8814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8816, 626, UINT16_MAX, 626, 8083, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8819, 626, 8084, 626, 8083, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8821, UINT16_MAX, 8084, UINT16_MAX, 8083, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8823, 633, UINT16_MAX, 633, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8826, UINT16_MAX, 8085, UINT16_MAX, 8085, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 636, UINT16_MAX, 636, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 637, UINT16_MAX, 637, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8830, 640, UINT16_MAX, 640, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8833, UINT16_MAX, 8086, UINT16_MAX, 8086, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8835, 645, UINT16_MAX, 645, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8838, UINT16_MAX, 8087, UINT16_MAX, 8087, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8840, 650, UINT16_MAX, 650, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8843, UINT16_MAX, 8088, UINT16_MAX, 8088, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8845, 655, UINT16_MAX, 655, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8848, UINT16_MAX, 8089, UINT16_MAX, 8089, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8850, 660, UINT16_MAX, 660, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8853, UINT16_MAX, 8090, UINT16_MAX, 8090, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8855, 665, UINT16_MAX, 665, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8858, UINT16_MAX, 8091, UINT16_MAX, 8091, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8860, 670, UINT16_MAX, 670, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8863, UINT16_MAX, 8092, UINT16_MAX, 8092, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8865, 675, UINT16_MAX, 675, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8868, UINT16_MAX, 8093, UINT16_MAX, 8093, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8870, 680, UINT16_MAX, 680, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8873, UINT16_MAX, 8094, UINT16_MAX, 8094, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8875, 685, UINT16_MAX, 685, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8878, UINT16_MAX, 8095, UINT16_MAX, 8095, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8880, 690, UINT16_MAX, 690, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8883, UINT16_MAX, 8096, UINT16_MAX, 8096, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8885, 695, UINT16_MAX, 695, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8888, UINT16_MAX, 8097, UINT16_MAX, 8097, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8890, 700, UINT16_MAX, 700, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8893, UINT16_MAX, 8098, UINT16_MAX, 8098, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8895, 705, UINT16_MAX, 705, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8898, UINT16_MAX, 8099, UINT16_MAX, 8099, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8900, 710, UINT16_MAX, 710, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8903, UINT16_MAX, 8100, UINT16_MAX, 8100, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8905, 715, UINT16_MAX, 715, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8908, UINT16_MAX, 8101, UINT16_MAX, 8101, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8910, 720, UINT16_MAX, 720, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8913, UINT16_MAX, 8102, UINT16_MAX, 8102, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8915, 725, UINT16_MAX, 725, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8918, UINT16_MAX, 8103, UINT16_MAX, 8103, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 728, UINT16_MAX, 728, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8104, UINT16_MAX, 8104, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8921, 731, UINT16_MAX, 731, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8924, UINT16_MAX, 8105, UINT16_MAX, 8105, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 734, UINT16_MAX, 734, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 735, UINT16_MAX, 735, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1461, UINT16_MAX, 1461, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 736, UINT16_MAX, 736, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8106, UINT16_MAX, 8106, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8929, 739, UINT16_MAX, 739, UINT16_MAX, 1543, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8932, UINT16_MAX, 8107, UINT16_MAX, 8107, 1546, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8934, 744, UINT16_MAX, 744, UINT16_MAX, 2866, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8937, UINT16_MAX, 8108, UINT16_MAX, 8108, 2869, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8939, 749, UINT16_MAX, 749, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8942, UINT16_MAX, 8109, UINT16_MAX, 8109, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8944, 754, UINT16_MAX, 754, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8947, UINT16_MAX, 8110, UINT16_MAX, 8110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8949, 759, UINT16_MAX, 759, UINT16_MAX, 1615, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8952, UINT16_MAX, 8111, UINT16_MAX, 8111, 1618, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8954, 764, UINT16_MAX, 764, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8957, UINT16_MAX, 8112, UINT16_MAX, 8112, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8959, 769, UINT16_MAX, 769, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8962, UINT16_MAX, 8113, UINT16_MAX, 8113, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 772, UINT16_MAX, 772, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 773, UINT16_MAX, 773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8114, UINT16_MAX, 8114, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 774, UINT16_MAX, 774, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 775, UINT16_MAX, 775, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8115, UINT16_MAX, 8115, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8116, UINT16_MAX, 8116, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 776, UINT16_MAX, 776, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8117, UINT16_MAX, 8117, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 777, UINT16_MAX, 777, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 778, UINT16_MAX, 778, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 779, UINT16_MAX, 779, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 780, UINT16_MAX, 780, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8118, UINT16_MAX, 8118, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 781, UINT16_MAX, 781, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8119, UINT16_MAX, 8119, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 782, UINT16_MAX, 782, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8120, UINT16_MAX, 8120, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 783, UINT16_MAX, 783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8121, UINT16_MAX, 8121, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 784, UINT16_MAX, 784, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8122, UINT16_MAX, 8122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8123, UINT16_MAX, 8123, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8124, UINT16_MAX, 8124, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8125, UINT16_MAX, 8125, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8126, UINT16_MAX, 8126, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8127, UINT16_MAX, 8127, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8128, UINT16_MAX, 8128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8129, UINT16_MAX, 8129, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8130, UINT16_MAX, 8130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2776, UINT16_MAX, 2776, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8131, UINT16_MAX, 8131, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8132, UINT16_MAX, 8132, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8133, UINT16_MAX, 8133, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8134, UINT16_MAX, 8134, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8135, UINT16_MAX, 8135, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8136, UINT16_MAX, 8136, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8137, UINT16_MAX, 8137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8138, UINT16_MAX, 8138, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8139, UINT16_MAX, 8139, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8140, UINT16_MAX, 8140, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8141, UINT16_MAX, 8141, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8142, UINT16_MAX, 8142, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8143, UINT16_MAX, 8143, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8144, UINT16_MAX, 8144, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8145, UINT16_MAX, 8145, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8146, UINT16_MAX, 8146, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8147, UINT16_MAX, 8147, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8148, UINT16_MAX, 8148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8149, UINT16_MAX, 8149, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8150, UINT16_MAX, 8150, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8151, UINT16_MAX, 8151, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8152, UINT16_MAX, 8152, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8153, UINT16_MAX, 8153, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8154, UINT16_MAX, 8154, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8155, UINT16_MAX, 8155, 1576, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8156, UINT16_MAX, 8156, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8157, UINT16_MAX, 8157, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32768, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32769, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32770, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32771, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32775, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32776, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32778, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32772, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32814, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32773, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32780, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32779, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32782, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32783, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32815, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32816, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32781, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32808, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32813, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32807, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32784, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32774, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32777, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32810, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32812, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32811, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32809, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32819, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32817, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 8997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 240, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, 807, 7099, UINT16_MAX, 7099, 32818, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 233, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 808, UINT16_MAX, 808, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8158, UINT16_MAX, 8158, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 809, UINT16_MAX, 809, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8159, UINT16_MAX, 8159, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 811, UINT16_MAX, 811, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8160, UINT16_MAX, 8160, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8161, UINT16_MAX, 8161, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8162, UINT16_MAX, 8162, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8163, UINT16_MAX, 8163, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 815, UINT16_MAX, 815, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 9008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9010, 820, UINT16_MAX, 820, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9014, 824, UINT16_MAX, 824, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9017, 827, UINT16_MAX, 827, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9020, 830, UINT16_MAX, 830, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9023, 833, UINT16_MAX, 833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9026, 836, UINT16_MAX, 836, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9029, 839, UINT16_MAX, 839, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9032, 17226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 845, UINT16_MAX, 845, UINT16_MAX, 1673, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 846, UINT16_MAX, 846, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 847, UINT16_MAX, 847, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 848, UINT16_MAX, 848, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 849, UINT16_MAX, 849, UINT16_MAX, 1726, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 850, UINT16_MAX, 850, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 851, UINT16_MAX, 851, UINT16_MAX, 1777, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 852, UINT16_MAX, 852, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 807, UINT16_MAX, 807, UINT16_MAX, 1830, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 853, UINT16_MAX, 853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 854, UINT16_MAX, 854, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 35, UINT16_MAX, 35, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 855, UINT16_MAX, 855, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 856, UINT16_MAX, 856, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 857, UINT16_MAX, 857, UINT16_MAX, 1881, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 858, UINT16_MAX, 858, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 859, UINT16_MAX, 859, UINT16_MAX, 5027, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 860, UINT16_MAX, 860, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 861, UINT16_MAX, 861, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 862, UINT16_MAX, 862, UINT16_MAX, 1932, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 863, UINT16_MAX, 863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 864, UINT16_MAX, 864, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 865, UINT16_MAX, 865, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 866, UINT16_MAX, 866, UINT16_MAX, 1983, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9059, 869, UINT16_MAX, 869, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9062, 872, UINT16_MAX, 872, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9065, UINT16_MAX, 2558, UINT16_MAX, 2558, 4904, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9067, UINT16_MAX, 2590, UINT16_MAX, 2590, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9069, UINT16_MAX, 2595, UINT16_MAX, 2595, 4913, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9071, UINT16_MAX, 2631, UINT16_MAX, 2631, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9073, 17267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7093, UINT16_MAX, 7093, 2088, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7094, UINT16_MAX, 7094, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2801, UINT16_MAX, 2801, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7095, UINT16_MAX, 7095, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7096, UINT16_MAX, 7096, 2141, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7097, UINT16_MAX, 7097, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7098, UINT16_MAX, 7098, 2192, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 915, UINT16_MAX, 915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7099, UINT16_MAX, 7099, 2245, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7100, UINT16_MAX, 7100, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7101, UINT16_MAX, 7101, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7102, UINT16_MAX, 7102, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7103, UINT16_MAX, 7103, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7104, UINT16_MAX, 7104, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7105, UINT16_MAX, 7105, 2401, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2802, UINT16_MAX, 2802, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7106, UINT16_MAX, 7106, 5023, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 860, 917, UINT16_MAX, 917, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 917, UINT16_MAX, 917, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7108, UINT16_MAX, 7108, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 897, UINT16_MAX, 897, 2349, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7109, UINT16_MAX, 7109, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7110, UINT16_MAX, 7110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7111, UINT16_MAX, 7111, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2790, UINT16_MAX, 2790, 2452, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9078, UINT16_MAX, 8164, UINT16_MAX, 8164, 2036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9080, UINT16_MAX, 8165, UINT16_MAX, 8165, 2297, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9082, UINT16_MAX, 2700, UINT16_MAX, 2700, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9084, UINT16_MAX, 2669, UINT16_MAX, 2669, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9086, UINT16_MAX, 2705, UINT16_MAX, 2705, 5033, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 896, UINT16_MAX, 896, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 846, 846, 7094, UINT16_MAX, 7094, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 852, 852, 915, UINT16_MAX, 915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2505, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 863, 863, 7109, UINT16_MAX, 7109, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 858, 858, 2802, UINT16_MAX, 2802, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8166, UINT16_MAX, 8166, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 902, UINT16_MAX, 902, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8167, UINT16_MAX, 8167, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 903, UINT16_MAX, 903, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8168, UINT16_MAX, 8168, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 904, UINT16_MAX, 904, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7120, UINT16_MAX, 7120, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 905, UINT16_MAX, 905, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8169, UINT16_MAX, 8169, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 906, UINT16_MAX, 906, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8170, UINT16_MAX, 8170, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 907, UINT16_MAX, 907, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8171, UINT16_MAX, 8171, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 908, UINT16_MAX, 908, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8172, UINT16_MAX, 8172, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 909, UINT16_MAX, 909, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8173, UINT16_MAX, 8173, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 910, UINT16_MAX, 910, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8174, UINT16_MAX, 8174, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 911, UINT16_MAX, 911, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8175, UINT16_MAX, 8175, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 912, UINT16_MAX, 912, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8176, UINT16_MAX, 8176, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 913, UINT16_MAX, 913, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8177, UINT16_MAX, 8177, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 853, 853, 7100, UINT16_MAX, 7100, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 859, 859, 7106, UINT16_MAX, 7106, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 914, UINT16_MAX, 8178, UINT16_MAX, 8178, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8179, UINT16_MAX, 8179, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 915, 852, UINT16_MAX, 852, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 849, 849, 7096, UINT16_MAX, 7096, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 916, UINT16_MAX, 916, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8180, UINT16_MAX, 8180, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 917, 918, UINT16_MAX, 918, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 919, UINT16_MAX, 919, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8181, UINT16_MAX, 8181, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 920, UINT16_MAX, 920, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 921, UINT16_MAX, 921, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 922, UINT16_MAX, 922, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9115, 925, UINT16_MAX, 925, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9118, 928, UINT16_MAX, 928, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 929, UINT16_MAX, 929, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9122, 932, UINT16_MAX, 932, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 933, UINT16_MAX, 933, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 934, UINT16_MAX, 934, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 935, UINT16_MAX, 935, UINT16_MAX, 2525, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9128, 938, UINT16_MAX, 938, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 939, UINT16_MAX, 939, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 940, UINT16_MAX, 940, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 941, UINT16_MAX, 941, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 942, UINT16_MAX, 942, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9135, 945, UINT16_MAX, 945, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9138, 948, UINT16_MAX, 948, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9141, 951, UINT16_MAX, 951, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 952, UINT16_MAX, 952, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 953, UINT16_MAX, 953, UINT16_MAX, 2615, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 954, UINT16_MAX, 954, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 955, UINT16_MAX, 955, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 956, UINT16_MAX, 956, UINT16_MAX, 2522, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 957, UINT16_MAX, 957, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 958, UINT16_MAX, 958, UINT16_MAX, 2511, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 959, UINT16_MAX, 959, UINT16_MAX, 2601, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 960, UINT16_MAX, 960, UINT16_MAX, 2635, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 961, UINT16_MAX, 961, UINT16_MAX, 2531, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9154, 964, UINT16_MAX, 964, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 965, UINT16_MAX, 965, UINT16_MAX, 2528, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 966, UINT16_MAX, 966, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 967, UINT16_MAX, 967, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 968, UINT16_MAX, 968, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 969, UINT16_MAX, 969, UINT16_MAX, 2641, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 970, UINT16_MAX, 970, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 971, UINT16_MAX, 971, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 972, UINT16_MAX, 972, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 973, UINT16_MAX, 973, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 974, UINT16_MAX, 974, UINT16_MAX, 2542, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 975, UINT16_MAX, 975, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 976, UINT16_MAX, 976, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 977, UINT16_MAX, 977, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 978, UINT16_MAX, 978, UINT16_MAX, 2659, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 979, UINT16_MAX, 979, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 980, UINT16_MAX, 980, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 981, UINT16_MAX, 981, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 982, UINT16_MAX, 982, UINT16_MAX, 2665, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 983, UINT16_MAX, 983, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 984, UINT16_MAX, 984, UINT16_MAX, 2653, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 985, UINT16_MAX, 985, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 986, UINT16_MAX, 986, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8182, UINT16_MAX, 8182, 2622, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8183, UINT16_MAX, 8183, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8184, UINT16_MAX, 8184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8185, UINT16_MAX, 8185, 2575, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8186, UINT16_MAX, 8186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8187, UINT16_MAX, 8187, 2564, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8188, UINT16_MAX, 8188, 2608, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8189, UINT16_MAX, 8189, 2638, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8190, UINT16_MAX, 8190, 2553, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9179, UINT16_MAX, 8191, UINT16_MAX, 8191, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8192, UINT16_MAX, 8192, 2581, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8193, UINT16_MAX, 8193, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8194, UINT16_MAX, 8194, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8195, UINT16_MAX, 8195, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8196, UINT16_MAX, 8196, 2644, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8197, UINT16_MAX, 8197, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8198, UINT16_MAX, 8198, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8199, UINT16_MAX, 8199, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8200, UINT16_MAX, 8200, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8201, UINT16_MAX, 8201, 2584, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8202, UINT16_MAX, 8202, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8203, UINT16_MAX, 8203, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8204, UINT16_MAX, 8204, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8205, UINT16_MAX, 8205, 2662, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8206, UINT16_MAX, 8206, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8207, UINT16_MAX, 8207, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8208, UINT16_MAX, 8208, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8209, UINT16_MAX, 8209, 2668, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8210, UINT16_MAX, 8210, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8211, UINT16_MAX, 8211, 2656, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8212, UINT16_MAX, 8212, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8213, UINT16_MAX, 8213, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9181, UINT16_MAX, 8214, UINT16_MAX, 8214, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9183, UINT16_MAX, 8215, UINT16_MAX, 8215, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8216, UINT16_MAX, 8216, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9185, UINT16_MAX, 8217, UINT16_MAX, 8217, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8218, UINT16_MAX, 8218, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8219, UINT16_MAX, 8219, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8220, UINT16_MAX, 8220, 2578, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9187, UINT16_MAX, 8221, UINT16_MAX, 8221, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8222, UINT16_MAX, 8222, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8223, UINT16_MAX, 8223, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8224, UINT16_MAX, 8224, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8225, UINT16_MAX, 8225, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9189, UINT16_MAX, 8226, UINT16_MAX, 8226, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9191, UINT16_MAX, 8227, UINT16_MAX, 8227, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9193, UINT16_MAX, 8228, UINT16_MAX, 8228, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8229, UINT16_MAX, 8229, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1003, UINT16_MAX, 1003, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8230, UINT16_MAX, 8230, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1004, UINT16_MAX, 1004, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8231, UINT16_MAX, 8231, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1005, UINT16_MAX, 1005, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8232, UINT16_MAX, 8232, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1006, UINT16_MAX, 1006, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8233, UINT16_MAX, 8233, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1007, UINT16_MAX, 1007, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8234, UINT16_MAX, 8234, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1008, UINT16_MAX, 1008, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8235, UINT16_MAX, 8235, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1009, UINT16_MAX, 1009, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8236, UINT16_MAX, 8236, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1010, UINT16_MAX, 1010, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8237, UINT16_MAX, 8237, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1011, UINT16_MAX, 1011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8238, UINT16_MAX, 8238, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1012, UINT16_MAX, 1012, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8239, UINT16_MAX, 8239, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1013, UINT16_MAX, 1013, UINT16_MAX, 2595, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8240, UINT16_MAX, 8240, 2598, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9206, 1016, UINT16_MAX, 1016, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9209, UINT16_MAX, 8241, UINT16_MAX, 8241, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1019, UINT16_MAX, 1019, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8242, UINT16_MAX, 8242, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1020, UINT16_MAX, 1020, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8243, UINT16_MAX, 8243, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1021, UINT16_MAX, 1021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8244, UINT16_MAX, 8244, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1022, UINT16_MAX, 1022, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8245, UINT16_MAX, 8245, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1023, UINT16_MAX, 1023, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8246, UINT16_MAX, 8246, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ME, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1024, UINT16_MAX, 1024, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8247, UINT16_MAX, 8247, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1025, UINT16_MAX, 1025, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8248, UINT16_MAX, 8248, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1026, UINT16_MAX, 1026, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8249, UINT16_MAX, 8249, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1027, UINT16_MAX, 1027, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8250, UINT16_MAX, 8250, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1028, UINT16_MAX, 1028, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8251, UINT16_MAX, 8251, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1029, UINT16_MAX, 1029, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8252, UINT16_MAX, 8252, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1030, UINT16_MAX, 1030, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8253, UINT16_MAX, 8253, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1031, UINT16_MAX, 1031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8254, UINT16_MAX, 8254, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1032, UINT16_MAX, 1032, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8255, UINT16_MAX, 8255, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1033, UINT16_MAX, 1033, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8256, UINT16_MAX, 8256, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1034, UINT16_MAX, 1034, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8257, UINT16_MAX, 8257, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1035, UINT16_MAX, 1035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8258, UINT16_MAX, 8258, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1036, UINT16_MAX, 1036, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8259, UINT16_MAX, 8259, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1037, UINT16_MAX, 1037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8260, UINT16_MAX, 8260, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1038, UINT16_MAX, 1038, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8261, UINT16_MAX, 8261, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1039, UINT16_MAX, 1039, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8262, UINT16_MAX, 8262, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1040, UINT16_MAX, 1040, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8263, UINT16_MAX, 8263, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1041, UINT16_MAX, 1041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8264, UINT16_MAX, 8264, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1042, UINT16_MAX, 1042, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8265, UINT16_MAX, 8265, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1043, UINT16_MAX, 1043, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8266, UINT16_MAX, 8266, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1044, UINT16_MAX, 1044, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8267, UINT16_MAX, 8267, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1045, UINT16_MAX, 1045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8268, UINT16_MAX, 8268, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1046, UINT16_MAX, 1046, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8269, UINT16_MAX, 8269, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1047, UINT16_MAX, 1047, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8270, UINT16_MAX, 8270, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1048, UINT16_MAX, 1048, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8271, UINT16_MAX, 8271, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1049, UINT16_MAX, 1049, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8272, UINT16_MAX, 8272, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1050, UINT16_MAX, 1050, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8273, UINT16_MAX, 8273, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1051, UINT16_MAX, 1051, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9244, 1054, UINT16_MAX, 1054, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9247, UINT16_MAX, 8274, UINT16_MAX, 8274, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1057, UINT16_MAX, 1057, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8275, UINT16_MAX, 8275, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1058, UINT16_MAX, 1058, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8276, UINT16_MAX, 8276, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1059, UINT16_MAX, 1059, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8277, UINT16_MAX, 8277, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1060, UINT16_MAX, 1060, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8278, UINT16_MAX, 8278, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1061, UINT16_MAX, 1061, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8279, UINT16_MAX, 8279, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1062, UINT16_MAX, 1062, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8280, UINT16_MAX, 8280, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8281, UINT16_MAX, 8281, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9255, 1065, UINT16_MAX, 1065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9258, UINT16_MAX, 8282, UINT16_MAX, 8282, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9260, 1070, UINT16_MAX, 1070, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9263, UINT16_MAX, 8283, UINT16_MAX, 8283, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1073, UINT16_MAX, 1073, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8284, UINT16_MAX, 8284, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9266, 1076, UINT16_MAX, 1076, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9269, UINT16_MAX, 8285, UINT16_MAX, 8285, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1079, UINT16_MAX, 1079, UINT16_MAX, 2629, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8286, UINT16_MAX, 8286, 2632, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9272, 1082, UINT16_MAX, 1082, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9275, UINT16_MAX, 8287, UINT16_MAX, 8287, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9277, 1087, UINT16_MAX, 1087, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9280, UINT16_MAX, 8288, UINT16_MAX, 8288, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9282, 1092, UINT16_MAX, 1092, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9285, UINT16_MAX, 8289, UINT16_MAX, 8289, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1095, UINT16_MAX, 1095, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8290, UINT16_MAX, 8290, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9288, 1098, UINT16_MAX, 1098, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9291, UINT16_MAX, 8291, UINT16_MAX, 8291, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9293, 1103, UINT16_MAX, 1103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9296, UINT16_MAX, 8292, UINT16_MAX, 8292, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9298, 1108, UINT16_MAX, 1108, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9301, UINT16_MAX, 8293, UINT16_MAX, 8293, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1111, UINT16_MAX, 1111, UINT16_MAX, 2647, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8294, UINT16_MAX, 8294, 2650, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9304, 1114, UINT16_MAX, 1114, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9307, UINT16_MAX, 8295, UINT16_MAX, 8295, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9309, 1119, UINT16_MAX, 1119, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9312, UINT16_MAX, 8296, UINT16_MAX, 8296, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9314, 1124, UINT16_MAX, 1124, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9317, UINT16_MAX, 8297, UINT16_MAX, 8297, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9319, 1129, UINT16_MAX, 1129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9322, UINT16_MAX, 8298, UINT16_MAX, 8298, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9324, 1134, UINT16_MAX, 1134, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9327, UINT16_MAX, 8299, UINT16_MAX, 8299, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9329, 1139, UINT16_MAX, 1139, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9332, UINT16_MAX, 8300, UINT16_MAX, 8300, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1142, UINT16_MAX, 1142, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8301, UINT16_MAX, 8301, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9335, 1145, UINT16_MAX, 1145, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9338, UINT16_MAX, 8302, UINT16_MAX, 8302, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1148, UINT16_MAX, 1148, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8303, UINT16_MAX, 8303, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1149, UINT16_MAX, 1149, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8304, UINT16_MAX, 8304, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1150, UINT16_MAX, 1150, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8305, UINT16_MAX, 8305, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1151, UINT16_MAX, 1151, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8306, UINT16_MAX, 8306, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1152, UINT16_MAX, 1152, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8307, UINT16_MAX, 8307, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1153, UINT16_MAX, 1153, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8308, UINT16_MAX, 8308, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1154, UINT16_MAX, 1154, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8309, UINT16_MAX, 8309, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1155, UINT16_MAX, 1155, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8310, UINT16_MAX, 8310, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1156, UINT16_MAX, 1156, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8311, UINT16_MAX, 8311, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1157, UINT16_MAX, 1157, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8312, UINT16_MAX, 8312, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1158, UINT16_MAX, 1158, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8313, UINT16_MAX, 8313, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1159, UINT16_MAX, 1159, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8314, UINT16_MAX, 8314, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1160, UINT16_MAX, 1160, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8315, UINT16_MAX, 8315, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1161, UINT16_MAX, 1161, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8316, UINT16_MAX, 8316, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1162, UINT16_MAX, 1162, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8317, UINT16_MAX, 8317, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1163, UINT16_MAX, 1163, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8318, UINT16_MAX, 8318, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1164, UINT16_MAX, 1164, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8319, UINT16_MAX, 8319, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1165, UINT16_MAX, 1165, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8320, UINT16_MAX, 8320, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1166, UINT16_MAX, 1166, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8321, UINT16_MAX, 8321, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1167, UINT16_MAX, 1167, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8322, UINT16_MAX, 8322, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1168, UINT16_MAX, 1168, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8323, UINT16_MAX, 8323, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1169, UINT16_MAX, 1169, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8324, UINT16_MAX, 8324, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1170, UINT16_MAX, 1170, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8325, UINT16_MAX, 8325, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1171, UINT16_MAX, 1171, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8326, UINT16_MAX, 8326, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1172, UINT16_MAX, 1172, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8327, UINT16_MAX, 8327, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1173, UINT16_MAX, 1173, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8328, UINT16_MAX, 8328, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1174, UINT16_MAX, 1174, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8329, UINT16_MAX, 8329, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1175, UINT16_MAX, 1175, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1176, UINT16_MAX, 1176, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1177, UINT16_MAX, 1177, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1178, UINT16_MAX, 1178, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1179, UINT16_MAX, 1179, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1180, UINT16_MAX, 1180, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1181, UINT16_MAX, 1181, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1182, UINT16_MAX, 1182, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1183, UINT16_MAX, 1183, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1184, UINT16_MAX, 1184, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1185, UINT16_MAX, 1185, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1186, UINT16_MAX, 1186, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1187, UINT16_MAX, 1187, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1188, UINT16_MAX, 1188, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1189, UINT16_MAX, 1189, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1190, UINT16_MAX, 1190, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1191, UINT16_MAX, 1191, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1192, UINT16_MAX, 1192, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1193, UINT16_MAX, 1193, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1194, UINT16_MAX, 1194, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1195, UINT16_MAX, 1195, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1196, UINT16_MAX, 1196, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1197, UINT16_MAX, 1197, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1198, UINT16_MAX, 1198, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1199, UINT16_MAX, 1199, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1200, UINT16_MAX, 1200, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1201, UINT16_MAX, 1201, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1202, UINT16_MAX, 1202, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1203, UINT16_MAX, 1203, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1204, UINT16_MAX, 1204, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1205, UINT16_MAX, 1205, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1206, UINT16_MAX, 1206, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1207, UINT16_MAX, 1207, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1208, UINT16_MAX, 1208, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1209, UINT16_MAX, 1209, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1210, UINT16_MAX, 1210, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1211, UINT16_MAX, 1211, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1212, UINT16_MAX, 1212, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8330, UINT16_MAX, 8330, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8331, UINT16_MAX, 8331, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8332, UINT16_MAX, 8332, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8333, UINT16_MAX, 8333, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8334, UINT16_MAX, 8334, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8335, UINT16_MAX, 8335, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8336, UINT16_MAX, 8336, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8337, UINT16_MAX, 8337, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8338, UINT16_MAX, 8338, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8339, UINT16_MAX, 8339, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8340, UINT16_MAX, 8340, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8341, UINT16_MAX, 8341, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8342, UINT16_MAX, 8342, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8343, UINT16_MAX, 8343, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8344, UINT16_MAX, 8344, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8345, UINT16_MAX, 8345, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8346, UINT16_MAX, 8346, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8347, UINT16_MAX, 8347, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8348, UINT16_MAX, 8348, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8349, UINT16_MAX, 8349, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8350, UINT16_MAX, 8350, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8351, UINT16_MAX, 8351, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8352, UINT16_MAX, 8352, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8353, UINT16_MAX, 8353, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8354, UINT16_MAX, 8354, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8355, UINT16_MAX, 8355, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8356, UINT16_MAX, 8356, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8357, UINT16_MAX, 8357, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8358, UINT16_MAX, 8358, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8359, UINT16_MAX, 8359, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8360, UINT16_MAX, 8360, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8361, UINT16_MAX, 8361, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8362, UINT16_MAX, 8362, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8363, UINT16_MAX, 8363, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8364, UINT16_MAX, 8364, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8365, UINT16_MAX, 8365, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8366, UINT16_MAX, 8366, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8367, UINT16_MAX, 8367, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9405, 9405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 222, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 228, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 10, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 11, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 12, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 13, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 14, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 15, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 16, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 17, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 18, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 19, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 20, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 21, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 22, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 23, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 24, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 25, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 2, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 30, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 31, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 32, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2671, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2676, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2679, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 27, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 28, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 29, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 33, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 34, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32785, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32786, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32787, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 35, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2685, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2688, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2682, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_MN, 36, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2691, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2694, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2697, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32788, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32789, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2700, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32790, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32792, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2704, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32791, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32793, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2709, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32795, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2712, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2716, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32794, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2719, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 84, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 91, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32796, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2722, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32799, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2725, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2730, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32797, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32798, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32800, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2733, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2737, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32801, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32802, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32803, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2740, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2745, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32804, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 103, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 107, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 118, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 122, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NOBREAK, 1335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 129, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 130, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 132, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 9546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 9550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2748, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32805, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1376, UINT16_MAX, 1376, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1377, UINT16_MAX, 1377, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1378, UINT16_MAX, 1378, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1379, UINT16_MAX, 1379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1380, UINT16_MAX, 1380, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1381, UINT16_MAX, 1381, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1382, UINT16_MAX, 1382, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1383, UINT16_MAX, 1383, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1384, UINT16_MAX, 1384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1385, UINT16_MAX, 1385, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1386, UINT16_MAX, 1386, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1387, UINT16_MAX, 1387, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1388, UINT16_MAX, 1388, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1389, UINT16_MAX, 1389, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1390, UINT16_MAX, 1390, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1391, UINT16_MAX, 1391, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1392, UINT16_MAX, 1392, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1393, UINT16_MAX, 1393, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1394, UINT16_MAX, 1394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1395, UINT16_MAX, 1395, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1396, UINT16_MAX, 1396, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1397, UINT16_MAX, 1397, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1398, UINT16_MAX, 1398, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1399, UINT16_MAX, 1399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1400, UINT16_MAX, 1400, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1401, UINT16_MAX, 1401, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1402, UINT16_MAX, 1402, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1403, UINT16_MAX, 1403, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1404, UINT16_MAX, 1404, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1405, UINT16_MAX, 1405, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1406, UINT16_MAX, 1406, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1407, UINT16_MAX, 1407, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1408, UINT16_MAX, 1408, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1409, UINT16_MAX, 1409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1410, UINT16_MAX, 1410, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1411, UINT16_MAX, 1411, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1412, UINT16_MAX, 1412, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1413, UINT16_MAX, 1413, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1414, UINT16_MAX, 1414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1415, UINT16_MAX, 1415, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_L}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_L}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_V}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_V}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_T}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8368, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8369, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8370, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8371, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8372, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8373, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8374, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8375, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8376, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8377, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8378, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8380, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8381, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8382, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8383, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8385, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8386, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8387, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8388, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8389, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8390, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8391, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8392, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8393, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8395, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8396, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8397, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8398, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8400, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8401, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8402, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8403, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8404, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8405, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8406, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8407, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8408, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8410, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8411, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8412, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8413, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8415, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8416, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8418, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8419, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8420, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8421, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8422, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8423, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8424, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8425, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8426, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8427, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8428, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8429, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8430, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8431, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8432, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8433, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8434, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8435, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8436, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8437, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8438, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8439, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8440, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8441, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8442, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8443, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8444, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8446, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8447, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8448, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8449, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8450, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8451, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8452, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8453, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1417, 1417, UINT16_MAX, 1417, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1418, 1418, UINT16_MAX, 1418, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1419, 1419, UINT16_MAX, 1419, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1420, 1420, UINT16_MAX, 1420, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1421, 1421, UINT16_MAX, 1421, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1422, 1422, UINT16_MAX, 1422, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2751, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2754, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2757, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2760, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2763, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2766, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32806, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2769, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2772, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2775, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2778, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2781, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 955, 8184, UINT16_MAX, 8184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 957, 8186, UINT16_MAX, 8186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 969, 8196, UINT16_MAX, 8196, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 972, 8199, UINT16_MAX, 8199, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 973, 8200, UINT16_MAX, 8200, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 981, 8208, UINT16_MAX, 8208, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1004, 8231, UINT16_MAX, 8231, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1445, 8454, UINT16_MAX, 8454, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8455, UINT16_MAX, 8455, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8456, UINT16_MAX, 8456, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 94, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 214, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9688, 1498, UINT16_MAX, 1498, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9691, UINT16_MAX, 8457, UINT16_MAX, 8457, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9693, 1503, UINT16_MAX, 1503, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9696, UINT16_MAX, 8458, UINT16_MAX, 8458, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9698, 1508, UINT16_MAX, 1508, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9701, UINT16_MAX, 8459, UINT16_MAX, 8459, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9703, 1513, UINT16_MAX, 1513, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9706, UINT16_MAX, 8460, UINT16_MAX, 8460, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9708, 1518, UINT16_MAX, 1518, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9711, UINT16_MAX, 8461, UINT16_MAX, 8461, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9713, 1523, UINT16_MAX, 1523, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9716, UINT16_MAX, 8462, UINT16_MAX, 8462, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9718, 1528, UINT16_MAX, 1528, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9721, UINT16_MAX, 8463, UINT16_MAX, 8463, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9723, 1533, UINT16_MAX, 1533, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9726, UINT16_MAX, 8464, UINT16_MAX, 8464, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9728, 1538, UINT16_MAX, 1538, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9731, UINT16_MAX, 8465, UINT16_MAX, 8465, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9733, 1543, UINT16_MAX, 1543, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9736, UINT16_MAX, 8466, UINT16_MAX, 8466, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9738, 1548, UINT16_MAX, 1548, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9741, UINT16_MAX, 8467, UINT16_MAX, 8467, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9743, 1553, UINT16_MAX, 1553, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9746, UINT16_MAX, 8468, UINT16_MAX, 8468, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9748, 1558, UINT16_MAX, 1558, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9751, UINT16_MAX, 8469, UINT16_MAX, 8469, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9753, 1563, UINT16_MAX, 1563, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9756, UINT16_MAX, 8470, UINT16_MAX, 8470, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9758, 1568, UINT16_MAX, 1568, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9761, UINT16_MAX, 8471, UINT16_MAX, 8471, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9763, 1573, UINT16_MAX, 1573, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9766, UINT16_MAX, 8472, UINT16_MAX, 8472, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9768, 1578, UINT16_MAX, 1578, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9771, UINT16_MAX, 8473, UINT16_MAX, 8473, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9773, 1583, UINT16_MAX, 1583, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9776, UINT16_MAX, 8474, UINT16_MAX, 8474, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9778, 1588, UINT16_MAX, 1588, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9781, UINT16_MAX, 8475, UINT16_MAX, 8475, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9783, 1593, UINT16_MAX, 1593, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9786, UINT16_MAX, 8476, UINT16_MAX, 8476, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9788, 1598, UINT16_MAX, 1598, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9791, UINT16_MAX, 8477, UINT16_MAX, 8477, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9793, 1603, UINT16_MAX, 1603, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9796, UINT16_MAX, 8478, UINT16_MAX, 8478, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9798, 1608, UINT16_MAX, 1608, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9801, UINT16_MAX, 8479, UINT16_MAX, 8479, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9803, 1613, UINT16_MAX, 1613, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9806, UINT16_MAX, 8480, UINT16_MAX, 8480, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9808, 1618, UINT16_MAX, 1618, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9811, UINT16_MAX, 8481, UINT16_MAX, 8481, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9813, 1623, UINT16_MAX, 1623, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9816, UINT16_MAX, 8482, UINT16_MAX, 8482, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9818, 1628, UINT16_MAX, 1628, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9821, UINT16_MAX, 8483, UINT16_MAX, 8483, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9823, 1633, UINT16_MAX, 1633, UINT16_MAX, 2884, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9826, UINT16_MAX, 8484, UINT16_MAX, 8484, 2887, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9828, 1638, UINT16_MAX, 1638, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9831, UINT16_MAX, 8485, UINT16_MAX, 8485, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9833, 1643, UINT16_MAX, 1643, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9836, UINT16_MAX, 8486, UINT16_MAX, 8486, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9838, 1648, UINT16_MAX, 1648, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9841, UINT16_MAX, 8487, UINT16_MAX, 8487, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9843, 1653, UINT16_MAX, 1653, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9846, UINT16_MAX, 8488, UINT16_MAX, 8488, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9848, 1658, UINT16_MAX, 1658, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9851, UINT16_MAX, 8489, UINT16_MAX, 8489, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9853, 1663, UINT16_MAX, 1663, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9856, UINT16_MAX, 8490, UINT16_MAX, 8490, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9858, 1668, UINT16_MAX, 1668, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9861, UINT16_MAX, 8491, UINT16_MAX, 8491, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9863, 1673, UINT16_MAX, 1673, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9866, UINT16_MAX, 8492, UINT16_MAX, 8492, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9868, 1678, UINT16_MAX, 1678, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9871, UINT16_MAX, 8493, UINT16_MAX, 8493, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9873, 1683, UINT16_MAX, 1683, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9876, UINT16_MAX, 8494, UINT16_MAX, 8494, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9878, 1688, UINT16_MAX, 1688, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9881, UINT16_MAX, 8495, UINT16_MAX, 8495, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9883, 1693, UINT16_MAX, 1693, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9886, UINT16_MAX, 8496, UINT16_MAX, 8496, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9888, 1698, UINT16_MAX, 1698, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9891, UINT16_MAX, 8497, UINT16_MAX, 8497, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9893, 1703, UINT16_MAX, 1703, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9896, UINT16_MAX, 8498, UINT16_MAX, 8498, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9898, 1708, UINT16_MAX, 1708, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9901, UINT16_MAX, 8499, UINT16_MAX, 8499, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9903, 1713, UINT16_MAX, 1713, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9906, UINT16_MAX, 8500, UINT16_MAX, 8500, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9908, 1718, UINT16_MAX, 1718, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9911, UINT16_MAX, 8501, UINT16_MAX, 8501, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9913, 1723, UINT16_MAX, 1723, UINT16_MAX, 3006, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9916, UINT16_MAX, 8502, UINT16_MAX, 8502, 3009, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9918, 1728, UINT16_MAX, 1728, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9921, UINT16_MAX, 8503, UINT16_MAX, 8503, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9923, 1733, UINT16_MAX, 1733, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9926, UINT16_MAX, 8504, UINT16_MAX, 8504, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9928, 1738, UINT16_MAX, 1738, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9931, UINT16_MAX, 8505, UINT16_MAX, 8505, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9933, 1743, UINT16_MAX, 1743, UINT16_MAX, 3024, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9936, UINT16_MAX, 8506, UINT16_MAX, 8506, 3027, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9938, 1748, UINT16_MAX, 1748, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9941, UINT16_MAX, 8507, UINT16_MAX, 8507, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9943, 1753, UINT16_MAX, 1753, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9946, UINT16_MAX, 8508, UINT16_MAX, 8508, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9948, 1758, UINT16_MAX, 1758, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9951, UINT16_MAX, 8509, UINT16_MAX, 8509, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9953, 1763, UINT16_MAX, 1763, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9956, UINT16_MAX, 8510, UINT16_MAX, 8510, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9958, 1768, UINT16_MAX, 1768, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9961, UINT16_MAX, 8511, UINT16_MAX, 8511, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9963, 1773, UINT16_MAX, 1773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9966, UINT16_MAX, 8512, UINT16_MAX, 8512, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9968, 1778, UINT16_MAX, 1778, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9971, UINT16_MAX, 8513, UINT16_MAX, 8513, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9973, 1783, UINT16_MAX, 1783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9976, UINT16_MAX, 8514, UINT16_MAX, 8514, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9978, 1788, UINT16_MAX, 1788, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9981, UINT16_MAX, 8515, UINT16_MAX, 8515, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9983, 1793, UINT16_MAX, 1793, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9986, UINT16_MAX, 8516, UINT16_MAX, 8516, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9988, 1798, UINT16_MAX, 1798, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9991, UINT16_MAX, 8517, UINT16_MAX, 8517, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9993, 1803, UINT16_MAX, 1803, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9996, UINT16_MAX, 8518, UINT16_MAX, 8518, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9998, 1808, UINT16_MAX, 1808, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10001, UINT16_MAX, 8519, UINT16_MAX, 8519, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10003, 1813, UINT16_MAX, 1813, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10006, UINT16_MAX, 8520, UINT16_MAX, 8520, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10008, 1818, UINT16_MAX, 1818, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10011, UINT16_MAX, 8521, UINT16_MAX, 8521, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10013, 1823, UINT16_MAX, 1823, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10016, UINT16_MAX, 8522, UINT16_MAX, 8522, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10018, 1828, UINT16_MAX, 1828, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10021, UINT16_MAX, 8523, UINT16_MAX, 8523, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10023, 1833, UINT16_MAX, 1833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10026, UINT16_MAX, 8524, UINT16_MAX, 8524, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10028, 1838, UINT16_MAX, 1838, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10031, UINT16_MAX, 8525, UINT16_MAX, 8525, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10033, 1843, UINT16_MAX, 1843, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10036, UINT16_MAX, 8526, UINT16_MAX, 8526, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10038, 1848, UINT16_MAX, 1848, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10041, UINT16_MAX, 8527, UINT16_MAX, 8527, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10043, 1853, UINT16_MAX, 1853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10046, UINT16_MAX, 8528, UINT16_MAX, 8528, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10048, 1858, UINT16_MAX, 1858, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10051, UINT16_MAX, 8529, UINT16_MAX, 8529, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10053, 1863, UINT16_MAX, 1863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10056, UINT16_MAX, 8530, UINT16_MAX, 8530, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10058, 1868, UINT16_MAX, 1868, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10061, UINT16_MAX, 8531, UINT16_MAX, 8531, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10063, 10063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10065, 10065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10067, 10067, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10069, 10069, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 10071, 10071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10073, 1738, 8505, UINT16_MAX, 8505, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8322, UINT16_MAX, 8532, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10075, 1885, UINT16_MAX, 1885, UINT16_MAX, 3241, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10078, UINT16_MAX, 8533, UINT16_MAX, 8533, 3250, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10080, 1890, UINT16_MAX, 1890, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10083, UINT16_MAX, 8534, UINT16_MAX, 8534, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10085, 1895, UINT16_MAX, 1895, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10088, UINT16_MAX, 8535, UINT16_MAX, 8535, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10090, 1900, UINT16_MAX, 1900, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10093, UINT16_MAX, 8536, UINT16_MAX, 8536, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10095, 1905, UINT16_MAX, 1905, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10098, UINT16_MAX, 8537, UINT16_MAX, 8537, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10100, 1910, UINT16_MAX, 1910, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10103, UINT16_MAX, 8538, UINT16_MAX, 8538, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10105, 1915, UINT16_MAX, 1915, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10108, UINT16_MAX, 8539, UINT16_MAX, 8539, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10110, 1920, UINT16_MAX, 1920, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10113, UINT16_MAX, 8540, UINT16_MAX, 8540, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10115, 1925, UINT16_MAX, 1925, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10118, UINT16_MAX, 8541, UINT16_MAX, 8541, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10120, 1930, UINT16_MAX, 1930, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10123, UINT16_MAX, 8542, UINT16_MAX, 8542, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10125, 1935, UINT16_MAX, 1935, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10128, UINT16_MAX, 8543, UINT16_MAX, 8543, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10130, 1940, UINT16_MAX, 1940, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10133, UINT16_MAX, 8544, UINT16_MAX, 8544, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10135, 1945, UINT16_MAX, 1945, UINT16_MAX, 3455, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10138, UINT16_MAX, 8545, UINT16_MAX, 8545, 3458, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10140, 1950, UINT16_MAX, 1950, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10143, UINT16_MAX, 8546, UINT16_MAX, 8546, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10145, 1955, UINT16_MAX, 1955, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10148, UINT16_MAX, 8547, UINT16_MAX, 8547, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10150, 1960, UINT16_MAX, 1960, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10153, UINT16_MAX, 8548, UINT16_MAX, 8548, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10155, 1965, UINT16_MAX, 1965, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10158, UINT16_MAX, 8549, UINT16_MAX, 8549, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10160, 1970, UINT16_MAX, 1970, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10163, UINT16_MAX, 8550, UINT16_MAX, 8550, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10165, 1975, UINT16_MAX, 1975, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10168, UINT16_MAX, 8551, UINT16_MAX, 8551, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10170, 1980, UINT16_MAX, 1980, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10173, UINT16_MAX, 8552, UINT16_MAX, 8552, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10175, 1985, UINT16_MAX, 1985, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10178, UINT16_MAX, 8553, UINT16_MAX, 8553, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10180, 1990, UINT16_MAX, 1990, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10183, UINT16_MAX, 8554, UINT16_MAX, 8554, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10185, 1995, UINT16_MAX, 1995, UINT16_MAX, 3559, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10188, UINT16_MAX, 8555, UINT16_MAX, 8555, 3562, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10190, 2000, UINT16_MAX, 2000, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10193, UINT16_MAX, 8556, UINT16_MAX, 8556, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10195, 2005, UINT16_MAX, 2005, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10198, UINT16_MAX, 8557, UINT16_MAX, 8557, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10200, 2010, UINT16_MAX, 2010, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10203, UINT16_MAX, 8558, UINT16_MAX, 8558, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10205, 2015, UINT16_MAX, 2015, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10208, UINT16_MAX, 8559, UINT16_MAX, 8559, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10210, 2020, UINT16_MAX, 2020, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10213, UINT16_MAX, 8560, UINT16_MAX, 8560, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10215, 2025, UINT16_MAX, 2025, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10218, UINT16_MAX, 8561, UINT16_MAX, 8561, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10220, 2030, UINT16_MAX, 2030, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10223, UINT16_MAX, 8562, UINT16_MAX, 8562, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10225, 2035, UINT16_MAX, 2035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10228, UINT16_MAX, 8563, UINT16_MAX, 8563, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10230, 2040, UINT16_MAX, 2040, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10233, UINT16_MAX, 8564, UINT16_MAX, 8564, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10235, 2045, UINT16_MAX, 2045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10238, UINT16_MAX, 8565, UINT16_MAX, 8565, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10240, 2050, UINT16_MAX, 2050, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10243, UINT16_MAX, 8566, UINT16_MAX, 8566, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10245, 2055, UINT16_MAX, 2055, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10248, UINT16_MAX, 8567, UINT16_MAX, 8567, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10250, 2060, UINT16_MAX, 2060, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10253, UINT16_MAX, 8568, UINT16_MAX, 8568, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10255, 2065, UINT16_MAX, 2065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10258, UINT16_MAX, 8569, UINT16_MAX, 8569, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10260, 2070, UINT16_MAX, 2070, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10263, UINT16_MAX, 8570, UINT16_MAX, 8570, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10265, 2075, UINT16_MAX, 2075, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10268, UINT16_MAX, 8571, UINT16_MAX, 8571, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10270, 2080, UINT16_MAX, 2080, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10273, UINT16_MAX, 8572, UINT16_MAX, 8572, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10275, 2085, UINT16_MAX, 2085, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10278, UINT16_MAX, 8573, UINT16_MAX, 8573, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10280, 2090, UINT16_MAX, 2090, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10283, UINT16_MAX, 8574, UINT16_MAX, 8574, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10285, 2095, UINT16_MAX, 2095, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10288, UINT16_MAX, 8575, UINT16_MAX, 8575, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10290, 2100, UINT16_MAX, 2100, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10293, UINT16_MAX, 8576, UINT16_MAX, 8576, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10295, 2105, UINT16_MAX, 2105, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10298, UINT16_MAX, 8577, UINT16_MAX, 8577, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2108, UINT16_MAX, 2108, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8578, UINT16_MAX, 8578, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2109, UINT16_MAX, 2109, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8579, UINT16_MAX, 8579, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2110, UINT16_MAX, 2110, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8580, UINT16_MAX, 8580, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10303, UINT16_MAX, 8581, UINT16_MAX, 8581, 3761, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10305, UINT16_MAX, 8582, UINT16_MAX, 8582, 3814, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10307, UINT16_MAX, 8583, UINT16_MAX, 8583, 4793, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10309, UINT16_MAX, 8584, UINT16_MAX, 8584, 4796, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10311, UINT16_MAX, 8585, UINT16_MAX, 8585, 4799, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10313, UINT16_MAX, 8586, UINT16_MAX, 8586, 4802, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10315, UINT16_MAX, 8587, UINT16_MAX, 8587, 4805, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10317, UINT16_MAX, 8588, UINT16_MAX, 8588, 4808, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10319, 2129, UINT16_MAX, 2129, UINT16_MAX, 3867, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10322, 2132, UINT16_MAX, 2132, UINT16_MAX, 3920, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10325, 2135, UINT16_MAX, 2135, UINT16_MAX, 4811, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10328, 2138, UINT16_MAX, 2138, UINT16_MAX, 4814, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10331, 2141, UINT16_MAX, 2141, UINT16_MAX, 4817, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10334, 2144, UINT16_MAX, 2144, UINT16_MAX, 4820, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10337, 2147, UINT16_MAX, 2147, UINT16_MAX, 4823, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10340, 2150, UINT16_MAX, 2150, UINT16_MAX, 4826, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10343, UINT16_MAX, 8589, UINT16_MAX, 8589, 3973, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10345, UINT16_MAX, 8590, UINT16_MAX, 8590, 3977, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10347, UINT16_MAX, 8591, UINT16_MAX, 8591, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10349, UINT16_MAX, 8592, UINT16_MAX, 8592, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10351, UINT16_MAX, 8593, UINT16_MAX, 8593, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10353, UINT16_MAX, 8594, UINT16_MAX, 8594, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10355, 2165, UINT16_MAX, 2165, UINT16_MAX, 3981, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10358, 2168, UINT16_MAX, 2168, UINT16_MAX, 3985, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10361, 2171, UINT16_MAX, 2171, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10364, 2174, UINT16_MAX, 2174, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10367, 2177, UINT16_MAX, 2177, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10370, 2180, UINT16_MAX, 2180, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10373, UINT16_MAX, 8595, UINT16_MAX, 8595, 3989, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10375, UINT16_MAX, 8596, UINT16_MAX, 8596, 4042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10377, UINT16_MAX, 8597, UINT16_MAX, 8597, 4829, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10379, UINT16_MAX, 8598, UINT16_MAX, 8598, 4832, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10381, UINT16_MAX, 8599, UINT16_MAX, 8599, 4835, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10383, UINT16_MAX, 8600, UINT16_MAX, 8600, 4838, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10385, UINT16_MAX, 8601, UINT16_MAX, 8601, 4841, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10387, UINT16_MAX, 8602, UINT16_MAX, 8602, 4844, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10389, 2199, UINT16_MAX, 2199, UINT16_MAX, 4095, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10392, 2202, UINT16_MAX, 2202, UINT16_MAX, 4148, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10395, 2205, UINT16_MAX, 2205, UINT16_MAX, 4847, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10398, 2208, UINT16_MAX, 2208, UINT16_MAX, 4850, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10401, 2211, UINT16_MAX, 2211, UINT16_MAX, 4853, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10404, 2214, UINT16_MAX, 2214, UINT16_MAX, 4856, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10407, 2217, UINT16_MAX, 2217, UINT16_MAX, 4859, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10410, 2220, UINT16_MAX, 2220, UINT16_MAX, 4862, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10413, UINT16_MAX, 8603, UINT16_MAX, 8603, 4201, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10415, UINT16_MAX, 8604, UINT16_MAX, 8604, 4253, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10417, UINT16_MAX, 8605, UINT16_MAX, 8605, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10419, UINT16_MAX, 8606, UINT16_MAX, 8606, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10421, UINT16_MAX, 8607, UINT16_MAX, 8607, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10423, UINT16_MAX, 8608, UINT16_MAX, 8608, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10425, UINT16_MAX, 8609, UINT16_MAX, 8609, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10427, UINT16_MAX, 8610, UINT16_MAX, 8610, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10429, 2239, UINT16_MAX, 2239, UINT16_MAX, 4305, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10432, 2242, UINT16_MAX, 2242, UINT16_MAX, 4357, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10435, 2245, UINT16_MAX, 2245, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10438, 2248, UINT16_MAX, 2248, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10441, 2251, UINT16_MAX, 2251, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10444, 2254, UINT16_MAX, 2254, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10447, 2257, UINT16_MAX, 2257, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10450, 2260, UINT16_MAX, 2260, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10453, UINT16_MAX, 8611, UINT16_MAX, 8611, 4409, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10455, UINT16_MAX, 8612, UINT16_MAX, 8612, 4413, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10457, UINT16_MAX, 8613, UINT16_MAX, 8613, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10459, UINT16_MAX, 8614, UINT16_MAX, 8614, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10461, UINT16_MAX, 8615, UINT16_MAX, 8615, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10463, UINT16_MAX, 8616, UINT16_MAX, 8616, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10465, 2275, UINT16_MAX, 2275, UINT16_MAX, 4417, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10468, 2278, UINT16_MAX, 2278, UINT16_MAX, 4421, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10471, 2281, UINT16_MAX, 2281, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10474, 2284, UINT16_MAX, 2284, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10477, 2287, UINT16_MAX, 2287, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10480, 2290, UINT16_MAX, 2290, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10483, 10483, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4425, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10485, UINT16_MAX, 8617, UINT16_MAX, 8617, 4477, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10487, 18681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10492, UINT16_MAX, 8618, UINT16_MAX, 8618, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10494, 18688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10499, UINT16_MAX, 8619, UINT16_MAX, 8619, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10501, 18695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10506, UINT16_MAX, 8620, UINT16_MAX, 8620, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10508, 2318, UINT16_MAX, 2318, UINT16_MAX, 4529, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10511, 2321, UINT16_MAX, 2321, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10514, 2324, UINT16_MAX, 2324, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10517, 2327, UINT16_MAX, 2327, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10520, UINT16_MAX, 8621, UINT16_MAX, 8621, 4581, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10522, UINT16_MAX, 8622, UINT16_MAX, 8622, 4634, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10524, UINT16_MAX, 8623, UINT16_MAX, 8623, 4865, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10526, UINT16_MAX, 8624, UINT16_MAX, 8624, 4868, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10528, UINT16_MAX, 8625, UINT16_MAX, 8625, 4871, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10530, UINT16_MAX, 8626, UINT16_MAX, 8626, 4874, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10532, UINT16_MAX, 8627, UINT16_MAX, 8627, 4877, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10534, UINT16_MAX, 8628, UINT16_MAX, 8628, 4880, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10536, 2346, UINT16_MAX, 2346, UINT16_MAX, 4687, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10539, 2349, UINT16_MAX, 2349, UINT16_MAX, 4740, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10542, 2352, UINT16_MAX, 2352, UINT16_MAX, 4883, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10545, 2355, UINT16_MAX, 2355, UINT16_MAX, 4886, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10548, 2358, UINT16_MAX, 2358, UINT16_MAX, 4889, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10551, 2361, UINT16_MAX, 2361, UINT16_MAX, 4892, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10554, 2364, UINT16_MAX, 2364, UINT16_MAX, 4895, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10557, 2367, UINT16_MAX, 2367, UINT16_MAX, 4898, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10560, UINT16_MAX, 8629, UINT16_MAX, 8629, 4901, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 820, UINT16_MAX, 8630, UINT16_MAX, 8630, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10562, UINT16_MAX, 8631, UINT16_MAX, 8631, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 824, UINT16_MAX, 8632, UINT16_MAX, 8632, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10564, UINT16_MAX, 8633, UINT16_MAX, 8633, 4910, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 827, UINT16_MAX, 8634, UINT16_MAX, 8634, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10566, UINT16_MAX, 8635, UINT16_MAX, 8635, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 830, UINT16_MAX, 8636, UINT16_MAX, 8636, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10568, UINT16_MAX, 8637, UINT16_MAX, 8637, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 833, UINT16_MAX, 8638, UINT16_MAX, 8638, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10570, UINT16_MAX, 8639, UINT16_MAX, 8639, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 836, UINT16_MAX, 8640, UINT16_MAX, 8640, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10572, UINT16_MAX, 8641, UINT16_MAX, 8641, 5030, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 839, UINT16_MAX, 8642, UINT16_MAX, 8642, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10574, 10576, 8643, UINT16_MAX, 8643, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10578, 10580, 8644, UINT16_MAX, 8644, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10582, 10584, 8645, UINT16_MAX, 8645, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10586, 10588, 8646, UINT16_MAX, 8646, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10590, 10592, 8647, UINT16_MAX, 8647, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10594, 10596, 8648, UINT16_MAX, 8648, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10598, 10600, 8649, UINT16_MAX, 8649, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10602, 10604, 8650, UINT16_MAX, 8650, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10606, 10576, UINT16_MAX, 8651, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10608, 10580, UINT16_MAX, 8652, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10610, 10584, UINT16_MAX, 8653, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10612, 10588, UINT16_MAX, 8654, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10614, 10592, UINT16_MAX, 8655, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10616, 10596, UINT16_MAX, 8656, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10618, 10600, UINT16_MAX, 8657, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10620, 10604, UINT16_MAX, 8658, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10622, 10624, 8659, UINT16_MAX, 8659, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10626, 10628, 8660, UINT16_MAX, 8660, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10630, 10632, 8661, UINT16_MAX, 8661, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10634, 10636, 8662, UINT16_MAX, 8662, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10638, 10640, 8663, UINT16_MAX, 8663, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10642, 10644, 8664, UINT16_MAX, 8664, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10646, 10648, 8665, UINT16_MAX, 8665, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10650, 10652, 8666, UINT16_MAX, 8666, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10654, 10624, UINT16_MAX, 8667, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10656, 10628, UINT16_MAX, 8668, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10658, 10632, UINT16_MAX, 8669, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10660, 10636, UINT16_MAX, 8670, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10662, 10640, UINT16_MAX, 8671, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10664, 10644, UINT16_MAX, 8672, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10666, 10648, UINT16_MAX, 8673, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10668, 10652, UINT16_MAX, 8674, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10670, 10672, 8675, UINT16_MAX, 8675, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10674, 10676, 8676, UINT16_MAX, 8676, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10678, 10680, 8677, UINT16_MAX, 8677, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10682, 10684, 8678, UINT16_MAX, 8678, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10686, 10688, 8679, UINT16_MAX, 8679, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10690, 10692, 8680, UINT16_MAX, 8680, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10694, 10696, 8681, UINT16_MAX, 8681, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10698, 10700, 8682, UINT16_MAX, 8682, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10702, 10672, UINT16_MAX, 8683, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10704, 10676, UINT16_MAX, 8684, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10706, 10680, UINT16_MAX, 8685, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10708, 10684, UINT16_MAX, 8686, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10710, 10688, UINT16_MAX, 8687, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10712, 10692, UINT16_MAX, 8688, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10714, 10696, UINT16_MAX, 8689, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10716, 10700, UINT16_MAX, 8690, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10718, UINT16_MAX, 8691, UINT16_MAX, 8691, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10720, UINT16_MAX, 8692, UINT16_MAX, 8692, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10722, 10724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10726, 10728, 8693, UINT16_MAX, 8693, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10730, 10732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10734, 10734, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4907, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10736, 18930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10741, 2551, UINT16_MAX, 2551, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10744, 2554, UINT16_MAX, 2554, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10747, 2557, UINT16_MAX, 2557, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2558, 2559, UINT16_MAX, 2559, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10752, 10728, UINT16_MAX, 8694, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 807, 807, 7099, UINT16_MAX, 7099, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4919, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10760, 10762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10764, 10766, 8695, UINT16_MAX, 8695, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10768, 10770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10772, 10772, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4916, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10774, 18968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10779, 2589, UINT16_MAX, 2589, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2590, 2591, UINT16_MAX, 2591, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10784, 2594, UINT16_MAX, 2594, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2595, 2596, UINT16_MAX, 2596, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10789, 10766, UINT16_MAX, 8696, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10797, UINT16_MAX, 8697, UINT16_MAX, 8697, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10799, UINT16_MAX, 8698, UINT16_MAX, 8698, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10801, 18995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 2614, 17226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10807, 10807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10809, 19003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10814, 2624, UINT16_MAX, 2624, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10817, 2627, UINT16_MAX, 2627, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10820, 2630, UINT16_MAX, 2630, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2631, 2632, UINT16_MAX, 2632, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10831, UINT16_MAX, 8699, UINT16_MAX, 8699, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10833, UINT16_MAX, 8700, UINT16_MAX, 8700, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10835, 19029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 2648, 17267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10841, 10841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10843, UINT16_MAX, 8701, UINT16_MAX, 8701, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10845, 10845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10847, 19041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10852, 2662, UINT16_MAX, 2662, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10855, 2665, UINT16_MAX, 2665, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10858, 2668, UINT16_MAX, 2668, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2669, 2670, UINT16_MAX, 2670, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10863, 2673, UINT16_MAX, 2673, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10870, 10872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10874, 10876, 8702, UINT16_MAX, 8702, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10878, 10880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10882, 10882, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10884, 19078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10889, 2699, UINT16_MAX, 2699, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2700, 2701, UINT16_MAX, 2701, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10894, 2704, UINT16_MAX, 2704, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2705, 2706, UINT16_MAX, 2706, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10899, 10876, UINT16_MAX, 8703, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4971, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 2712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 2713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_NOBREAK, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_ZWJ}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NOBREAK, 2714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 2717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZL, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_ZP, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDF, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 10915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 19109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_FSI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 2754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 2755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 2754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 2755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 10951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 10974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 10979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2790, 866, UINT16_MAX, 866, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1456, 10, UINT16_MAX, 10, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2791, 65, UINT16_MAX, 65, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2793, UINT16_MAX, 2793, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 2803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8704, UINT16_MAX, 8704, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 27386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 11042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1454, 2852, UINT16_MAX, 2852, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11045, 2855, UINT16_MAX, 2855, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19240, 2859, UINT16_MAX, 2859, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11052, 2862, UINT16_MAX, 2862, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2863, 2864, UINT16_MAX, 2864, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11057, 2867, UINT16_MAX, 2867, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19252, 2871, UINT16_MAX, 2871, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 27448, 2876, UINT16_MAX, 2876, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11069, 2879, UINT16_MAX, 2879, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2880, 2881, UINT16_MAX, 2881, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11074, 2884, UINT16_MAX, 2884, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19269, 2888, UINT16_MAX, 2888, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1457, 2889, UINT16_MAX, 2889, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2767, 2890, UINT16_MAX, 2890, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1449, 2891, UINT16_MAX, 2891, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1458, 2892, UINT16_MAX, 2892, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8, UINT16_MAX, 8705, UINT16_MAX, 8705, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11085, UINT16_MAX, 8706, UINT16_MAX, 8706, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19279, UINT16_MAX, 8707, UINT16_MAX, 8707, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11090, UINT16_MAX, 8708, UINT16_MAX, 8708, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21, UINT16_MAX, 8709, UINT16_MAX, 8709, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11092, UINT16_MAX, 8710, UINT16_MAX, 8710, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19286, UINT16_MAX, 8711, UINT16_MAX, 8711, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 27481, UINT16_MAX, 8712, UINT16_MAX, 8712, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11101, UINT16_MAX, 8713, UINT16_MAX, 8713, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23, UINT16_MAX, 8714, UINT16_MAX, 8714, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11103, UINT16_MAX, 8715, UINT16_MAX, 8715, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19297, UINT16_MAX, 8716, UINT16_MAX, 8716, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11, UINT16_MAX, 8717, UINT16_MAX, 8717, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2, UINT16_MAX, 8718, UINT16_MAX, 8718, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3, UINT16_MAX, 8719, UINT16_MAX, 8719, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12, UINT16_MAX, 8720, UINT16_MAX, 8720, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2916, UINT16_MAX, 2916, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8721, UINT16_MAX, 8721, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5039, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5045, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5048, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5054, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5051, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5057, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5060, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5063, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5066, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5069, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5072, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5075, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5078, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5081, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5090, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5087, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5099, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5102, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5105, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5108, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5111, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5114, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5117, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5120, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5147, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5150, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5123, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5126, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5129, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5132, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5153, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5156, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5135, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5138, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5141, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5144, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5159, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5162, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5165, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5168, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1446, 3242, UINT16_MAX, 3242, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1448, 3243, UINT16_MAX, 3243, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2767, 3244, UINT16_MAX, 3244, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1449, 3245, UINT16_MAX, 3245, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1450, 3246, UINT16_MAX, 3246, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2792, 3247, UINT16_MAX, 3247, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1452, 3248, UINT16_MAX, 3248, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1453, 3249, UINT16_MAX, 3249, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1454, 3250, UINT16_MAX, 3250, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1455, 3251, UINT16_MAX, 3251, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1456, 3252, UINT16_MAX, 3252, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1457, 3253, UINT16_MAX, 3253, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1458, 3254, UINT16_MAX, 3254, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1459, 3255, UINT16_MAX, 3255, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1460, 3256, UINT16_MAX, 3256, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1462, 3257, UINT16_MAX, 3257, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2781, 3258, UINT16_MAX, 3258, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1463, 3259, UINT16_MAX, 3259, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3260, 3261, UINT16_MAX, 3261, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1464, 3262, UINT16_MAX, 3262, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1465, 3263, UINT16_MAX, 3263, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2863, 3264, UINT16_MAX, 3264, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1466, 3265, UINT16_MAX, 3265, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2880, 3266, UINT16_MAX, 3266, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3267, 3268, UINT16_MAX, 3268, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2789, 3269, UINT16_MAX, 3269, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 0, UINT16_MAX, 8722, UINT16_MAX, 8722, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1, UINT16_MAX, 8723, UINT16_MAX, 8723, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2, UINT16_MAX, 8724, UINT16_MAX, 8724, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3, UINT16_MAX, 8725, UINT16_MAX, 8725, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4, UINT16_MAX, 8726, UINT16_MAX, 8726, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5, UINT16_MAX, 8727, UINT16_MAX, 8727, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 6, UINT16_MAX, 8728, UINT16_MAX, 8728, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7, UINT16_MAX, 8729, UINT16_MAX, 8729, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 8, UINT16_MAX, 8730, UINT16_MAX, 8730, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 9, UINT16_MAX, 8731, UINT16_MAX, 8731, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 10, UINT16_MAX, 8732, UINT16_MAX, 8732, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 11, UINT16_MAX, 8733, UINT16_MAX, 8733, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12, UINT16_MAX, 8734, UINT16_MAX, 8734, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 13, UINT16_MAX, 8735, UINT16_MAX, 8735, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 14, UINT16_MAX, 8736, UINT16_MAX, 8736, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15, UINT16_MAX, 8737, UINT16_MAX, 8737, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 16, UINT16_MAX, 8738, UINT16_MAX, 8738, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 17, UINT16_MAX, 8739, UINT16_MAX, 8739, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 18, UINT16_MAX, 8740, UINT16_MAX, 8740, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 19, UINT16_MAX, 8741, UINT16_MAX, 8741, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 20, UINT16_MAX, 8742, UINT16_MAX, 8742, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21, UINT16_MAX, 8743, UINT16_MAX, 8743, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 22, UINT16_MAX, 8744, UINT16_MAX, 8744, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 23, UINT16_MAX, 8745, UINT16_MAX, 8745, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 24, UINT16_MAX, 8746, UINT16_MAX, 8746, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 25, UINT16_MAX, 8747, UINT16_MAX, 8747, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_E_BASE}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_BASE}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5171, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3284, UINT16_MAX, 3284, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3285, UINT16_MAX, 3285, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3286, UINT16_MAX, 3286, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3287, UINT16_MAX, 3287, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3288, UINT16_MAX, 3288, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3289, UINT16_MAX, 3289, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3290, UINT16_MAX, 3290, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3291, UINT16_MAX, 3291, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3292, UINT16_MAX, 3292, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3293, UINT16_MAX, 3293, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3294, UINT16_MAX, 3294, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3295, UINT16_MAX, 3295, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3296, UINT16_MAX, 3296, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3297, UINT16_MAX, 3297, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3298, UINT16_MAX, 3298, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3299, UINT16_MAX, 3299, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3300, UINT16_MAX, 3300, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3301, UINT16_MAX, 3301, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3302, UINT16_MAX, 3302, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3303, UINT16_MAX, 3303, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3304, UINT16_MAX, 3304, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3305, UINT16_MAX, 3305, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3306, UINT16_MAX, 3306, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3307, UINT16_MAX, 3307, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3308, UINT16_MAX, 3308, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3309, UINT16_MAX, 3309, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3310, UINT16_MAX, 3310, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3311, UINT16_MAX, 3311, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3312, UINT16_MAX, 3312, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3313, UINT16_MAX, 3313, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3314, UINT16_MAX, 3314, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3315, UINT16_MAX, 3315, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3316, UINT16_MAX, 3316, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3317, UINT16_MAX, 3317, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3318, UINT16_MAX, 3318, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3319, UINT16_MAX, 3319, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3320, UINT16_MAX, 3320, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3321, UINT16_MAX, 3321, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3322, UINT16_MAX, 3322, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3323, UINT16_MAX, 3323, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3324, UINT16_MAX, 3324, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3325, UINT16_MAX, 3325, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3326, UINT16_MAX, 3326, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3327, UINT16_MAX, 3327, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3328, UINT16_MAX, 3328, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3329, UINT16_MAX, 3329, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3330, UINT16_MAX, 3330, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8748, UINT16_MAX, 8748, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8749, UINT16_MAX, 8749, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8750, UINT16_MAX, 8750, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8751, UINT16_MAX, 8751, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8752, UINT16_MAX, 8752, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8753, UINT16_MAX, 8753, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8754, UINT16_MAX, 8754, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8755, UINT16_MAX, 8755, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8756, UINT16_MAX, 8756, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8757, UINT16_MAX, 8757, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8758, UINT16_MAX, 8758, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8759, UINT16_MAX, 8759, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8760, UINT16_MAX, 8760, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8761, UINT16_MAX, 8761, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8762, UINT16_MAX, 8762, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8763, UINT16_MAX, 8763, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8764, UINT16_MAX, 8764, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8765, UINT16_MAX, 8765, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8766, UINT16_MAX, 8766, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8767, UINT16_MAX, 8767, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8768, UINT16_MAX, 8768, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8769, UINT16_MAX, 8769, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8770, UINT16_MAX, 8770, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8771, UINT16_MAX, 8771, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8772, UINT16_MAX, 8772, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8773, UINT16_MAX, 8773, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8774, UINT16_MAX, 8774, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8775, UINT16_MAX, 8775, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8776, UINT16_MAX, 8776, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8777, UINT16_MAX, 8777, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8778, UINT16_MAX, 8778, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8779, UINT16_MAX, 8779, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8780, UINT16_MAX, 8780, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8781, UINT16_MAX, 8781, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8782, UINT16_MAX, 8782, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8783, UINT16_MAX, 8783, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8784, UINT16_MAX, 8784, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8785, UINT16_MAX, 8785, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8786, UINT16_MAX, 8786, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8787, UINT16_MAX, 8787, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8788, UINT16_MAX, 8788, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8789, UINT16_MAX, 8789, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8790, UINT16_MAX, 8790, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8791, UINT16_MAX, 8791, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8792, UINT16_MAX, 8792, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8793, UINT16_MAX, 8793, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8794, UINT16_MAX, 8794, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3331, UINT16_MAX, 3331, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8795, UINT16_MAX, 8795, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3332, UINT16_MAX, 3332, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3333, UINT16_MAX, 3333, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3334, UINT16_MAX, 3334, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8796, UINT16_MAX, 8796, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8797, UINT16_MAX, 8797, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3335, UINT16_MAX, 3335, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8798, UINT16_MAX, 8798, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3336, UINT16_MAX, 3336, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8799, UINT16_MAX, 8799, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3337, UINT16_MAX, 3337, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8800, UINT16_MAX, 8800, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1468, UINT16_MAX, 1468, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1486, UINT16_MAX, 1486, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1467, UINT16_MAX, 1467, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1475, UINT16_MAX, 1475, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3338, UINT16_MAX, 3338, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8801, UINT16_MAX, 8801, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3339, UINT16_MAX, 3339, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8802, UINT16_MAX, 8802, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3340, UINT16_MAX, 3340, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3341, UINT16_MAX, 3341, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3342, UINT16_MAX, 3342, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8803, UINT16_MAX, 8803, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3343, UINT16_MAX, 3343, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8804, UINT16_MAX, 8804, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3344, UINT16_MAX, 3344, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8805, UINT16_MAX, 8805, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3345, UINT16_MAX, 3345, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8806, UINT16_MAX, 8806, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3346, UINT16_MAX, 3346, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8807, UINT16_MAX, 8807, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3347, UINT16_MAX, 3347, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8808, UINT16_MAX, 8808, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3348, UINT16_MAX, 3348, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8809, UINT16_MAX, 8809, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3349, UINT16_MAX, 3349, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8810, UINT16_MAX, 8810, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3350, UINT16_MAX, 3350, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8811, UINT16_MAX, 8811, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3351, UINT16_MAX, 3351, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8812, UINT16_MAX, 8812, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3352, UINT16_MAX, 3352, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8813, UINT16_MAX, 8813, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3353, UINT16_MAX, 3353, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8814, UINT16_MAX, 8814, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3354, UINT16_MAX, 3354, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8815, UINT16_MAX, 8815, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3355, UINT16_MAX, 3355, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8816, UINT16_MAX, 8816, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3356, UINT16_MAX, 3356, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8817, UINT16_MAX, 8817, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3357, UINT16_MAX, 3357, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8818, UINT16_MAX, 8818, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3358, UINT16_MAX, 3358, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8819, UINT16_MAX, 8819, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3359, UINT16_MAX, 3359, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8820, UINT16_MAX, 8820, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3360, UINT16_MAX, 3360, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8821, UINT16_MAX, 8821, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3361, UINT16_MAX, 3361, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8822, UINT16_MAX, 8822, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3362, UINT16_MAX, 3362, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8823, UINT16_MAX, 8823, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3363, UINT16_MAX, 3363, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8824, UINT16_MAX, 8824, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3364, UINT16_MAX, 3364, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8825, UINT16_MAX, 8825, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3365, UINT16_MAX, 3365, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8826, UINT16_MAX, 8826, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3366, UINT16_MAX, 3366, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8827, UINT16_MAX, 8827, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3367, UINT16_MAX, 3367, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8828, UINT16_MAX, 8828, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3368, UINT16_MAX, 3368, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8829, UINT16_MAX, 8829, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3369, UINT16_MAX, 3369, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8830, UINT16_MAX, 8830, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3370, UINT16_MAX, 3370, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8831, UINT16_MAX, 8831, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3371, UINT16_MAX, 3371, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8832, UINT16_MAX, 8832, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3372, UINT16_MAX, 3372, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8833, UINT16_MAX, 8833, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3373, UINT16_MAX, 3373, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8834, UINT16_MAX, 8834, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3374, UINT16_MAX, 3374, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8835, UINT16_MAX, 8835, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3375, UINT16_MAX, 3375, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8836, UINT16_MAX, 8836, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3376, UINT16_MAX, 3376, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8837, UINT16_MAX, 8837, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3377, UINT16_MAX, 3377, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8838, UINT16_MAX, 8838, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3378, UINT16_MAX, 3378, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8839, UINT16_MAX, 8839, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3379, UINT16_MAX, 3379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8840, UINT16_MAX, 8840, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3380, UINT16_MAX, 3380, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8841, UINT16_MAX, 8841, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3381, UINT16_MAX, 3381, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8842, UINT16_MAX, 8842, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3382, UINT16_MAX, 3382, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8843, UINT16_MAX, 8843, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3383, UINT16_MAX, 3383, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8844, UINT16_MAX, 8844, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3384, UINT16_MAX, 3384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8845, UINT16_MAX, 8845, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3385, UINT16_MAX, 3385, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8846, UINT16_MAX, 8846, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3386, UINT16_MAX, 3386, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8847, UINT16_MAX, 8847, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3387, UINT16_MAX, 3387, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8848, UINT16_MAX, 8848, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3388, UINT16_MAX, 3388, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8849, UINT16_MAX, 8849, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3389, UINT16_MAX, 3389, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8850, UINT16_MAX, 8850, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3390, UINT16_MAX, 3390, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8851, UINT16_MAX, 8851, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3391, UINT16_MAX, 3391, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8852, UINT16_MAX, 8852, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3392, UINT16_MAX, 3392, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8853, UINT16_MAX, 8853, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3393, UINT16_MAX, 3393, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8854, UINT16_MAX, 8854, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3394, UINT16_MAX, 3394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8855, UINT16_MAX, 8855, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8856, UINT16_MAX, 8856, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8857, UINT16_MAX, 8857, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8858, UINT16_MAX, 8858, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8859, UINT16_MAX, 8859, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8860, UINT16_MAX, 8860, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8861, UINT16_MAX, 8861, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8862, UINT16_MAX, 8862, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8863, UINT16_MAX, 8863, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8864, UINT16_MAX, 8864, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8865, UINT16_MAX, 8865, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8866, UINT16_MAX, 8866, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8867, UINT16_MAX, 8867, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8868, UINT16_MAX, 8868, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8869, UINT16_MAX, 8869, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8870, UINT16_MAX, 8870, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8871, UINT16_MAX, 8871, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8872, UINT16_MAX, 8872, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8873, UINT16_MAX, 8873, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8874, UINT16_MAX, 8874, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8875, UINT16_MAX, 8875, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8876, UINT16_MAX, 8876, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8877, UINT16_MAX, 8877, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8878, UINT16_MAX, 8878, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8879, UINT16_MAX, 8879, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8880, UINT16_MAX, 8880, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8881, UINT16_MAX, 8881, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8882, UINT16_MAX, 8882, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8883, UINT16_MAX, 8883, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8884, UINT16_MAX, 8884, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8885, UINT16_MAX, 8885, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8886, UINT16_MAX, 8886, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8887, UINT16_MAX, 8887, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8888, UINT16_MAX, 8888, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8889, UINT16_MAX, 8889, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8890, UINT16_MAX, 8890, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8891, UINT16_MAX, 8891, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8892, UINT16_MAX, 8892, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8893, UINT16_MAX, 8893, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8894, UINT16_MAX, 8894, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8895, UINT16_MAX, 8895, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_WIDE, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 218, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 224, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5239, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5174, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5177, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5180, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5183, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5186, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5189, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5192, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5195, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5198, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5201, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5204, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5207, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5210, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5213, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5216, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5219, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5223, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5227, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5231, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5235, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32820, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32821, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5242, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 11863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 11865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5310, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5245, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5248, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5251, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5254, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5257, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5260, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5263, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5266, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5269, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5272, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5275, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5278, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5281, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5284, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5287, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5290, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5294, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5298, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5302, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5306, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5313, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5316, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5319, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5322, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5325, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 11927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 11929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 44912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4067, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 36898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 28711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4149, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4161, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13081, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13083, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5009, UINT16_MAX, 5009, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8896, UINT16_MAX, 8896, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5010, UINT16_MAX, 5010, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8897, UINT16_MAX, 8897, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5011, UINT16_MAX, 5011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8898, UINT16_MAX, 8898, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5012, UINT16_MAX, 5012, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8899, UINT16_MAX, 8899, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5013, UINT16_MAX, 5013, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8900, UINT16_MAX, 8900, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1445, UINT16_MAX, 1445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8454, UINT16_MAX, 8454, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5014, UINT16_MAX, 5014, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8901, UINT16_MAX, 8901, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5015, UINT16_MAX, 5015, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8902, UINT16_MAX, 8902, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5016, UINT16_MAX, 5016, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8903, UINT16_MAX, 8903, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5017, UINT16_MAX, 5017, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8904, UINT16_MAX, 8904, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5018, UINT16_MAX, 5018, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8905, UINT16_MAX, 8905, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5019, UINT16_MAX, 5019, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8906, UINT16_MAX, 8906, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5020, UINT16_MAX, 5020, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8907, UINT16_MAX, 8907, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5021, UINT16_MAX, 5021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8908, UINT16_MAX, 8908, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5022, UINT16_MAX, 5022, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8909, UINT16_MAX, 8909, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5023, UINT16_MAX, 5023, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8910, UINT16_MAX, 8910, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5024, UINT16_MAX, 5024, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8911, UINT16_MAX, 8911, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5025, UINT16_MAX, 5025, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8912, UINT16_MAX, 8912, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5026, UINT16_MAX, 5026, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8913, UINT16_MAX, 8913, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5027, UINT16_MAX, 5027, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8914, UINT16_MAX, 8914, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5028, UINT16_MAX, 5028, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8915, UINT16_MAX, 8915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5029, UINT16_MAX, 5029, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8916, UINT16_MAX, 8916, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5030, UINT16_MAX, 5030, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8917, UINT16_MAX, 8917, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5031, UINT16_MAX, 5031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8918, UINT16_MAX, 8918, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5032, UINT16_MAX, 5032, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8919, UINT16_MAX, 8919, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5033, UINT16_MAX, 5033, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8920, UINT16_MAX, 8920, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5034, UINT16_MAX, 5034, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8921, UINT16_MAX, 8921, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5035, UINT16_MAX, 5035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8922, UINT16_MAX, 8922, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5036, UINT16_MAX, 5036, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8923, UINT16_MAX, 8923, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5037, UINT16_MAX, 5037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8924, UINT16_MAX, 8924, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5038, UINT16_MAX, 5038, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8925, UINT16_MAX, 8925, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5039, UINT16_MAX, 5039, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8926, UINT16_MAX, 8926, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5040, UINT16_MAX, 5040, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8927, UINT16_MAX, 8927, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5041, UINT16_MAX, 5041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8928, UINT16_MAX, 8928, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5042, UINT16_MAX, 5042, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8929, UINT16_MAX, 8929, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5043, UINT16_MAX, 5043, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8930, UINT16_MAX, 8930, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5044, UINT16_MAX, 5044, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8931, UINT16_MAX, 8931, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5045, UINT16_MAX, 5045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8932, UINT16_MAX, 8932, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5046, UINT16_MAX, 5046, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8933, UINT16_MAX, 8933, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5047, UINT16_MAX, 5047, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8934, UINT16_MAX, 8934, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5048, UINT16_MAX, 5048, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8935, UINT16_MAX, 8935, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5049, UINT16_MAX, 5049, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8936, UINT16_MAX, 8936, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5050, UINT16_MAX, 5050, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8937, UINT16_MAX, 8937, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5051, UINT16_MAX, 5051, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8938, UINT16_MAX, 8938, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5052, UINT16_MAX, 5052, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8939, UINT16_MAX, 8939, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5053, UINT16_MAX, 5053, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8940, UINT16_MAX, 8940, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5054, UINT16_MAX, 5054, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8941, UINT16_MAX, 8941, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5055, UINT16_MAX, 5055, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8942, UINT16_MAX, 8942, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5056, UINT16_MAX, 5056, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8943, UINT16_MAX, 8943, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5057, UINT16_MAX, 5057, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8944, UINT16_MAX, 8944, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5058, UINT16_MAX, 5058, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8945, UINT16_MAX, 8945, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5059, UINT16_MAX, 5059, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8946, UINT16_MAX, 8946, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5060, UINT16_MAX, 5060, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8947, UINT16_MAX, 8947, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5061, UINT16_MAX, 5061, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8948, UINT16_MAX, 8948, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5062, UINT16_MAX, 5062, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8949, UINT16_MAX, 8949, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5063, UINT16_MAX, 5063, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8950, UINT16_MAX, 8950, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5064, UINT16_MAX, 5064, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8951, UINT16_MAX, 8951, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5065, UINT16_MAX, 5065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8952, UINT16_MAX, 8952, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5066, UINT16_MAX, 5066, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8953, UINT16_MAX, 8953, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5067, UINT16_MAX, 5067, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8954, UINT16_MAX, 8954, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5068, UINT16_MAX, 5068, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8955, UINT16_MAX, 8955, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5069, UINT16_MAX, 5069, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8956, UINT16_MAX, 8956, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5070, UINT16_MAX, 5070, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8957, UINT16_MAX, 8957, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5071, UINT16_MAX, 5071, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8958, UINT16_MAX, 8958, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5072, UINT16_MAX, 5072, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8959, UINT16_MAX, 8959, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5073, UINT16_MAX, 5073, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8960, UINT16_MAX, 8960, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5074, UINT16_MAX, 5074, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8961, UINT16_MAX, 8961, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5075, UINT16_MAX, 5075, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8962, UINT16_MAX, 8962, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5076, UINT16_MAX, 5076, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8963, UINT16_MAX, 8963, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5077, UINT16_MAX, 5077, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8964, UINT16_MAX, 8964, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5078, UINT16_MAX, 5078, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8965, UINT16_MAX, 8965, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5079, UINT16_MAX, 5079, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8966, UINT16_MAX, 8966, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5080, UINT16_MAX, 5080, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8967, UINT16_MAX, 8967, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5081, UINT16_MAX, 5081, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8968, UINT16_MAX, 8968, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5082, UINT16_MAX, 5082, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8969, UINT16_MAX, 8969, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5083, UINT16_MAX, 5083, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8970, UINT16_MAX, 8970, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5084, UINT16_MAX, 5084, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8971, UINT16_MAX, 8971, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5085, UINT16_MAX, 5085, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5086, UINT16_MAX, 5086, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8972, UINT16_MAX, 8972, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5087, UINT16_MAX, 5087, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8973, UINT16_MAX, 8973, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5088, UINT16_MAX, 5088, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8974, UINT16_MAX, 8974, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5089, UINT16_MAX, 5089, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8975, UINT16_MAX, 8975, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5090, UINT16_MAX, 5090, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8976, UINT16_MAX, 8976, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5091, UINT16_MAX, 5091, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8977, UINT16_MAX, 8977, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1479, UINT16_MAX, 1479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5092, UINT16_MAX, 5092, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8978, UINT16_MAX, 8978, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5093, UINT16_MAX, 5093, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8979, UINT16_MAX, 8979, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5094, UINT16_MAX, 5094, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8980, UINT16_MAX, 8980, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5095, UINT16_MAX, 5095, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8981, UINT16_MAX, 8981, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5096, UINT16_MAX, 5096, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8982, UINT16_MAX, 8982, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5097, UINT16_MAX, 5097, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8983, UINT16_MAX, 8983, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5098, UINT16_MAX, 5098, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8984, UINT16_MAX, 8984, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5099, UINT16_MAX, 5099, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8985, UINT16_MAX, 8985, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5100, UINT16_MAX, 5100, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8986, UINT16_MAX, 8986, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5101, UINT16_MAX, 5101, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8987, UINT16_MAX, 8987, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5102, UINT16_MAX, 5102, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8988, UINT16_MAX, 8988, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5103, UINT16_MAX, 5103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8989, UINT16_MAX, 8989, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 785, UINT16_MAX, 785, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1470, UINT16_MAX, 1470, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1478, UINT16_MAX, 1478, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5104, UINT16_MAX, 5104, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1480, UINT16_MAX, 1480, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5105, UINT16_MAX, 5105, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5106, UINT16_MAX, 5106, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1482, UINT16_MAX, 1482, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5107, UINT16_MAX, 5107, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5108, UINT16_MAX, 5108, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8990, UINT16_MAX, 8990, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5109, UINT16_MAX, 5109, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8991, UINT16_MAX, 8991, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8992, UINT16_MAX, 8992, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5113, 5113, UINT16_MAX, 5113, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5114, 5114, UINT16_MAX, 5114, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5115, 5115, UINT16_MAX, 5115, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5116, 5116, UINT16_MAX, 5116, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5117, 5117, UINT16_MAX, 5117, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5118, 5118, UINT16_MAX, 5118, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5119, 5119, UINT16_MAX, 5119, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5120, 5120, UINT16_MAX, 5120, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5121, 5121, UINT16_MAX, 5121, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5122, 5122, UINT16_MAX, 5122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5123, 5123, UINT16_MAX, 5123, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5124, 5124, UINT16_MAX, 5124, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5125, 5125, UINT16_MAX, 5125, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5126, 5126, UINT16_MAX, 5126, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5127, 5127, UINT16_MAX, 5127, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5128, 5128, UINT16_MAX, 5128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5129, 5129, UINT16_MAX, 5129, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5130, 5130, UINT16_MAX, 5130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5131, 5131, UINT16_MAX, 5131, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5132, 5132, UINT16_MAX, 5132, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5133, 5133, UINT16_MAX, 5133, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5134, 5134, UINT16_MAX, 5134, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5135, 5135, UINT16_MAX, 5135, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5136, 5136, UINT16_MAX, 5136, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5137, 5137, UINT16_MAX, 5137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5138, 5138, UINT16_MAX, 5138, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5139, 5139, UINT16_MAX, 5139, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5140, 5140, UINT16_MAX, 5140, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5141, 5141, UINT16_MAX, 5141, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5142, 5142, UINT16_MAX, 5142, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5143, 5143, UINT16_MAX, 5143, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5144, 5144, UINT16_MAX, 5144, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5145, 5145, UINT16_MAX, 5145, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5146, 5146, UINT16_MAX, 5146, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5147, 5147, UINT16_MAX, 5147, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5148, 5148, UINT16_MAX, 5148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5149, 5149, UINT16_MAX, 5149, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5150, 5150, UINT16_MAX, 5150, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5151, 5151, UINT16_MAX, 5151, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5152, 5152, UINT16_MAX, 5152, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5153, 5153, UINT16_MAX, 5153, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5154, 5154, UINT16_MAX, 5154, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5155, 5155, UINT16_MAX, 5155, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5156, 5156, UINT16_MAX, 5156, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5157, 5157, UINT16_MAX, 5157, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5158, 5158, UINT16_MAX, 5158, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5159, 5159, UINT16_MAX, 5159, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5160, 5160, UINT16_MAX, 5160, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5161, 5161, UINT16_MAX, 5161, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5162, 5162, UINT16_MAX, 5162, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5163, 5163, UINT16_MAX, 5163, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5164, 5164, UINT16_MAX, 5164, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5165, 5165, UINT16_MAX, 5165, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5166, 5166, UINT16_MAX, 5166, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5167, 5167, UINT16_MAX, 5167, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5168, 5168, UINT16_MAX, 5168, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5169, 5169, UINT16_MAX, 5169, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5170, 5170, UINT16_MAX, 5170, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5171, 5171, UINT16_MAX, 5171, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5172, 5172, UINT16_MAX, 5172, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5173, 5173, UINT16_MAX, 5173, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5174, 5174, UINT16_MAX, 5174, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5175, 5175, UINT16_MAX, 5175, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5176, 5176, UINT16_MAX, 5176, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5177, 5177, UINT16_MAX, 5177, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5178, 5178, UINT16_MAX, 5178, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5179, 5179, UINT16_MAX, 5179, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5180, 5180, UINT16_MAX, 5180, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5181, 5181, UINT16_MAX, 5181, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5182, 5182, UINT16_MAX, 5182, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5183, 5183, UINT16_MAX, 5183, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5184, 5184, UINT16_MAX, 5184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5185, 5185, UINT16_MAX, 5185, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5186, 5186, UINT16_MAX, 5186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5187, 5187, UINT16_MAX, 5187, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5188, 5188, UINT16_MAX, 5188, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5189, 5189, UINT16_MAX, 5189, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5190, 5190, UINT16_MAX, 5190, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5191, 5191, UINT16_MAX, 5191, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5192, 5192, UINT16_MAX, 5192, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_LV}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_LVT}, {UTF8PROC_CATEGORY_CS, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_CO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5374, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13798, 13798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13800, 13800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13802, 13802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21996, 21996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21999, 21999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13810, 13812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13812, 13812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13814, 13814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13816, 13816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13818, 13818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13820, 13820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13822, 13822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 26, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 2794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 2797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_FONT, 2754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, 13899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 13962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 13972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 13984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22672, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 63762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 63781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 2757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 2758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 6477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 6462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 6450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 2717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 6453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 2754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 6481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 2754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 6481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 2717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1446, 6562, UINT16_MAX, 6562, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1448, 6563, UINT16_MAX, 6563, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2767, 6564, UINT16_MAX, 6564, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1449, 6565, UINT16_MAX, 6565, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1450, 6566, UINT16_MAX, 6566, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2792, 6567, UINT16_MAX, 6567, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1452, 6568, UINT16_MAX, 6568, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1453, 6569, UINT16_MAX, 6569, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1454, 6570, UINT16_MAX, 6570, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1455, 6571, UINT16_MAX, 6571, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1456, 6572, UINT16_MAX, 6572, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1457, 6573, UINT16_MAX, 6573, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1458, 6574, UINT16_MAX, 6574, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1459, 6575, UINT16_MAX, 6575, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1460, 6576, UINT16_MAX, 6576, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1462, 6577, UINT16_MAX, 6577, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2781, 6578, UINT16_MAX, 6578, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1463, 6579, UINT16_MAX, 6579, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3260, 6580, UINT16_MAX, 6580, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1464, 6581, UINT16_MAX, 6581, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1465, 6582, UINT16_MAX, 6582, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2863, 6583, UINT16_MAX, 6583, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1466, 6584, UINT16_MAX, 6584, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2880, 6585, UINT16_MAX, 6585, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3267, 6586, UINT16_MAX, 6586, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2789, 6587, UINT16_MAX, 6587, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 0, UINT16_MAX, 8993, UINT16_MAX, 8993, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1, UINT16_MAX, 8994, UINT16_MAX, 8994, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2, UINT16_MAX, 8995, UINT16_MAX, 8995, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3, UINT16_MAX, 8996, UINT16_MAX, 8996, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 4, UINT16_MAX, 8997, UINT16_MAX, 8997, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 5, UINT16_MAX, 8998, UINT16_MAX, 8998, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 6, UINT16_MAX, 8999, UINT16_MAX, 8999, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 7, UINT16_MAX, 9000, UINT16_MAX, 9000, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 8, UINT16_MAX, 9001, UINT16_MAX, 9001, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 9, UINT16_MAX, 9002, UINT16_MAX, 9002, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 10, UINT16_MAX, 9003, UINT16_MAX, 9003, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 11, UINT16_MAX, 9004, UINT16_MAX, 9004, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 12, UINT16_MAX, 9005, UINT16_MAX, 9005, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 13, UINT16_MAX, 9006, UINT16_MAX, 9006, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 14, UINT16_MAX, 9007, UINT16_MAX, 9007, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 15, UINT16_MAX, 9008, UINT16_MAX, 9008, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 16, UINT16_MAX, 9009, UINT16_MAX, 9009, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 17, UINT16_MAX, 9010, UINT16_MAX, 9010, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 18, UINT16_MAX, 9011, UINT16_MAX, 9011, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 19, UINT16_MAX, 9012, UINT16_MAX, 9012, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 20, UINT16_MAX, 9013, UINT16_MAX, 9013, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 21, UINT16_MAX, 9014, UINT16_MAX, 9014, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 22, UINT16_MAX, 9015, UINT16_MAX, 9015, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 23, UINT16_MAX, 9016, UINT16_MAX, 9016, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 24, UINT16_MAX, 9017, UINT16_MAX, 9017, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 25, UINT16_MAX, 9018, UINT16_MAX, 9018, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6672, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6673, UINT16_MAX, 6673, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6675, UINT16_MAX, 6675, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6677, UINT16_MAX, 6677, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6679, UINT16_MAX, 6679, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6681, UINT16_MAX, 6681, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6683, UINT16_MAX, 6683, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6685, UINT16_MAX, 6685, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6687, UINT16_MAX, 6687, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6689, UINT16_MAX, 6689, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6691, UINT16_MAX, 6691, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6693, UINT16_MAX, 6693, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6695, UINT16_MAX, 6695, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6697, UINT16_MAX, 6697, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6699, UINT16_MAX, 6699, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6701, UINT16_MAX, 6701, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6703, UINT16_MAX, 6703, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6705, UINT16_MAX, 6705, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6707, UINT16_MAX, 6707, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6709, UINT16_MAX, 6709, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6711, UINT16_MAX, 6711, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6713, UINT16_MAX, 6713, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6715, UINT16_MAX, 6715, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6717, UINT16_MAX, 6717, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6719, UINT16_MAX, 6719, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6721, UINT16_MAX, 6721, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6723, UINT16_MAX, 6723, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6725, UINT16_MAX, 6725, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6727, UINT16_MAX, 6727, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6729, UINT16_MAX, 6729, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6731, UINT16_MAX, 6731, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6733, UINT16_MAX, 6733, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6735, UINT16_MAX, 6735, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6737, UINT16_MAX, 6737, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6739, UINT16_MAX, 6739, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6741, UINT16_MAX, 6741, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6743, UINT16_MAX, 6743, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6745, UINT16_MAX, 6745, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6747, UINT16_MAX, 6747, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6749, UINT16_MAX, 6749, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6751, UINT16_MAX, 6751, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9019, UINT16_MAX, 9019, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9021, UINT16_MAX, 9021, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9023, UINT16_MAX, 9023, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9025, UINT16_MAX, 9025, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9027, UINT16_MAX, 9027, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9029, UINT16_MAX, 9029, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9031, UINT16_MAX, 9031, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9033, UINT16_MAX, 9033, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9035, UINT16_MAX, 9035, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9037, UINT16_MAX, 9037, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9039, UINT16_MAX, 9039, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9041, UINT16_MAX, 9041, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9043, UINT16_MAX, 9043, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9045, UINT16_MAX, 9045, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9047, UINT16_MAX, 9047, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9049, UINT16_MAX, 9049, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9051, UINT16_MAX, 9051, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9053, UINT16_MAX, 9053, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9055, UINT16_MAX, 9055, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9057, UINT16_MAX, 9057, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9059, UINT16_MAX, 9059, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9061, UINT16_MAX, 9061, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9063, UINT16_MAX, 9063, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9065, UINT16_MAX, 9065, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9067, UINT16_MAX, 9067, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9069, UINT16_MAX, 9069, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9071, UINT16_MAX, 9071, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9073, UINT16_MAX, 9073, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9075, UINT16_MAX, 9075, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9077, UINT16_MAX, 9077, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9079, UINT16_MAX, 9079, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9081, UINT16_MAX, 9081, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9083, UINT16_MAX, 9083, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9085, UINT16_MAX, 9085, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9087, UINT16_MAX, 9087, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9089, UINT16_MAX, 9089, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9091, UINT16_MAX, 9091, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9093, UINT16_MAX, 9093, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9095, UINT16_MAX, 9095, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9097, UINT16_MAX, 9097, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6753, UINT16_MAX, 6753, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6755, UINT16_MAX, 6755, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6757, UINT16_MAX, 6757, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6759, UINT16_MAX, 6759, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6761, UINT16_MAX, 6761, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6763, UINT16_MAX, 6763, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6765, UINT16_MAX, 6765, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6767, UINT16_MAX, 6767, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6769, UINT16_MAX, 6769, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6771, UINT16_MAX, 6771, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6773, UINT16_MAX, 6773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6775, UINT16_MAX, 6775, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6777, UINT16_MAX, 6777, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6779, UINT16_MAX, 6779, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6781, UINT16_MAX, 6781, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6783, UINT16_MAX, 6783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6785, UINT16_MAX, 6785, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6787, UINT16_MAX, 6787, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6789, UINT16_MAX, 6789, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6791, UINT16_MAX, 6791, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6793, UINT16_MAX, 6793, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6795, UINT16_MAX, 6795, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6797, UINT16_MAX, 6797, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6799, UINT16_MAX, 6799, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6801, UINT16_MAX, 6801, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6803, UINT16_MAX, 6803, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6805, UINT16_MAX, 6805, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6807, UINT16_MAX, 6807, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6809, UINT16_MAX, 6809, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6811, UINT16_MAX, 6811, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6813, UINT16_MAX, 6813, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6815, UINT16_MAX, 6815, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6817, UINT16_MAX, 6817, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6819, UINT16_MAX, 6819, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6821, UINT16_MAX, 6821, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6823, UINT16_MAX, 6823, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9099, UINT16_MAX, 9099, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9101, UINT16_MAX, 9101, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9103, UINT16_MAX, 9103, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9105, UINT16_MAX, 9105, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9107, UINT16_MAX, 9107, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9109, UINT16_MAX, 9109, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9111, UINT16_MAX, 9111, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9113, UINT16_MAX, 9113, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9115, UINT16_MAX, 9115, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9117, UINT16_MAX, 9117, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9119, UINT16_MAX, 9119, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9121, UINT16_MAX, 9121, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9123, UINT16_MAX, 9123, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9125, UINT16_MAX, 9125, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9127, UINT16_MAX, 9127, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9129, UINT16_MAX, 9129, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9131, UINT16_MAX, 9131, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9133, UINT16_MAX, 9133, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9135, UINT16_MAX, 9135, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9137, UINT16_MAX, 9137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9139, UINT16_MAX, 9139, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9141, UINT16_MAX, 9141, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9143, UINT16_MAX, 9143, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9145, UINT16_MAX, 9145, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9147, UINT16_MAX, 9147, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9149, UINT16_MAX, 9149, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9151, UINT16_MAX, 9151, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9153, UINT16_MAX, 9153, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9155, UINT16_MAX, 9155, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9157, UINT16_MAX, 9157, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9159, UINT16_MAX, 9159, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9161, UINT16_MAX, 9161, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9163, UINT16_MAX, 9163, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9165, UINT16_MAX, 9165, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9167, UINT16_MAX, 9167, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9169, UINT16_MAX, 9169, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6825, UINT16_MAX, 6825, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6827, UINT16_MAX, 6827, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6829, UINT16_MAX, 6829, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6831, UINT16_MAX, 6831, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6833, UINT16_MAX, 6833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6835, UINT16_MAX, 6835, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6837, UINT16_MAX, 6837, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6839, UINT16_MAX, 6839, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6841, UINT16_MAX, 6841, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6843, UINT16_MAX, 6843, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6845, UINT16_MAX, 6845, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6847, UINT16_MAX, 6847, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6849, UINT16_MAX, 6849, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6851, UINT16_MAX, 6851, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6853, UINT16_MAX, 6853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6855, UINT16_MAX, 6855, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6857, UINT16_MAX, 6857, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6859, UINT16_MAX, 6859, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6861, UINT16_MAX, 6861, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6863, UINT16_MAX, 6863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6865, UINT16_MAX, 6865, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6867, UINT16_MAX, 6867, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6869, UINT16_MAX, 6869, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6871, UINT16_MAX, 6871, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6873, UINT16_MAX, 6873, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6875, UINT16_MAX, 6875, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6877, UINT16_MAX, 6877, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6879, UINT16_MAX, 6879, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6881, UINT16_MAX, 6881, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6883, UINT16_MAX, 6883, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6885, UINT16_MAX, 6885, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6887, UINT16_MAX, 6887, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6889, UINT16_MAX, 6889, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6891, UINT16_MAX, 6891, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6893, UINT16_MAX, 6893, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6895, UINT16_MAX, 6895, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6897, UINT16_MAX, 6897, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6899, UINT16_MAX, 6899, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6901, UINT16_MAX, 6901, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6903, UINT16_MAX, 6903, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6905, UINT16_MAX, 6905, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6907, UINT16_MAX, 6907, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6909, UINT16_MAX, 6909, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6911, UINT16_MAX, 6911, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6913, UINT16_MAX, 6913, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6915, UINT16_MAX, 6915, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6917, UINT16_MAX, 6917, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6919, UINT16_MAX, 6919, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6921, UINT16_MAX, 6921, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6923, UINT16_MAX, 6923, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6925, UINT16_MAX, 6925, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9171, UINT16_MAX, 9171, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9173, UINT16_MAX, 9173, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9175, UINT16_MAX, 9175, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9177, UINT16_MAX, 9177, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9179, UINT16_MAX, 9179, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9181, UINT16_MAX, 9181, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9183, UINT16_MAX, 9183, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9185, UINT16_MAX, 9185, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9187, UINT16_MAX, 9187, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9189, UINT16_MAX, 9189, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9191, UINT16_MAX, 9191, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9193, UINT16_MAX, 9193, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9195, UINT16_MAX, 9195, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9197, UINT16_MAX, 9197, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9199, UINT16_MAX, 9199, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9201, UINT16_MAX, 9201, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9203, UINT16_MAX, 9203, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9205, UINT16_MAX, 9205, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9207, UINT16_MAX, 9207, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9209, UINT16_MAX, 9209, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9211, UINT16_MAX, 9211, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9213, UINT16_MAX, 9213, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9215, UINT16_MAX, 9215, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9217, UINT16_MAX, 9217, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9219, UINT16_MAX, 9219, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9221, UINT16_MAX, 9221, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9223, UINT16_MAX, 9223, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9225, UINT16_MAX, 9225, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9227, UINT16_MAX, 9227, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9229, UINT16_MAX, 9229, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9231, UINT16_MAX, 9231, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9233, UINT16_MAX, 9233, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9235, UINT16_MAX, 9235, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9237, UINT16_MAX, 9237, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9239, UINT16_MAX, 9239, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9241, UINT16_MAX, 9241, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9243, UINT16_MAX, 9243, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9245, UINT16_MAX, 9245, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9247, UINT16_MAX, 9247, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9249, UINT16_MAX, 9249, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9251, UINT16_MAX, 9251, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9253, UINT16_MAX, 9253, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9255, UINT16_MAX, 9255, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9257, UINT16_MAX, 9257, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9259, UINT16_MAX, 9259, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9261, UINT16_MAX, 9261, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9263, UINT16_MAX, 9263, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9265, UINT16_MAX, 9265, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9267, UINT16_MAX, 9267, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9269, UINT16_MAX, 9269, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9271, UINT16_MAX, 9271, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5328, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5332, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5336, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49206, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49208, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 15131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 15135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5340, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5344, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49210, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5348, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49212, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49216, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5354, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49214, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49218, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49220, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5362, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5366, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6975, UINT16_MAX, 6975, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6977, UINT16_MAX, 6977, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6979, UINT16_MAX, 6979, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6981, UINT16_MAX, 6981, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6983, UINT16_MAX, 6983, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6985, UINT16_MAX, 6985, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6987, UINT16_MAX, 6987, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6989, UINT16_MAX, 6989, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6991, UINT16_MAX, 6991, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6993, UINT16_MAX, 6993, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6995, UINT16_MAX, 6995, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6997, UINT16_MAX, 6997, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6999, UINT16_MAX, 6999, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7001, UINT16_MAX, 7001, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7003, UINT16_MAX, 7003, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7005, UINT16_MAX, 7005, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7007, UINT16_MAX, 7007, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7009, UINT16_MAX, 7009, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7011, UINT16_MAX, 7011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7013, UINT16_MAX, 7013, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7015, UINT16_MAX, 7015, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7017, UINT16_MAX, 7017, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7019, UINT16_MAX, 7019, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7021, UINT16_MAX, 7021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7023, UINT16_MAX, 7023, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7025, UINT16_MAX, 7025, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7027, UINT16_MAX, 7027, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7029, UINT16_MAX, 7029, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7031, UINT16_MAX, 7031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7033, UINT16_MAX, 7033, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7035, UINT16_MAX, 7035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7037, UINT16_MAX, 7037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9273, UINT16_MAX, 9273, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9275, UINT16_MAX, 9275, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9277, UINT16_MAX, 9277, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9279, UINT16_MAX, 9279, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9281, UINT16_MAX, 9281, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9283, UINT16_MAX, 9283, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9285, UINT16_MAX, 9285, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9287, UINT16_MAX, 9287, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9289, UINT16_MAX, 9289, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9291, UINT16_MAX, 9291, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9293, UINT16_MAX, 9293, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9295, UINT16_MAX, 9295, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9297, UINT16_MAX, 9297, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9299, UINT16_MAX, 9299, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9301, UINT16_MAX, 9301, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9303, UINT16_MAX, 9303, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9305, UINT16_MAX, 9305, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9307, UINT16_MAX, 9307, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9309, UINT16_MAX, 9309, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9311, UINT16_MAX, 9311, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9313, UINT16_MAX, 9313, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9315, UINT16_MAX, 9315, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9317, UINT16_MAX, 9317, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9319, UINT16_MAX, 9319, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9321, UINT16_MAX, 9321, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9323, UINT16_MAX, 9323, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9325, UINT16_MAX, 9325, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9327, UINT16_MAX, 9327, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9329, UINT16_MAX, 9329, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9331, UINT16_MAX, 9331, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9333, UINT16_MAX, 9333, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9335, UINT16_MAX, 9335, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_PREPEND}, {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5370, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5374, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5378, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49222, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 226, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49224, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49226, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49228, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49230, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49232, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5390, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5394, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5398, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5404, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 7113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 7113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7121, UINT16_MAX, 7121, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7123, UINT16_MAX, 7123, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7125, UINT16_MAX, 7125, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7127, UINT16_MAX, 7127, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7129, UINT16_MAX, 7129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7131, UINT16_MAX, 7131, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7133, UINT16_MAX, 7133, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7135, UINT16_MAX, 7135, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7137, UINT16_MAX, 7137, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7139, UINT16_MAX, 7139, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7141, UINT16_MAX, 7141, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7143, UINT16_MAX, 7143, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7145, UINT16_MAX, 7145, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7147, UINT16_MAX, 7147, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7149, UINT16_MAX, 7149, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7151, UINT16_MAX, 7151, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7153, UINT16_MAX, 7153, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7155, UINT16_MAX, 7155, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7157, UINT16_MAX, 7157, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7159, UINT16_MAX, 7159, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7161, UINT16_MAX, 7161, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7163, UINT16_MAX, 7163, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7165, UINT16_MAX, 7165, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7167, UINT16_MAX, 7167, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7169, UINT16_MAX, 7169, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7171, UINT16_MAX, 7171, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7173, UINT16_MAX, 7173, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7175, UINT16_MAX, 7175, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7177, UINT16_MAX, 7177, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7179, UINT16_MAX, 7179, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7181, UINT16_MAX, 7181, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7183, UINT16_MAX, 7183, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7185, UINT16_MAX, 7185, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7187, UINT16_MAX, 7187, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9337, UINT16_MAX, 9337, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9339, UINT16_MAX, 9339, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9341, UINT16_MAX, 9341, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9343, UINT16_MAX, 9343, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9345, UINT16_MAX, 9345, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9347, UINT16_MAX, 9347, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9349, UINT16_MAX, 9349, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9351, UINT16_MAX, 9351, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9353, UINT16_MAX, 9353, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9355, UINT16_MAX, 9355, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9357, UINT16_MAX, 9357, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9359, UINT16_MAX, 9359, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9361, UINT16_MAX, 9361, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9363, UINT16_MAX, 9363, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9365, UINT16_MAX, 9365, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9367, UINT16_MAX, 9367, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9369, UINT16_MAX, 9369, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9371, UINT16_MAX, 9371, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9373, UINT16_MAX, 9373, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9375, UINT16_MAX, 9375, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9377, UINT16_MAX, 9377, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9379, UINT16_MAX, 9379, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9381, UINT16_MAX, 9381, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9383, UINT16_MAX, 9383, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9385, UINT16_MAX, 9385, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9387, UINT16_MAX, 9387, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9389, UINT16_MAX, 9389, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9391, UINT16_MAX, 9391, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9393, UINT16_MAX, 9393, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9395, UINT16_MAX, 9395, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9397, UINT16_MAX, 9397, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9399, UINT16_MAX, 9399, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9401, UINT16_MAX, 9401, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9403, UINT16_MAX, 9403, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 5732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 23689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 15502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 15504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_MODIFIER}, {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_BASE_GAZ}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7672, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7946, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER}, }; static const utf8proc_uint16_t utf8proc_combinations[] = { 0, 46, 192, 193, 194, 195, 196, 197, 0, 256, 258, 260, 550, 461, 0, 0, 512, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7680, 7840, 0, 0, 0, 0, 0, 7842, 1, 11, 262, 264, 0, 0, 0, 199, 0, 0, 0, 266, 268, 0, 46, 200, 201, 202, 7868, 203, 0, 552, 274, 276, 280, 278, 282, 0, 0, 516, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7864, 0, 7704, 7706, 0, 0, 7866, 0, 46, 204, 205, 206, 296, 207, 0, 0, 298, 300, 302, 304, 463, 0, 0, 520, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7882, 0, 0, 7724, 0, 0, 7880, 0, 42, 504, 323, 0, 209, 0, 0, 325, 0, 0, 0, 7748, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7750, 7752, 7754, 0, 46, 210, 211, 212, 213, 214, 0, 0, 332, 334, 490, 558, 465, 336, 416, 524, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7884, 0, 0, 0, 0, 0, 7886, 0, 46, 217, 218, 219, 360, 220, 366, 0, 362, 364, 370, 0, 467, 368, 431, 532, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7908, 0, 7798, 7796, 0, 7794, 7910, 0, 46, 7922, 221, 374, 7928, 376, 0, 0, 562, 0, 0, 7822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7924, 0, 0, 0, 0, 0, 7926, 0, 46, 224, 225, 226, 227, 228, 229, 0, 257, 259, 261, 551, 462, 0, 0, 513, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7681, 7841, 0, 0, 0, 0, 0, 7843, 1, 11, 263, 265, 0, 0, 0, 231, 0, 0, 0, 267, 269, 0, 46, 232, 233, 234, 7869, 235, 0, 553, 275, 277, 281, 279, 283, 0, 0, 517, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7865, 0, 7705, 7707, 0, 0, 7867, 0, 46, 236, 237, 238, 297, 239, 0, 0, 299, 301, 303, 0, 464, 0, 0, 521, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7883, 0, 0, 7725, 0, 0, 7881, 0, 42, 505, 324, 0, 241, 0, 0, 326, 0, 0, 0, 7749, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7751, 7753, 7755, 0, 46, 242, 243, 244, 245, 246, 0, 0, 333, 335, 491, 559, 466, 337, 417, 525, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7885, 0, 0, 0, 0, 0, 7887, 0, 46, 249, 250, 251, 361, 252, 367, 0, 363, 365, 371, 0, 468, 369, 432, 533, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7909, 0, 7799, 7797, 0, 7795, 7911, 0, 46, 7923, 253, 375, 7929, 255, 7833, 0, 563, 0, 0, 7823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 7927, 6, 42, 7696, 0, 0, 0, 7690, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7692, 7694, 7698, 6, 42, 7697, 0, 0, 0, 7691, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7693, 7695, 7699, 1, 11, 500, 284, 0, 0, 0, 290, 7712, 286, 0, 288, 486, 1, 11, 501, 285, 0, 0, 0, 291, 7713, 287, 0, 289, 487, 2, 44, 292, 0, 7718, 0, 7720, 0, 0, 0, 7714, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7722, 2, 44, 293, 0, 7719, 0, 7721, 0, 0, 0, 7715, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7717, 7830, 0, 0, 7723, 2, 2, 308, 2, 11, 309, 0, 0, 0, 0, 0, 0, 0, 0, 496, 1, 41, 7728, 0, 0, 0, 0, 310, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7730, 7732, 1, 41, 7729, 0, 0, 0, 0, 311, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7731, 7733, 1, 42, 313, 0, 0, 0, 0, 315, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7734, 7738, 7740, 1, 42, 314, 0, 0, 0, 0, 316, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7735, 7739, 7741, 1, 41, 340, 0, 0, 0, 0, 342, 0, 0, 0, 7768, 344, 0, 0, 528, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7770, 7774, 1, 41, 341, 0, 0, 0, 0, 343, 0, 0, 0, 7769, 345, 0, 0, 529, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7771, 7775, 1, 40, 346, 348, 0, 0, 0, 350, 0, 0, 0, 7776, 352, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7778, 1, 40, 347, 349, 0, 0, 0, 351, 0, 0, 0, 7777, 353, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7779, 6, 42, 354, 0, 0, 0, 7786, 356, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7788, 7790, 7792, 4, 42, 7831, 0, 355, 0, 0, 0, 7787, 357, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7789, 7791, 7793, 0, 40, 7808, 7810, 372, 0, 7812, 0, 0, 0, 0, 0, 7814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7816, 0, 40, 7809, 7811, 373, 0, 7813, 7832, 0, 0, 0, 0, 7815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7817, 1, 41, 377, 7824, 0, 0, 0, 0, 0, 0, 0, 379, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7826, 7828, 1, 41, 378, 7825, 0, 0, 0, 0, 0, 0, 0, 380, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7827, 7829, 0, 11, 475, 471, 0, 0, 0, 0, 0, 469, 0, 0, 0, 473, 0, 11, 476, 472, 0, 0, 0, 0, 0, 470, 0, 0, 0, 474, 7, 7, 478, 7, 7, 479, 7, 7, 480, 7, 7, 481, 1, 7, 508, 0, 0, 0, 0, 0, 482, 1, 7, 509, 0, 0, 0, 0, 0, 483, 7, 7, 492, 7, 7, 493, 11, 11, 494, 11, 11, 495, 1, 1, 506, 1, 1, 507, 1, 1, 510, 1, 1, 511, 7, 7, 554, 7, 7, 555, 1, 7, 7756, 0, 0, 7758, 0, 0, 556, 1, 7, 7757, 0, 0, 7759, 0, 0, 557, 7, 7, 560, 7, 7, 561, 0, 49, 8173, 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8129, 0, 50, 8122, 902, 0, 0, 0, 0, 0, 8121, 8120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7944, 7945, 0, 8124, 0, 48, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 50, 8138, 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7976, 7977, 0, 8140, 0, 48, 8154, 906, 0, 0, 938, 0, 0, 8153, 8152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7992, 7993, 0, 48, 8184, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8008, 8009, 0, 48, 8170, 910, 0, 0, 939, 0, 0, 8169, 8168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 50, 8186, 911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8040, 8041, 0, 8188, 0, 49, 8146, 912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8151, 0, 50, 8048, 940, 0, 0, 0, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 8118, 8115, 0, 48, 8050, 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7952, 7953, 0, 50, 8052, 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7968, 7969, 8134, 8131, 0, 49, 8054, 943, 0, 0, 970, 0, 0, 8145, 8144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7984, 7985, 8150, 0, 49, 8162, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8167, 0, 49, 8058, 973, 0, 0, 971, 0, 0, 8161, 8160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8016, 8017, 8166, 0, 48, 8056, 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8000, 8001, 0, 50, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8032, 8033, 8182, 8179, 1, 4, 979, 0, 0, 980, 0, 8, 1024, 0, 0, 0, 1025, 0, 0, 0, 1238, 1, 1, 1027, 4, 4, 1031, 1, 1, 1036, 0, 8, 1037, 0, 0, 0, 1252, 0, 0, 1250, 1049, 4, 12, 1264, 0, 0, 1262, 1038, 0, 0, 0, 1266, 0, 8, 1117, 0, 0, 0, 1253, 0, 0, 1251, 1081, 0, 8, 1104, 0, 0, 0, 1105, 0, 0, 0, 1239, 1, 1, 1107, 4, 4, 1111, 1, 1, 1116, 4, 12, 1265, 0, 0, 1263, 1118, 0, 0, 0, 1267, 14, 14, 1142, 14, 14, 1143, 4, 8, 1244, 0, 0, 0, 1217, 4, 8, 1245, 0, 0, 0, 1218, 4, 8, 1234, 0, 0, 0, 1232, 4, 8, 1235, 0, 0, 0, 1233, 4, 4, 1242, 4, 4, 1243, 4, 4, 1246, 4, 4, 1247, 4, 4, 1254, 4, 4, 1255, 4, 4, 1258, 4, 4, 1259, 4, 4, 1260, 4, 4, 1261, 4, 4, 1268, 4, 4, 1269, 4, 4, 1272, 4, 4, 1273, 17, 19, 1570, 1571, 1573, 18, 18, 1572, 18, 18, 1574, 18, 18, 1728, 18, 18, 1730, 18, 18, 1747, 20, 20, 2345, 20, 20, 2353, 20, 20, 2356, 21, 22, 2507, 2508, 23, 25, 2888, 2891, 2892, 26, 26, 2964, 26, 27, 3020, 3018, 27, 27, 3019, 28, 28, 3144, 29, 29, 3264, 29, 31, 3271, 3272, 3274, 29, 29, 3275, 32, 33, 3402, 3404, 32, 32, 3403, 34, 36, 3546, 3548, 3550, 34, 34, 3549, 37, 37, 4134, 38, 38, 6918, 38, 38, 6920, 38, 38, 6922, 38, 38, 6924, 38, 38, 6926, 38, 38, 6930, 38, 38, 6971, 38, 38, 6973, 38, 38, 6976, 38, 38, 6977, 38, 38, 6979, 10, 41, 7682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7684, 7686, 10, 41, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7685, 7687, 1, 1, 7688, 1, 1, 7689, 0, 1, 7700, 7702, 0, 1, 7701, 7703, 8, 8, 7708, 8, 8, 7709, 10, 10, 7710, 10, 10, 7711, 1, 1, 7726, 1, 1, 7727, 7, 7, 7736, 7, 7, 7737, 1, 40, 7742, 0, 0, 0, 0, 0, 0, 0, 0, 7744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7746, 1, 40, 7743, 0, 0, 0, 0, 0, 0, 0, 0, 7745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7747, 0, 1, 7760, 7762, 0, 1, 7761, 7763, 1, 10, 7764, 0, 0, 0, 0, 0, 0, 0, 0, 7766, 1, 10, 7765, 0, 0, 0, 0, 0, 0, 0, 0, 7767, 7, 7, 7772, 7, 7, 7773, 10, 10, 7780, 10, 10, 7781, 10, 10, 7782, 10, 10, 7783, 10, 10, 7784, 10, 10, 7785, 1, 1, 7800, 1, 1, 7801, 4, 4, 7802, 4, 4, 7803, 3, 40, 7804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7806, 3, 40, 7805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7807, 4, 10, 7820, 0, 0, 0, 0, 0, 7818, 4, 10, 7821, 0, 0, 0, 0, 0, 7819, 10, 10, 7835, 0, 46, 7846, 7844, 0, 7850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7848, 0, 46, 7847, 7845, 0, 7851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7849, 2, 8, 7852, 0, 0, 0, 0, 0, 7862, 2, 8, 7853, 0, 0, 0, 0, 0, 7863, 0, 46, 7856, 7854, 0, 7860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7858, 0, 46, 7857, 7855, 0, 7861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7859, 0, 46, 7872, 7870, 0, 7876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7874, 0, 46, 7873, 7871, 0, 7877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7875, 2, 2, 7878, 2, 2, 7879, 0, 46, 7890, 7888, 0, 7894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7892, 0, 46, 7891, 7889, 0, 7895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7893, 2, 2, 7896, 2, 2, 7897, 0, 46, 7900, 7898, 0, 7904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 0, 7902, 0, 46, 7901, 7899, 0, 7905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 0, 7903, 0, 46, 7914, 7912, 0, 7918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, 0, 0, 7916, 0, 46, 7915, 7913, 0, 7919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 0, 7917, 0, 50, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7942, 8064, 0, 50, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, 0, 50, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7950, 8072, 0, 50, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 1, 7954, 7956, 0, 1, 7955, 7957, 0, 1, 7962, 7964, 0, 1, 7963, 7965, 0, 50, 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 0, 50, 7971, 7973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 50, 7978, 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 0, 50, 7979, 7981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 49, 7986, 7988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 49, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7991, 0, 49, 7994, 7996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7998, 0, 49, 7995, 7997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7999, 0, 1, 8002, 8004, 0, 1, 8003, 8005, 0, 1, 8010, 8012, 0, 1, 8011, 8013, 0, 49, 8018, 8020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8022, 0, 49, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8023, 0, 49, 8027, 8029, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8031, 0, 50, 8034, 8036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8038, 8096, 0, 50, 8035, 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 50, 8042, 8044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8046, 8104, 0, 50, 8043, 8045, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 50, 50, 8066, 50, 50, 8067, 50, 50, 8068, 50, 50, 8069, 50, 50, 8070, 50, 50, 8071, 50, 50, 8074, 50, 50, 8075, 50, 50, 8076, 50, 50, 8077, 50, 50, 8078, 50, 50, 8079, 50, 50, 8082, 50, 50, 8083, 50, 50, 8084, 50, 50, 8085, 50, 50, 8086, 50, 50, 8087, 50, 50, 8090, 50, 50, 8091, 50, 50, 8092, 50, 50, 8093, 50, 50, 8094, 50, 50, 8095, 50, 50, 8098, 50, 50, 8099, 50, 50, 8100, 50, 50, 8101, 50, 50, 8102, 50, 50, 8103, 50, 50, 8106, 50, 50, 8107, 50, 50, 8108, 50, 50, 8109, 50, 50, 8110, 50, 50, 8111, 50, 50, 8114, 50, 50, 8116, 50, 50, 8119, 50, 50, 8130, 50, 50, 8132, 50, 50, 8135, 0, 49, 8141, 8142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8143, 0, 49, 8157, 8158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8159, 47, 48, 8164, 8165, 48, 48, 8172, 50, 50, 8178, 50, 50, 8180, 50, 50, 8183, 51, 51, 8602, 51, 51, 8603, 51, 51, 8622, 51, 51, 8653, 51, 51, 8654, 51, 51, 8655, 51, 51, 8708, 51, 51, 8713, 51, 51, 8716, 51, 51, 8740, 51, 51, 8742, 51, 51, 8769, 51, 51, 8772, 51, 51, 8775, 51, 51, 8777, 51, 51, 8800, 51, 51, 8802, 51, 51, 8813, 51, 51, 8814, 51, 51, 8815, 51, 51, 8816, 51, 51, 8817, 51, 51, 8820, 51, 51, 8821, 51, 51, 8824, 51, 51, 8825, 51, 51, 8832, 51, 51, 8833, 51, 51, 8836, 51, 51, 8837, 51, 51, 8840, 51, 51, 8841, 51, 51, 8876, 51, 51, 8877, 51, 51, 8878, 51, 51, 8879, 51, 51, 8928, 51, 51, 8929, 51, 51, 8930, 51, 51, 8931, 51, 51, 8938, 51, 51, 8939, 51, 51, 8940, 51, 51, 8941, 51, 51, 10972, 52, 52, 12364, 52, 52, 12366, 52, 52, 12368, 52, 52, 12370, 52, 52, 12372, 52, 52, 12374, 52, 52, 12376, 52, 52, 12378, 52, 52, 12380, 52, 52, 12382, 52, 52, 12384, 52, 52, 12386, 52, 52, 12389, 52, 52, 12391, 52, 52, 12393, 52, 53, 12400, 12401, 52, 53, 12403, 12404, 52, 53, 12406, 12407, 52, 53, 12409, 12410, 52, 53, 12412, 12413, 52, 52, 12436, 52, 52, 12446, 52, 52, 12460, 52, 52, 12462, 52, 52, 12464, 52, 52, 12466, 52, 52, 12468, 52, 52, 12470, 52, 52, 12472, 52, 52, 12474, 52, 52, 12476, 52, 52, 12478, 52, 52, 12480, 52, 52, 12482, 52, 52, 12485, 52, 52, 12487, 52, 52, 12489, 52, 53, 12496, 12497, 52, 53, 12499, 12500, 52, 53, 12502, 12503, 52, 53, 12505, 12506, 52, 53, 12508, 12509, 52, 52, 12532, 52, 52, 12535, 52, 52, 12536, 52, 52, 12537, 52, 52, 12538, 52, 52, 12542, 54, 55, 1, 4250, 54, 55, 1, 4252, 54, 55, 1, 4267, 56, 57, 1, 4398, 56, 57, 1, 4399, 58, 61, 1, 4939, 1, 4940, 62, 67, 1, 5307, 1, 5308, 1, 5310, 68, 69, 1, 5562, 68, 69, 1, 5563, 70, 71, 1, 53598, 70, 71, 1, 53599, 72, 81, 1, 53600, 1, 53601, 1, 53602, 1, 53603, 1, 53604, 70, 71, 1, 53691, 70, 71, 1, 53692, 72, 75, 1, 53693, 1, 53695, 72, 75, 1, 53694, 1, 53696, }; tig-2.4.1/compat/wordexp.c000066400000000000000000000027271332650737300154410ustar00rootroot00000000000000/* Copyright (c) 2006-2013 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat.h" #include "stddef.h" #include #include #include void compat_wordfree (wordexp_t *pwordexp) { free(pwordexp->we_wordv[0]); free(pwordexp->we_wordv); } int compat_wordexp (const char *words, wordexp_t *pwordexp, int flags) { char *expanded = NULL; const char *home = getenv("HOME"); if (home && words[0] == '~' && (words[1] == '/' || words[1] == 0)) { size_t len = strlen(home) + strlen(words + 1) + 1; if ((expanded = malloc(len)) && !snprintf(expanded, len, "%s%s", home, words + 1)) { free(expanded); return -1; } } else { expanded = strdup(words); } if (!expanded) return -1; pwordexp->we_wordv = calloc(2, sizeof(*pwordexp->we_wordv)); if (!pwordexp->we_wordv) { free(expanded); return -1; } pwordexp->we_wordv[0] = expanded; return 0; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/config.make.in000066400000000000000000000015321332650737300150240ustar00rootroot00000000000000# -*- makefile-gmake -*- prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ mandir = @mandir@ docdir = @docdir@ datarootdir = @datarootdir@ sysconfdir = @sysconfdir@ CC = @CC@ CFLAGS = @CFLAGS@ @COVERAGE_CFLAGS@ # CURSES_CFLAGS contain `-I..` flags so add to preprocessor flags. CPPFLAGS = @CPPFLAGS@ @CURSES_CFLAGS@ -DHAVE_CONFIG_H LDFLAGS = @LDFLAGS@ LDLIBS = @LIBS@ @CURSES_LIBS@ ASCIIDOC = @ASCIIDOC@ XMLTO = @XMLTO@ DOCBOOK2PDF = @DOCBOOK2PDF@ LCOV = @LCOV@ GENHTML = @GENHTML@ # Special compatibility features @NO_MKSTEMPS@ NO_MKSTEMPS = y @NO_SETENV@ NO_SETENV = y @NO_STRNDUP@ NO_STRNDUP = y @NO_WORDEXP@ NO_WORDEXP = y # Add config.h as a dependency for all object files CONFIG_H = config.h config.status: configure ./config.status --recheck config.h config.make: config.status ./config.status $@ config.make: config.make.in tig-2.4.1/configure.ac000066400000000000000000000026641332650737300146100ustar00rootroot00000000000000AC_INIT([tig],[0],[jonas.fonseca@gmail.com],[tig]) AC_LANG([C]) AC_CONFIG_HEADER(config.h) AC_CONFIG_SRCDIR(src) dnl Document where we keep our .m4 file. AC_CONFIG_MACRO_DIR([tools]) dnl Make sure aclocal actually found it! m4_pattern_forbid([^AX_]) AC_PROG_CC AC_CHECK_HEADERS([execinfo.h paths.h stdint.h stdlib.h string.h sys/time.h unistd.h wordexp.h]) AC_CHECK_FUNCS([gettimeofday]) AC_CHECK_DECLS([environ]) AC_CHECK_DECLS([errno], [], [], [#include ]) dnl Checks for compatibility flags AC_CHECK_FUNCS([mkstemps], [AC_SUBST([NO_MKSTEMPS], ["#"])]) AC_CHECK_FUNCS([setenv], [AC_SUBST([NO_SETENV], ["#"])]) AC_CHECK_FUNCS([strndup], [AC_SUBST([NO_STRNDUP], ["#"])]) AC_CHECK_FUNCS([wordexp], [AC_SUBST([NO_WORDEXP], ["#"])]) AX_WITH_CURSES case "$ax_cv_ncurses" in "no") AC_MSG_ERROR([ncurses not found]) esac case "$ax_cv_ncursesw" in "no") AC_MSG_WARN([The found ncurses library does not support wide-char.]) AC_MSG_WARN([This means that tig will not correctly render UTF-8.]) esac AC_SUBST(CURSES_LIBS) AX_LIB_READLINE(6.3) AM_ICONV AC_CHECK_PROGS(SED, [gsed], [sed]) AC_TDD_GCOV AC_SUBST(COVERAGE_CFLAGS) AC_SUBST(COVERAGE_LDFLAGS) AC_CHECK_PROGS(ASCIIDOC, [asciidoc], [false]) AC_CHECK_PROGS(XMLTO, [xmlto], [false]) AC_CHECK_PROGS(DOCBOOK2PDF, [docbook2pdf], [false]) AC_CONFIG_FILES([config.make]) AC_OUTPUT dnl Local Variables: dnl eval: (font-lock-add-keywords nil '(("\\_> ~/.tigrc bind generic B view-blame bind generic G view-grep bind generic H view-refs bind generic S view-status bind generic r screen-redraw bind generic w scroll-page-up bind generic s scroll-page-down bind generic b move-page-up bind generic g :toggle commit-title-graph bind generic i :toggle sort-field bind generic . :toggle line-number bind generic :toggle file-name bind generic F :toggle commit-title-refs tig-2.4.1/contrib/chocolate.theme.tigrc000066400000000000000000000006411332650737300200470ustar00rootroot00000000000000color diff-stat 95 default color date 172 default color "Merge: " cyan default color graph-commit red default color id 167 default color "author " 95 default color "Commit: " 90 default color cursor white 101 bold color palette-0 93 default color palette-1 95 default color palette-2 124 default color palette-7 90 default bold color delimiter 90 default color main-tracked 99 default bold tig-2.4.1/contrib/config.make000077500000000000000000000010531332650737300160600ustar00rootroot00000000000000# Example config.make. # Install files under /usr/local instead of under $HOME. prefix=/usr/local # Use ncursesw. LDLIBS = -lncursesw CPPFLAGS = -DHAVE_NCURSESW_CURSES_H # Use readline. #LDLIBS += -lreadline #CPPFLAGS += -DHAVE_READLINE # Uncomment to enable work-around for missing setenv(). #NO_SETENV=y # Uncomment to enable work-around for missing mkstemps(). #NO_MKSTEMPS=y # Uncomment to enable work-around for missing wordexp(). #NO_WORDEXP=y # Uncomment to not include built-in tigrc inside the binary. #NO_BUILTIN_TIGRC=y # vim: ft=make: tig-2.4.1/contrib/config.make-CYGWIN_NT-6.1000077500000000000000000000007511332650737300177650ustar00rootroot00000000000000# Example configuration for Cygwin (`uname -s` = CYGWIN_NT-6.1) # # Use ncursesw. NCURSESW_LIBS = $(shell ncursesw6-config --libs 2>/dev/null) HAS_ICONV = $(shell test -e "/usr/include/iconv.h" && echo true) ifeq ($(NCURSESW_LIBS),) $(error Please install the libncursesw-devel package) endif ifneq ($(HAS_ICONV),true) $(error Please install the libiconv-devel package) endif TIG_NCURSES = $(NCURSESW_LIBS) TIG_LDLIBS = -liconv TIG_CPPFLAGS = -DHAVE_NCURSESW_CURSES_H # vim: ft=make: tig-2.4.1/contrib/config.make-Darwin000066400000000000000000000012331332650737300172770ustar00rootroot00000000000000# Example configuration for Darwin / Mac OS X. # Work-around for Homebrew-based xmlto. export XML_CATALOG_FILES=/usr/local/etc/xml/catalog TIG_CFLAGS += -DHAVE_EXECINFO_H TIG_LDLIBS = -liconv NCURSES_DIR = $(wildcard /usr/local/opt/ncurses) ifneq ($(NCURSES_DIR),) TIG_NCURSES = -lncursesw TIG_CPPFLAGS += -I$(NCURSES_DIR)/include -DHAVE_NCURSESW_CURSES_H TIG_LDFLAGS += -L$(NCURSES_DIR)/lib else TIG_CPPFLAGS += -DHAVE_CURSES_H endif READLINE_DIR = $(wildcard /usr/local/opt/readline) ifneq ($(READLINE_DIR),) TIG_LDLIBS += -lreadline TIG_LDFLAGS += -L$(READLINE_DIR)/lib TIG_CPPFLAGS += -I$(READLINE_DIR)/include -DHAVE_READLINE endif # vim: ft=make: tig-2.4.1/contrib/git-flow.tigrc000066400000000000000000000037301332650737300165370ustar00rootroot00000000000000# Bindings for git-flow. # # Flow bindings start with the capital F and then follow the first character of # each operation. If executed from the refs view, the operations (that make # sense to) work on the selected branch. Otherwise, they work on the currently # checked out branch. # # Commands that finish a flow require confirmation to run. Commands that create # a new flow prompt for user input and run when that input is accepted with no # confirmation prompt. # # Note: Bindings assume the standard git-flow paths of feature, release, hotfix # and support. # # To use these keybindings copy the file to your HOME directory and include it # from your ~/.tigrc file: # # $ cp contrib/git-flow.tigrc ~/.tigrc.git-flow # $ echo "source ~/.tigrc.git-flow" >> ~/.tigrc # Get rid of default bindings for F, as that will be the entry point for all # git-flow related commands with this binding. bind main F none bind generic F none # General bind generic Fi ?git flow init # Feature bind generic Ffl !git flow feature bind generic Ffs !git flow feature start "%(prompt New feature name: )" bind generic Fff ?sh -c "git flow feature finish `echo %(repo:head) | sed -e s/feature.//`" bind refs Fff ?sh -c "git flow feature finish `echo %(branch) | sed -e s/feature.//`" # Release bind generic Frl !git flow release bind generic Frs !git flow release start "%(prompt New release name: )" bind generic Frf ?sh -c "git flow release finish `echo %(repo:head) | sed -e s/release.//`" bind refs Frf ?sh -c "git flow release finish `echo %(branch) | sed -e s/release.//`" # Hot Fix bind generic Fhl !git flow hotfix bind generic Fhs !git flow hotfix start "%(prompt New hotfix name: )" bind generic Fhf ?sh -c "git flow hotfix finish `echo %(repo:head) | sed -e s/hotfix.//`" bind refs Fhf ?sh -c "git flow hotfix finish `echo %(branch) | sed -e s/hotfix.//`" # Support bind generic Fsl !git flow support bind refs Fss !git flow support start "%(prompt New support name: )" %(branch) tig-2.4.1/contrib/large-repo.tigrc000066400000000000000000000012231332650737300170370ustar00rootroot00000000000000# Settings for speeding up Tig in large repositories # # To use these settings copy the file to your HOME directory and include # it from your ~/.tigrc file: # # $ cp contrib/large-repo.tigrc ~/.tigrc.large # $ echo "source ~/.tigrc.large" >> ~/.tigrc # Use Git's default (reverse chronological) order, never automatically # use topo-order for the commit graph set commit-order = default # Limit number of commits loaded by default to 1000 set main-options = -n 1000 # Don't show staged and unstaged changes in the main view set show-changes = no # Optionally, use the old and faster but less acurate graph renderer #set main-view-commit-title-graph = v1 tig-2.4.1/contrib/tig-completion.bash000077500000000000000000000132421332650737300175500ustar00rootroot00000000000000## # bash completion support for tig # # Copyright (C) 2007-2010 Jonas fonseca # Copyright (C) 2006,2007 Shawn Pearce # # Based git's git-completion.sh: http://repo.or.cz/w/git/fastimport.git # # The contained completion routines provide support for completing: # # *) local and remote branch names # *) local and remote tag names # *) tig 'subcommands' # *) tree paths within 'ref:path/to/file' expressions # # To use these routines: # # 1) Copy this file to somewhere (e.g. ~/.tig-completion.sh). # 2) Added the following line to your .bashrc: # source ~/.tig-completion.sh # # 3) You may want to make sure the git executable is available # in your PATH before this script is sourced, as some caching # is performed while the script loads. If git isn't found # at source time then all lookups will be done on demand, # which may be slightly slower. # __tigdir () { if [ -z "$1" ]; then if [ -n "$__git_dir" ]; then echo "$__git_dir" elif [ -d .git ]; then echo .git else git rev-parse --git-dir 2>/dev/null fi elif [ -d "$1/.git" ]; then echo "$1/.git" else echo "$1" fi } _tigcomp () { local all c s=$'\n' IFS=' '$'\t'$'\n' local cur="${COMP_WORDS[COMP_CWORD]}" if [ $# -gt 2 ]; then cur="$3" fi for c in $1; do case "$c$4" in --*=*) all="$all$c$4$s" ;; *.) all="$all$c$4$s" ;; *) all="$all$c$4 $s" ;; esac done IFS=$s COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur")) return } __tig_refs () { local cmd i is_hash=y dir="$(__tigdir "$1")" if [ -d "$dir" ]; then for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do if [ -e "$dir/$i" ]; then echo $i; fi done for i in $(git --git-dir="$dir" \ for-each-ref --format='%(refname)' \ refs/tags refs/heads refs/remotes); do case "$i" in refs/tags/*) echo "${i#refs/tags/}" ;; refs/heads/*) echo "${i#refs/heads/}" ;; refs/remotes/*) echo "${i#refs/remotes/}" ;; *) echo "$i" ;; esac done return fi for i in $(git-ls-remote "$dir" 2>/dev/null); do case "$is_hash,$i" in y,*) is_hash=n ;; n,*^{}) is_hash=y ;; n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;; n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;; n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;; n,*) is_hash=y; echo "$i" ;; esac done } __tig_complete_file () { local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in ?*:*) ref="${cur%%:*}" cur="${cur#*:}" case "$cur" in ?*/*) pfx="${cur%/*}" cur="${cur##*/}" ls="$ref:$pfx" pfx="$pfx/" ;; *) ls="$ref" ;; esac COMPREPLY=($(compgen -P "$pfx" \ -W "$(git --git-dir="$(__tigdir)" ls-tree "$ls" \ | sed '/^100... blob /s,^.* ,, /^040000 tree /{ s,^.* ,, s,$,/, } s/^.* //')" \ -- "$cur")) ;; *) _tigcomp "$(__tig_refs)" ;; esac } __tig_complete_revlist () { local pfx cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in *...*) pfx="${cur%...*}..." cur="${cur#*...}" _tigcomp "$(__tig_refs)" "$pfx" "$cur" ;; *..*) pfx="${cur%..*}.." cur="${cur#*..}" _tigcomp "$(__tig_refs)" "$pfx" "$cur" ;; *.) _tigcomp "$cur." ;; *) _tigcomp "$(__tig_refs)" ;; esac } _tig_options () { local cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in --pretty=*) _tigcomp " oneline short medium full fuller email raw " "" "${cur##--pretty=}" return ;; --*) _tigcomp " --max-count= --max-age= --since= --after= --min-age= --before= --until= --root --not --topo-order --date-order --no-merges --abbrev-commit --abbrev= --relative-date --author= --committer= --grep= --all-match --pretty= --name-status --name-only --not --all --help --version " return ;; -*) _tigcomp "-v -h" return ;; esac __tig_complete_revlist } _tig_blame () { local reply="" ref=HEAD cur="${COMP_WORDS[COMP_CWORD]}" p="" local pfx=$(git rev-parse --show-prefix 2>/dev/null) if test "$COMP_CWORD" -lt 3; then _tigcomp "$(__tig_refs)" else ref="${COMP_WORDS[2]}" fi case "$cur" in */) p=${cur%/} ;; */*) p=${cur%/*} ;; *) p= ;; esac i=${#COMPREPLY[@]} local IFS=$'\n' for c in $(git --git-dir="$(__tigdir)" ls-tree "$ref:$pfx$p" 2>/dev/null | sed -n '/^100... blob /{ s,^.* ,, s,$, , p } /^040000 tree /{ s,^.* ,, s,$,/, p }') do c="${p:+$p/}$c" if [[ "$c" == "$cur"* ]]; then COMPREPLY[i++]=$c fi done } _tig_show () { local cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in --pretty=*) _tigcomp " oneline short medium full fuller email raw " "" "${cur##--pretty=}" return ;; --*) _tigcomp "--pretty=" return ;; esac __tig_complete_file } _tig () { local i c=1 command __tig_dir while [ $c -lt $COMP_CWORD ]; do i="${COMP_WORDS[c]}" case "$i" in --) command="log"; break;; -*) ;; *) command="$i"; break ;; esac c=$((++c)) done if [ $c -eq $COMP_CWORD -a -z "$command" ]; then case "${COMP_WORDS[COMP_CWORD]}" in --*=*) COMPREPLY=() ;; -*) _tig_options ;; *) _tigcomp "blame status show log stash grep $(__tig_refs)" ;; esac return fi case "$command" in blame) _tig_blame ;; show) _tig_show ;; status) ;; *) _tigcomp " $(__tig_complete_file) $(__tig_refs) " ;; esac } # Detect if current shell is ZSH, and if so, load this file in bash # compatibility mode. if [ -n "$ZSH_VERSION" ]; then autoload bashcompinit bashcompinit fi complete -o default -o nospace -F _tig tig # The following are necessary only for Cygwin, and only are needed # when the user has tab-completed the executable name and consequently # included the '.exe' suffix. if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then complete -o default -o nospace -F _tig tig.exe fi tig-2.4.1/contrib/tig-completion.zsh000066400000000000000000000007511332650737300174350ustar00rootroot00000000000000#compdef tig # # zsh completion wrapper for tig # ============================== # # You need to install this script to zsh fpath with tig-completion.bash. # # The recommended way to install this script is to copy this and tig-completion.bash # to '~/.zsh/_tig' and '~/.zsh/tig-completion.bash' and # then add following to your ~/.zshrc file: # # fpath=(~/.zsh $fpath) _tig () { local e e=$(dirname ${funcsourcetrace[1]%:*})/tig-completion.bash if [ -f $e ]; then . $e fi } tig-2.4.1/contrib/tig-pick000077500000000000000000000024261332650737300154130ustar00rootroot00000000000000#!/bin/sh # # 'tig-pick' is a wrapper script that uses 'tig' to pick a Git commit from the # history. On success, The script prints the ID of the commit to standard # output, so that it can be used as a parameter for subsequent commands, e.g. # 'git rebase -i $(tig-pick)' # # In order to be able to display the interface and to catch the commit ID # (easily) at the same time, 'tig' has to be run with the standard and error # output channels swapped. # # All parameters passed to the script will be forwarded to 'tig'. # set -e CONFIG=$(mktemp) trap "rm -f '$CONFIG'" EXIT # Prepare config file: source user config, if present if [ ! -z "$TIGRC_USER" ]; then echo "source $TIGRC_USER" >> "$CONFIG" elif [ -f "$HOME/.tigrc" ]; then echo "source $HOME/.tigrc" >> "$CONFIG" fi # Bind Enter to print the selected commit ID to error output and exit after # that. echo 'bind main &2"' >> "$CONFIG" # Run tig with the standard and error output channels swapped. export TIGRC_USER=$CONFIG stderr=$(tig "$@" 3>&2 2>&1 1>&3 3>&-) || { status=$? echo "$stderr" >&2 exit $status } commit=$(echo "$stderr" | tail -n1) # Check return value for valid commit ID if ! printf '%s' "$commit" | grep -iqE '^[0-9a-f]{40}$'; then echo "$stderr" >&2 exit 1 fi echo "$commit" tig-2.4.1/contrib/tig.spec.in000066400000000000000000000047341332650737300160260ustar00rootroot00000000000000# -*- mode: rpm-spec-mode; encoding: utf-8; -*- # Pass '--without docs' to rpmbuild if you don't want the documentation to be build Summary: Tig: text-mode interface for git Name: tig Version: @@VERSION@@ Release: @@RELEASE@@%{?dist} License: GPL Group: Development/Tools Vendor: Jonas Fonseca URL: https://jonas.github.io/tig Source: https://github.com/jonas/tig/releases/download/%{name}-%{version}/%{name}-%{version}.tar.gz BuildRequires: ncurses-devel%{!?_without_docs:, xmlto, asciidoc > 6.0.3} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: git-core, ncurses %description Tig is a git repository browser that additionally can act as a pager for output from various git commands. When browsing repositories, it uses the underlying git commands to present the user with various views, such as summarized revision log and showing the commit with the log message, diffstat, and the diff. Using it as a pager, it will display input from stdin and colorize it. %prep %setup -q %build %configure CFLAGS="$RPM_OPT_FLAGS -DVERSION=tig-%{version}-%{release}" %{__make} %{_smp_mflags} \ prefix=%{_prefix} \ all %{!?_without_docs: doc-man doc-html} %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT CFLAGS="$RPM_OPT_FLAGS -DVERSION=tig-%{version}-%{release}" %{__make} %{_smp_mflags} DESTDIR=$RPM_BUILD_ROOT \ prefix=%{_prefix} bindir=%{_bindir} mandir=%{_mandir} \ install %{!?_without_docs: install-doc-man} %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_bindir}/* %{_sysconfdir}/* %doc README.adoc COPYING INSTALL.adoc NEWS.adoc contrib/tig-completion.bash contrib/tig-completion.zsh %{!?_without_docs: %{_mandir}/man1/*.1*} %{!?_without_docs: %{_mandir}/man5/*.5*} %{!?_without_docs: %{_mandir}/man7/*.7*} %{!?_without_docs: %doc doc/*.html} %{?_without_docs: %doc doc/*.txt} %changelog * Sun 23 Feb 2014 Jonas Fonseca - Add tigrc installed in /etc * Tue Jan 8 2013 Joakim Sernbrant - Added configure * Thu Aug 16 2012 Victor Foitzik - Now also packaging man(7) pages * Sat Jun 23 2007 Jonas Fonseca - Include tig bash completion script * Fri Jun 1 2007 Jakub Narebski - Include documentation sources for --without docs - Remove PDF version of manual from being build and installed * Mon May 28 2007 Jakub Narebski - Initial tig spec file tig-2.4.1/contrib/vim.tigrc000066400000000000000000000036261332650737300156060ustar00rootroot00000000000000# Vim-style keybindings for Tig # # To use these keybindings copy the file to your HOME directory and include # it from your ~/.tigrc file: # # $ cp contrib/vim.tigrc ~/.tigrc.vim # $ echo "source ~/.tigrc.vim" >> ~/.tigrc bind generic h scroll-left bind generic j move-down bind generic k move-up bind generic l scroll-right bind generic g none bind generic gg move-first-line bind generic gj next bind generic gk previous bind generic gp parent bind generic gP back bind generic gn view-next bind main G move-last-line bind generic G move-last-line bind generic move-page-down bind generic move-page-up bind generic v none bind generic vm view-main bind generic vd view-diff bind generic vl view-log bind generic vt view-tree bind generic vb view-blob bind generic vx view-blame bind generic vr view-refs bind generic vs view-status bind generic vu view-stage bind generic vy view-stash bind generic vg view-grep bind generic vp view-pager bind generic vh view-help bind generic o none bind generic oo :toggle sort-order bind generic os :toggle sort-field bind generic on :toggle line-number bind generic od :toggle date bind generic oa :toggle author bind generic og :toggle line-graphics bind generic of :toggle file-name bind generic op :toggle ignore-space bind generic oi :toggle id bind generic ot :toggle commit-title-overflow bind generic oF :toggle file-filter bind generic or :toggle commit-title-refs bind generic @ none bind generic @j :/^@@ bind generic @k :?^@@ bind generic @- :toggle diff-context -1 bind generic @+ :toggle diff-context +1 bind status u none bind stage u none bind generic uu status-update bind generic ur status-revert bind generic um status-merge bind generic ul stage-update-line bind generic us stage-split-chunk bind generic c none bind generic cc !git commit bind generic ca !?@git commit --amend --no-edit bind generic K view-help bind generic view-next tig-2.4.1/doc/000077500000000000000000000000001332650737300130575ustar00rootroot00000000000000tig-2.4.1/doc/asciidoc.conf000066400000000000000000000027171332650737300155130ustar00rootroot00000000000000[macros] (?su)[\\]?(?Pmanpage):(?P\S*?)\[(?P.*?)\]= ifdef::backend-docbook[] [manpage-inlinemacro] {0%{target}} {0#} {0#{target}{0}} {0#} endif::backend-docbook[] ifdef::backend-xhtml11[] [manpage-inlinemacro] {target}{0?({0})} endif::backend-xhtml11[] ifdef::doctype-manpage[] ifdef::backend-docbook[] [header] template::[header-declarations] {mantitle} {manvolnum} Tig {version} Tig Manual {manname} {manpurpose} # The following two small workarounds insert a simple paragraph after screen # [listingblock] {title} | {title#} [verseblock] {title} {title%} {title#} | {title#} endif::backend-docbook[] endif::doctype-manpage[] ifdef::readme[] # No header or footers for README.html [header]

{doctitle}

[footer]
[replacements] (^|[^-\\])--($|[^-])=\1--\2 endif::readme[] tig-2.4.1/doc/manual.adoc000066400000000000000000000600761332650737300151750ustar00rootroot00000000000000ifndef::doctype-manpage[] The Tig Manual ============== Jonas Fonseca endif::doctype-manpage[] This is the manual for Tig, the ncurses-based text-mode interface for git. Tig allows you to browse changes in a Git repository and can additionally act as a pager for output of various Git commands. When used as a pager, it will display input from stdin and colorize it. When browsing repositories, Tig uses the underlying Git commands to present the user with various views, such as summarized commit log and showing the commit with the log message, diffstat, and the diff. ifdef::include-manual-toc[] *Table of Contents* include::manual.toc[] endif::include-manual-toc[] [[calling-conventions]] Calling Conventions ------------------- [[pager-mode]] Pager Mode ~~~~~~~~~~ If stdin is a pipe, any log or diff options will be ignored and the pager view will be opened loading data from stdin. The pager mode can be used for colorizing output from various Git commands. Example on how to colorize the output of git-show(1): ----------------------------------------------------------------------------- $ git show | tig ----------------------------------------------------------------------------- [[cmd-options]] Git Command Options ~~~~~~~~~~~~~~~~~~~ All Git command options specified on the command line will be passed to the given command and all will be shell quoted before they are passed to the shell. NOTE: If you specify options for the main view, you should not use the `--pretty` option as this option will be set automatically to the format expected by the main view. Example on how to view a commit and show both author and committer information: ----------------------------------------------------------------------------- $ tig show --pretty=fuller ----------------------------------------------------------------------------- See the section on <> for an introduction to revision options supported by the Git commands. For details on specific Git command options, refer to the man page of the command in question. [[viewer]] The Viewer ---------- The display consists of a status window on the last line of the screen and one or more views. The default is to only show one view at a time but it is possible to split both the main and log view to also show the commit diff. If you are in the log view and press 'Enter' when the current line is a commit line, such as: ----------------------------------------------------------------------------- commit 4d55caff4cc89335192f3e566004b4ceef572521 ----------------------------------------------------------------------------- You will split the view so that the log view is displayed in the top window and the diff view in the bottom window. You can switch between the two views by pressing 'Tab'. To maximize the log view again, simply press 'l'. [[views]] Views ~~~~~ Various 'views' of a repository are presented. Each view is based on output from an external command, most often 'git log', 'git diff', or 'git show'. The main view:: Is the default view, and it shows a one line summary of each commit in the chosen list of revisions. The summary includes author date, author, and the first line of the log message. Additionally, any repository references, such as tags, will be shown. The log view:: Presents a more rich view of the revision log showing the whole log message and the diffstat. The diff view:: Shows either the diff of the current working tree, that is, what has changed since the last commit, or the commit diff complete with log message, diffstat and diff. The tree view:: Lists directory trees associated with the current revision allowing subdirectories to be descended or ascended and file blobs to be viewed. The blob view:: Displays the file content or "blob" of data associated with a file name. The blame view:: Displays the file content annotated or blamed by commits. The refs view:: Displays the branches, remotes and tags in the repository. The status view:: Displays status of files in the working tree and allows changes to be staged/unstaged as well as adding of untracked files. The stage view:: Displays diff changes for staged or unstaged files being tracked or file content of untracked files. The stash view:: Displays the list of stashes in the repository. The grep view:: Displays a list of files and all the lines that matches a search pattern. The pager view:: Is used for displaying both input from stdin and output from Git commands entered in the internal prompt. The help view:: Displays a quick reference of key bindings. [[commit-id]] Browsing State and User-defined Commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The viewer keeps track of both what head and commit ID you are currently viewing. The commit ID will follow the cursor line and change every time you highlight a different commit. Whenever you reopen the diff view it will be reloaded, if the commit ID changed. The head ID is used when opening the main and log view to indicate from what revision to show history. Some of the commands used or provided by Tig can be configured. This goes for some of the <> as well as the <>. These user-defined commands can use arguments that refer to the current browsing state by using one of the following variables. .Browsing state variables [frame="none",grid="none",cols="25 move-up` or `bind diff scroll-line-up`, respectively. |Down |Similar to 'Up' but will move down. |, |Move to parent. In the tree view, this means switch to the parent directory. In the blame view it will load blame for the parent commit. For merges the parent is queried. |============================================================================= [[view-actions]] View Specific Actions ~~~~~~~~~~~~~~~~~~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |u |Update status of file. In the status view, this allows you to add an untracked file or stage changes to a file for next commit (similar to running git-add ). In the stage view, when pressing this on a diff chunk line stages only that chunk for next commit, when not on a diff chunk line all changes in the displayed diff are staged. |M |Resolve unmerged file by launching git-mergetool(1). Note, to work correctly this might require some initial configuration of your preferred merge tool. See the manpage of git-mergetool(1). |! |Checkout file with unstaged changes. This will reset the file to contain the content it had at last commit. |1 |Stage single diff line. |@ |Move to next chunk in the stage view. |] |Increase the diff context. |[ |Decrease the diff context. |============================================================================= [[cursor-nav]] Cursor Navigation ~~~~~~~~~~~~~~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |k |Move cursor one line up. |j |Move cursor one line down. |PgUp,-,a |Move cursor one page up. |PgDown, Space |Move cursor one page down. |End |Jump to last line. |Home |Jump to first line. |============================================================================= [[view-scrolling]] Scrolling ~~~~~~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |Insert |Scroll view one line up. |Delete |Scroll view one line down. |ScrollBack |Scroll view one page up. |ScrollFwd |Scroll view one page down. |Left |Scroll view one column left. |Right |Scroll view one column right. |\| |Scroll view to the first column. |============================================================================= [[searching]] Searching ~~~~~~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |/ |Search the view. Opens a prompt for entering search regexp to use. |? |Search backwards in the view. Also prompts for regexp. |n |Find next match for the current search regexp. |N |Find previous match for the current search regexp. |============================================================================= [[misc-keys]] Misc ~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |Q |Quit. | |Redraw screen. |z |Stop all background loading. This can be useful if you use Tig in a repository with a long history without limiting the revision log. |v |Show version. |o |Open option menu |# |Toggle line numbers on/off. |D |Toggle date display on/off/relative/relative-compact/custom |A |Toggle author display on/off/abbreviated/email/email user name. |G |Toggle revision graph visualization on/off. |~ |Toggle (line) graphics mode |F |Toggle reference display on/off (tag and branch names). |W |Toggle ignoring whitespace on/off for diffs |X |Toggle commit ID display on/off |% |Toggle file filtering in order to see the full diff instead of only the diff concerning the currently selected file. |$ |Toggle highlighting of commit title overflow. |: |Open prompt. This allows you to specify what command to run and also to jump to a specific line, e.g. `:23` |e |Open file in editor. |============================================================================= [[prompt]] Prompt ~~~~~~ [frame="none",grid="none",cols="2<,8<",options="header"] |============================================================================= |Key |Action |: |Jump to the specific line number, e.g. `:80`. |: |Jump to a specific commit, e.g. `:2f12bcc`. |: |Execute the corresponding key binding, e.g. `:q`. |:! |Execute a system command in a pager, e.g. `:!git log -p`. |: |Execute a Tig command, e.g. `:edit`. |:goto |Jump to a specific revision, e.g. `:goto %(commit)^2` to goto the current commit's 2nd parent or `:goto some/branch` to goto the commit denoting the branch `some/branch`. |:save-display |Save current display to ``. |:save-options |Save current options to ``. |:save-view |Save view info to `` (for testing purposes). |:script |Execute commands from ``. |:exec |Execute command using `` with external user-defined command option flags defined in ``. |:echo |Display text in the status bar. |============================================================================= [[external-commands]] External Commands ~~~~~~~~~~~~~~~~~ For more custom needs, external commands provide a way to easily execute a script or program. They are bound to keys and use information from the current browsing state, such as the current commit ID. Tig comes with the following built-in external commands: [frame="none",grid="none",cols="1<,1<,8<",options="header"] |============================================================================= |Keymap |Key |Action |main |C |git cherry-pick %(commit) |status |C |git commit |generic|G |git gc |============================================================================= [[refspec]] Revision Specification ---------------------- This section describes various ways to specify what revisions to display or otherwise limit the view to. Tig does not itself parse the described revision options so refer to the relevant Git man pages for further information. Relevant man pages besides git-log(1) are git-diff(1) and git-rev-list(1). You can tune the interaction with Git by making use of the options explained in this section. For example, by configuring the environment variable described in the section on <>. [[path-limiting]] Limit by Path Name ~~~~~~~~~~~~~~~~~~ If you are interested only in those revisions that made changes to a specific file (or even several files) list the files like this: ----------------------------------------------------------------------------- $ tig Makefile README ----------------------------------------------------------------------------- To avoid ambiguity with Tig's subcommands or repository references such as tag names, be sure to separate file names from other Git options using "`--`". So if you have a file named 'status' it will clash with the 'status' subcommand, and thus you will have to use: ----------------------------------------------------------------------------- $ tig -- status ----------------------------------------------------------------------------- [[date-number-limiting]] Limit by Date or Number ~~~~~~~~~~~~~~~~~~~~~~~ To speed up interaction with Git, you can limit the amount of commits to show both for the log and main view. Either limit by date using e.g. `--since=1.month` or limit by the number of commits using `-n400`. If you are only interested in changes that happened between two dates you can use: ----------------------------------------------------------------------------- $ tig --after="May 5th" --before="2006-05-16 15:44" ----------------------------------------------------------------------------- NOTE: If you want to avoid having to quote dates containing spaces you can use "." instead, e.g. `--after=May.5th`. [[commit-range-limiting]] Limiting by Commit Ranges ~~~~~~~~~~~~~~~~~~~~~~~~~ Alternatively, commits can be limited to a specific range, such as "all commits between 'tag-1.0' and 'tag-2.0'". For example: ----------------------------------------------------------------------------- $ tig tag-1.0..tag-2.0 ----------------------------------------------------------------------------- This way of commit limiting makes it trivial to only browse the commits which haven't been pushed to a remote branch. Assuming 'origin' is your upstream remote branch, using: ----------------------------------------------------------------------------- $ tig origin..HEAD ----------------------------------------------------------------------------- will list what will be pushed to the remote branch. Optionally, the ending 'HEAD' can be left out since it is implied. [[reachability-limiting]] Limiting by Reachability ~~~~~~~~~~~~~~~~~~~~~~~~ Git interprets the range specifier "tag-1.0..tag-2.0" as "all commits reachable from 'tag-2.0' but not from 'tag-1.0'". Where reachability refers to what commits are ancestors (or part of the history) of the branch or tagged revision in question. If you prefer to specify which commit to preview in this way use the following: ----------------------------------------------------------------------------- $ tig tag-2.0 ^tag-1.0 ----------------------------------------------------------------------------- You can think of '^' as a negation operator. Using this alternate syntax, it is possible to further prune commits by specifying multiple branch cut offs. [[refspec-combi]] Combining Revisions Specification ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Revision options can to some degree be combined, which makes it possible to say "show at most 20 commits from within the last month that changed files under the Documentation/ directory." ----------------------------------------------------------------------------- $ tig --since=1.month -n20 -- Documentation/ ----------------------------------------------------------------------------- [[refspec-all]] Examining All Repository References ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In some cases, it can be useful to query changes across all references in a repository. An example is to ask "did any line of development in this repository change a particular file within the last week". This can be accomplished using: ----------------------------------------------------------------------------- $ tig --all --since=1.week -- Makefile ----------------------------------------------------------------------------- More Information ---------------- Please visit Tig's https://jonas.github.io/tig[home page] or https://github.com/jonas/tig[main Git repository] for information about new releases and how to report bugs and feature requests. [[copy-right]] Copyright --------- Copyright (c) 2006-2014 Jonas Fonseca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. [[references]] See Also -------- Manpages: ifdef::version[] - manpage:tig[1] - manpage:tigrc[5] endif::version[] ifndef::version[] - link:tig.1.adoc[tig(1)] - link:tigrc.5.adoc[tigrc(5)] endif::version[] tig-2.4.1/doc/manual.html000066400000000000000000001733301332650737300152310ustar00rootroot00000000000000 The Tig Manual

This is the manual for Tig, the ncurses-based text-mode interface for git. Tig allows you to browse changes in a Git repository and can additionally act as a pager for output of various Git commands. When used as a pager, it will display input from stdin and colorize it.

When browsing repositories, Tig uses the underlying Git commands to present the user with various views, such as summarized commit log and showing the commit with the log message, diffstat, and the diff.

Table of Contents

1. Calling Conventions

1.1. Pager Mode

If stdin is a pipe, any log or diff options will be ignored and the pager view will be opened loading data from stdin. The pager mode can be used for colorizing output from various Git commands.

Example on how to colorize the output of git-show(1):

$ git show | tig

1.2. Git Command Options

All Git command options specified on the command line will be passed to the given command and all will be shell quoted before they are passed to the shell.

Note
If you specify options for the main view, you should not use the --pretty option as this option will be set automatically to the format expected by the main view.

Example on how to view a commit and show both author and committer information:

$ tig show --pretty=fuller

See the section on specifying revisions for an introduction to revision options supported by the Git commands. For details on specific Git command options, refer to the man page of the command in question.

2. The Viewer

The display consists of a status window on the last line of the screen and one or more views. The default is to only show one view at a time but it is possible to split both the main and log view to also show the commit diff.

If you are in the log view and press Enter when the current line is a commit line, such as:

commit 4d55caff4cc89335192f3e566004b4ceef572521

You will split the view so that the log view is displayed in the top window and the diff view in the bottom window. You can switch between the two views by pressing Tab. To maximize the log view again, simply press l.

2.1. Views

Various views of a repository are presented. Each view is based on output from an external command, most often git log, git diff, or git show.

The main view

Is the default view, and it shows a one line summary of each commit in the chosen list of revisions. The summary includes author date, author, and the first line of the log message. Additionally, any repository references, such as tags, will be shown.

The log view

Presents a more rich view of the revision log showing the whole log message and the diffstat.

The diff view

Shows either the diff of the current working tree, that is, what has changed since the last commit, or the commit diff complete with log message, diffstat and diff.

The tree view

Lists directory trees associated with the current revision allowing subdirectories to be descended or ascended and file blobs to be viewed.

The blob view

Displays the file content or "blob" of data associated with a file name.

The blame view

Displays the file content annotated or blamed by commits.

The refs view

Displays the branches, remotes and tags in the repository.

The status view

Displays status of files in the working tree and allows changes to be staged/unstaged as well as adding of untracked files.

The stage view

Displays diff changes for staged or unstaged files being tracked or file content of untracked files.

The stash view

Displays the list of stashes in the repository.

The grep view

Displays a list of files and all the lines that matches a search pattern.

The pager view

Is used for displaying both input from stdin and output from Git commands entered in the internal prompt.

The help view

Displays a quick reference of key bindings.

2.2. Browsing State and User-defined Commands

The viewer keeps track of both what head and commit ID you are currently viewing. The commit ID will follow the cursor line and change every time you highlight a different commit. Whenever you reopen the diff view it will be reloaded, if the commit ID changed. The head ID is used when opening the main and log view to indicate from what revision to show history.

Some of the commands used or provided by Tig can be configured. This goes for some of the environment variables as well as the external commands. These user-defined commands can use arguments that refer to the current browsing state by using one of the following variables.

Table 1. Browsing state variables

%(head)

The currently viewed head ID. Defaults to HEAD

%(commit)

The currently selected commit ID.

%(blob)

The currently selected blob ID.

%(branch)

The currently selected branch name.

%(remote)

The currently selected remote name. For remote branches %(branch) will contain the branch name.

%(tag)

The currently selected tag name.

%(stash)

The currently selected stash name.

%(directory)

The current directory path in the tree view or "." if undefined.

%(file)

The currently selected file.

%(lineno)

The currently selected line number. Defaults to 0.

%(ref)

The reference given to blame or HEAD if undefined.

%(revargs)

The revision arguments passed on the command line.

%(fileargs)

The file arguments passed on the command line.

%(cmdlineargs)

All other options passed on the command line.

%(diffargs)

Options from diff-options or TIG_DIFF_OPTS used by the diff and stage view.

%(blameargs)

Options from blame-options used by the blame view.

%(logargs)

Options from log-options used by the log view.

%(mainargs)

Options from main-options used by the main view.

%(prompt)

Prompt for the argument value. Optionally specify a custom prompt using "%(prompt Enter branch name: )"

%(text)

The text of the currently selected line.

%(repo:head)

The name of the checked out branch, e.g. master

%(repo:head-id)

The commit ID of the checked out branch.

%(repo:remote)

The remote associated with the checked out branch, e.g. origin/master.

%(repo:cdup)

The path to change directory to the repository root, e.g. ../

%(repo:prefix)

The path prefix of the current work directory, e.g subdir/.

%(repo:git-dir)

The path to the Git directory, e.g. /src/repo/.git.

%(repo:worktree)

The worktree path, if defined.

%(repo:is-inside-work-tree)

Whether Tig is running inside a work tree, either true or false.

Example user-defined commands:

  • Allow to amend the last commit:

    bind generic + !git commit --amend
  • Copy commit ID to clipboard:

    bind generic 9 !@sh -c "echo -n %(commit) | xclip -selection c"
  • Add/edit notes for the current commit used during a review:

    bind generic T !git notes edit %(commit)
  • Enter Git’s interactive add for fine-grained staging of file content:

    bind generic I !git add -i %(file)
  • Rebase current branch on top of the selected branch:

    bind refs 3 !git rebase -i %(branch)

2.3. Title Windows

Each view has a title window which shows the name of the view, current commit ID if available, and where the view is positioned:

[main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61 (1%)

By default, the title of the current view is highlighted using bold font. For long loading views (taking over 3 seconds) the time since loading started will be appended:

[main] 77d9e40fbcea3238015aea403e06f61542df9a31 - commit 1 of 779 (0%) 5s

3. Environment Variables

Several options related to the interface with Git can be configured via environment options.

3.1. Configuration Files

Upon startup, Tig first reads the system wide configuration file ({sysconfdir}/tigrc by default) and then proceeds to read the user’s configuration file (~/.tigrc or $XDG_CONFIG_HOME/tig/config by default). The paths to either of these files can be overridden through the following environment variables:

TIGRC_USER

Path of the user configuration file.

TIGRC_SYSTEM

Path of the system wide configuration file.

History Files

If compiled with readline support, Tig writes a persistent command and search
history to `~/.tig_history` or `$XDG_DATA_HOME/tig/history`.

[[repo-refs]]
Repository References

Commits that are referenced by tags and branch heads will be marked by the reference name surrounded by [ and ]:

2006-03-26 19:42 Petr Baudis         | [cogito-0.17.1] Cogito 0.17.1

If you want to limit what branches are shown, say only show branches named master or those which start with the feature/ prefix, you can do it by setting the following variable:

$ TIG_LS_REMOTE="git ls-remote . master feature/*" tig

Or set the variable permanently in your environment.

TIG_LS_REMOTE

Command for retrieving all repository references. The command should output data in the same format as git-ls-remote(1). Defaults to:

git ls-remote .

3.2. Diff options

It is possible to alter how diffs are shown by the diff view. If for example you prefer to have commit and author dates shown as relative dates, use:

$ TIG_DIFF_OPTS="--relative-date" tig

Or set the variable permanently in your environment.

4. Default Keybindings

Below the default key bindings are shown.

4.1. View Switching

Key Action

m

Switch to main view.

d

Switch to diff view.

l

Switch to log view.

p

Switch to pager view.

t

Switch to (directory) tree view.

f

Switch to (file) blob view.

g

Switch to grep view.

b

Switch to blame view.

r

Switch to refs view.

y

Switch to stash view.

h

Switch to help view

s

Switch to status view

c

Switch to stage view

4.2. View Manipulation

Key Action

q

Close view, if multiple views are open it will jump back to the previous view in the view stack. If it is the last open view it will quit. Use Q to quit all views at once.

Enter

This key is "context sensitive" depending on what view you are currently in. When in log view on a commit line or in the main view, split the view and show the commit diff. In the diff view pressing Enter will simply scroll the view one line down.

Tab

Switch to next view.

R

Reload and refresh the current view.

O

Maximize the current view to fill the whole display.

Up

This key is "context sensitive" and will move the cursor one line up. However, if you opened a diff view from the main view (split- or full-screen) it will change the cursor to point to the previous commit in the main view and update the diff view to display it. If you prefer this key to move the cursor or scroll within the diff view instead, use bind diff <Up> move-up or bind diff <Up> scroll-line-up, respectively.

Down

Similar to Up but will move down.

,

Move to parent. In the tree view, this means switch to the parent directory. In the blame view it will load blame for the parent commit. For merges the parent is queried.

4.3. View Specific Actions

Key Action

u

Update status of file. In the status view, this allows you to add an untracked file or stage changes to a file for next commit (similar to running git-add <filename>). In the stage view, when pressing this on a diff chunk line stages only that chunk for next commit, when not on a diff chunk line all changes in the displayed diff are staged.

M

Resolve unmerged file by launching git-mergetool(1). Note, to work correctly this might require some initial configuration of your preferred merge tool. See the manpage of git-mergetool(1).

!

Checkout file with unstaged changes. This will reset the file to contain the content it had at last commit.

1

Stage single diff line.

@

Move to next chunk in the stage view.

]

Increase the diff context.

[

Decrease the diff context.

4.4. Cursor Navigation

Key Action

k

Move cursor one line up.

j

Move cursor one line down.

PgUp,-,a

Move cursor one page up.

PgDown, Space

Move cursor one page down.

End

Jump to last line.

Home

Jump to first line.

4.5. Scrolling

Key Action

Insert

Scroll view one line up.

Delete

Scroll view one line down.

ScrollBack

Scroll view one page up.

ScrollFwd

Scroll view one page down.

Left

Scroll view one column left.

Right

Scroll view one column right.

|

Scroll view to the first column.

4.6. Searching

Key Action

/

Search the view. Opens a prompt for entering search regexp to use.

?

Search backwards in the view. Also prompts for regexp.

n

Find next match for the current search regexp.

N

Find previous match for the current search regexp.

4.7. Misc

Key Action

Q

Quit.

<C-L>

Redraw screen.

z

Stop all background loading. This can be useful if you use Tig in a repository with a long history without limiting the revision log.

v

Show version.

o

Open option menu

#

Toggle line numbers on/off.

D

Toggle date display on/off/relative/relative-compact/custom

A

Toggle author display on/off/abbreviated/email/email user name.

G

Toggle revision graph visualization on/off.

~

Toggle (line) graphics mode

F

Toggle reference display on/off (tag and branch names).

W

Toggle ignoring whitespace on/off for diffs

X

Toggle commit ID display on/off

%

Toggle file filtering in order to see the full diff instead of only the diff concerning the currently selected file.

$

Toggle highlighting of commit title overflow.

:

Open prompt. This allows you to specify what command to run and also to jump to a specific line, e.g. :23

e

Open file in editor.

4.8. Prompt

Key Action

:<number>

Jump to the specific line number, e.g. :80.

:<sha>

Jump to a specific commit, e.g. :2f12bcc.

:<x>

Execute the corresponding key binding, e.g. :q.

:!<command>

Execute a system command in a pager, e.g. :!git log -p.

:<action>

Execute a Tig command, e.g. :edit.

:goto <rev>

Jump to a specific revision, e.g. :goto %(commit)^2 to goto the current commit’s 2nd parent or :goto some/branch to goto the commit denoting the branch some/branch.

:save-display <file>

Save current display to <file>.

:save-options <file>

Save current options to <file>.

:save-view <file>

Save view info to <file> (for testing purposes).

:script <file>

Execute commands from <file>.

:exec <flags><args…>

Execute command using <args> with external user-defined command option flags defined in <flags>.

:echo <args…>

Display text in the status bar.

4.9. External Commands

For more custom needs, external commands provide a way to easily execute a script or program. They are bound to keys and use information from the current browsing state, such as the current commit ID. Tig comes with the following built-in external commands:

Keymap Key Action

main

C

git cherry-pick %(commit)

status

C

git commit

generic

G

git gc

5. Revision Specification

This section describes various ways to specify what revisions to display or otherwise limit the view to. Tig does not itself parse the described revision options so refer to the relevant Git man pages for further information. Relevant man pages besides git-log(1) are git-diff(1) and git-rev-list(1).

You can tune the interaction with Git by making use of the options explained in this section. For example, by configuring the environment variable described in the section on diff options.

5.1. Limit by Path Name

If you are interested only in those revisions that made changes to a specific file (or even several files) list the files like this:

$ tig Makefile README

To avoid ambiguity with Tig’s subcommands or repository references such as tag names, be sure to separate file names from other Git options using "--". So if you have a file named status it will clash with the status subcommand, and thus you will have to use:

$ tig -- status

5.2. Limit by Date or Number

To speed up interaction with Git, you can limit the amount of commits to show both for the log and main view. Either limit by date using e.g. --since=1.month or limit by the number of commits using -n400.

If you are only interested in changes that happened between two dates you can use:

$ tig --after="May 5th" --before="2006-05-16 15:44"
Note
If you want to avoid having to quote dates containing spaces you can use "." instead, e.g. --after=May.5th.

5.3. Limiting by Commit Ranges

Alternatively, commits can be limited to a specific range, such as "all commits between tag-1.0 and tag-2.0". For example:

$ tig tag-1.0..tag-2.0

This way of commit limiting makes it trivial to only browse the commits which haven’t been pushed to a remote branch. Assuming origin is your upstream remote branch, using:

$ tig origin..HEAD

will list what will be pushed to the remote branch. Optionally, the ending HEAD can be left out since it is implied.

5.4. Limiting by Reachability

Git interprets the range specifier "tag-1.0..tag-2.0" as "all commits reachable from tag-2.0 but not from tag-1.0". Where reachability refers to what commits are ancestors (or part of the history) of the branch or tagged revision in question.

If you prefer to specify which commit to preview in this way use the following:

$ tig tag-2.0 ^tag-1.0

You can think of ^ as a negation operator. Using this alternate syntax, it is possible to further prune commits by specifying multiple branch cut offs.

5.5. Combining Revisions Specification

Revision options can to some degree be combined, which makes it possible to say "show at most 20 commits from within the last month that changed files under the Documentation/ directory."

$ tig --since=1.month -n20 -- Documentation/

5.6. Examining All Repository References

In some cases, it can be useful to query changes across all references in a repository. An example is to ask "did any line of development in this repository change a particular file within the last week". This can be accomplished using:

$ tig --all --since=1.week -- Makefile

6. More Information

Please visit Tig’s home page or main Git repository for information about new releases and how to report bugs and feature requests.

7. Copyright

Copyright (c) 2006-2014 Jonas Fonseca <jonas.fonseca@gmail.com>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

8. See Also

Manpages:


tig-2.4.1/doc/tig.1000066400000000000000000000230461332650737300137310ustar00rootroot00000000000000'\" t .\" Title: tig .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/26/2018 .\" Manual: Tig Manual .\" Source: Tig 2.4.1 .\" Language: English .\" .TH "TIG" "1" "07/26/2018" "Tig 2\&.4\&.1" "Tig Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" tig \- text\-mode interface for Git .SH "SYNOPSIS" .sp .nf tig [options] [revisions] [\-\-] [paths] tig log [options] [revisions] [\-\-] [paths] tig show [options] [revisions] [\-\-] [paths] tig blame [options] [rev] [\-\-] path tig grep [options] [pattern] tig refs tig stash tig status tig < [Git command output] .fi .sp .SH "DESCRIPTION" .sp Tig is an ncurses\-based text\-mode interface for git(1)\&. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands\&. .SH "OPTIONS" .sp Command line options recognized by Tig include all valid git\-log(1) and git\-diff(1) options, as well as the following subcommands and Tig\-specific options\&. The first command line parameter not starting with "\-" is interpreted as being either a revision specification or a path and will end the option parsing\&. All additional options will be passed to the underlying Git command\&. .PP show .RS 4 Open diff view using the given git\-show(1) options\&. .RE .PP blame .RS 4 Show given file annotated by commits\&. Takes zero or more git\-blame(1) options\&. Optionally limited from given revision\&. .RE .PP status .RS 4 Start up in status view\&. .RE .PP log .RS 4 Start up in log view, displaying git\-log(1) output\&. .RE .PP refs .RS 4 Start up in refs view\&. .RE .PP stash .RS 4 Start up in stash view\&. .RE .PP grep .RS 4 Open the grep view\&. Supports the same options as git\-grep(1)\&. .RE .PP + .RS 4 Show the first view with line visible and selected\&. .RE .PP \-v, \-\-version .RS 4 Show version and exit\&. .RE .PP \-h, \-\-help .RS 4 Show help message and exit\&. .RE .SH "PAGER MODE" .sp Tig enters pager mode when input is provided via stdin and supports the following subcommands and options: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} When the \fIshow\fR subcommand is specified and the \fI\-\-stdin\fR option is given, stdin is assumed to be a list of commit IDs and will be forwarded to the diff view\(cqs underlying git\-show(1) command\&. For example: .RE .sp .if n \{\ .RS 4 .\} .nf $ git rev\-list \-\-author=vivien HEAD | tig show \-\-stdin .fi .if n \{\ .RE .\} .sp .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} When \fI\-\-stdin\fR is given, stdin is assumed to be a list of commit IDs and will be forwarded to the main view\(cqs underlying git\-log(1) command\&. For example: .RE .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-no\-walk \-\-stdin < cherry\-picks\&.txt .fi .if n \{\ .RE .\} .sp .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} When \fI\-\-pretty=raw\fR is given, stdin is assumed to be a "pretty=raw" formatted output similar to that of git\-log(1)\&. For example: .RE .sp .if n \{\ .RS 4 .\} .nf $ git reflog \-\-pretty=raw | tig \-\-pretty=raw .fi .if n \{\ .RE .\} .sp .sp When no subcommands nor options are given, the pager view will be used for displaying the Git command input given on stdin\&. The pager view assumes the input is either from git\-log(1) or git\-diff(1) and will highlight it similar to the log and diff views\&. For example: .sp .if n \{\ .RS 4 .\} .nf $ git log \-Schange \-p \-\-raw | tig .fi .if n \{\ .RE .\} .sp .SH "EXAMPLES" .sp Display the list of commits for the current branch: .sp .if n \{\ .RS 4 .\} .nf $ tig .fi .if n \{\ .RE .\} .sp .sp Display commits from one or more branches: .sp .if n \{\ .RS 4 .\} .nf $ tig test master .fi .if n \{\ .RE .\} .sp .sp Pretend as if all the refs in refs/ are listed on the command line: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-all .fi .if n \{\ .RE .\} .sp .sp Display differences between two branches: .sp .if n \{\ .RS 4 .\} .nf $ tig test\&.\&.master .fi .if n \{\ .RE .\} .sp .sp Display changes for sub\-module versions: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-submodule .fi .if n \{\ .RE .\} .sp .sp Display changes for a single file: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\- README .fi .if n \{\ .RE .\} .sp .sp Display contents of the README file in a specific revision: .sp .if n \{\ .RS 4 .\} .nf $ tig show tig\-0\&.8:README .fi .if n \{\ .RE .\} .sp .sp Display revisions between two dates for a specific file: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-after="2004\-01\-01" \-\-before="2006\-05\-16" \-\- README .fi .if n \{\ .RE .\} .sp .sp Blame file with copy detection enabled: .sp .if n \{\ .RS 4 .\} .nf $ tig blame \-C README .fi .if n \{\ .RE .\} .sp .sp Display the list of stashes: .sp .if n \{\ .RS 4 .\} .nf $ tig stash .fi .if n \{\ .RE .\} .sp .sp Grep all files for lines containing DEFINE_ENUM: .sp .if n \{\ .RS 4 .\} .nf $ tig grep \-p DEFINE_ENUM .fi .if n \{\ .RE .\} .sp .sp Show references (branches, remotes and tags): .sp .if n \{\ .RS 4 .\} .nf $ tig refs .fi .if n \{\ .RE .\} .sp .SH "ENVIRONMENT VARIABLES" .sp In addition to environment variables used by Git (e\&.g\&. GIT_DIR), Tig defines the ones below\&. The command related environment variables have access to the internal state of Tig via replacement variables, such as %(commit) and %(blob)\&. See \fBtigrc\fR(5) for a full list\&. .PP TIGRC_USER .RS 4 Path of the user configuration file (defaults to ~/\&.tigrc or $XDG_CONFIG_HOME/tig/config)\&. .RE .PP TIGRC_SYSTEM .RS 4 Path of the system wide configuration file (defaults to {sysconfdir}/tigrc)\&. Define to empty string to use built\-in configuration\&. .RE .PP TIG_LS_REMOTE .RS 4 Command for retrieving all repository references\&. The command should output data in the same format as git\-ls\-remote(1)\&. .RE .PP TIG_DIFF_OPTS .RS 4 The diff options to use in the diff view\&. The diff view uses git\-show(1) for formatting and always passes \-\-patch\-with\-stat\&. You may also set the diff\-options setting in the configuration file\&. .RE .PP TIG_TRACE .RS 4 Path for trace file where information about Git commands are logged\&. .RE .PP TIG_SCRIPT .RS 4 Path to script that should be executed automatically on startup\&. If this environment variable is defined to the empty string, the script is read from stdin\&. The script is interpreted line\-by\-line and can contain prompt commands and key mappings\&. .RE .PP TIG_NO_DISPLAY .RS 4 Open Tig without rendering anything to the terminal\&. This force Ncurses to write to /dev/null\&. The main use is for automated testing of Tig\&. .RE .SH "FILES" .PP \fI$XDG_CONFIG_HOME/tig/config\fR, \fI~/\&.config/tig/config\fR, \fI~/\&.tigrc\fR .RS 4 The Tig user configuration file is loaded in the following way\&. If $XDG_CONFIG_HOME is set, read user configuration from $XDG_CONFIG_HOME/tig/config\&. If $XDG_CONFIG_HOME is empty or undefined, read user configuration from ~/\&.config/tig/config if it exists and fall back to ~/\&.tigrc if it does not exist\&. See \fBtigrc\fR(5) for examples\&. .RE .PP \fI++SYSCONFDIR++/tigrc\fR .RS 4 System wide configuration file\&. .RE .PP \fI$GIT_DIR/config\fR, \fI~/\&.gitconfig\fR, \fI++SYSCONFDIR++/gitconfig\fR .RS 4 Git configuration files\&. Read on start\-up with the help of git\-config(1)\&. .RE .PP \fI$XDG_DATA_HOME/tig/history\fR, \fI~/\&.local/share/tig/history\fR, \fI~/\&.tig_history\fR .RS 4 When compiled with readline support, Tig writes a persistent command and search history\&. The location of the history file is determined in the following way\&. If $XDG_DATA_HOME is set and $XDG_DATA_HOME/tig/ exists, store history to $XDG_DATA_HOME/tig/history\&. If $XDG_DATA_HOME is empty or undefined, store history to ~/\&.local/share/tig/history if the directory ~/\&.local/share/tig/ exists, and fall back to ~/\&.tig_history if it does not exist\&. .RE .SH "BUGS" .sp Please visit Tig\(cqs \m[blue]\fBhome page\fR\m[]\&\s-2\u[1]\d\s+2 or \m[blue]\fBmain Git repository\fR\m[]\&\s-2\u[2]\d\s+2 for information about new releases and how to report bugs or feature request\&. .SH "COPYRIGHT" .sp Copyright (c) 2006\-2014 Jonas Fonseca <\m[blue]\fBjonas\&.fonseca@gmail\&.com\fR\m[]\&\s-2\u[3]\d\s+2> .sp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version\&. .SH "SEE ALSO" .sp \fBtigrc\fR(5), \fBtigmanual\fR(7), git(7) .SH "NOTES" .IP " 1." 4 home page .RS 4 \%https://jonas.github.io/tig .RE .IP " 2." 4 main Git repository .RS 4 \%https://github.com/jonas/tig .RE .IP " 3." 4 jonas.fonseca@gmail.com .RS 4 \%mailto:jonas.fonseca@gmail.com .RE tig-2.4.1/doc/tig.1.adoc000066400000000000000000000230011332650737300146250ustar00rootroot00000000000000tig(1) ====== :docext: adoc :sysconfdir: /etc NAME ---- tig - text-mode interface for Git SYNOPSIS -------- [verse] _______________________________________________________________________ tig [options] [revisions] [--] [paths] tig log [options] [revisions] [--] [paths] tig show [options] [revisions] [--] [paths] tig blame [options] [rev] [--] path tig grep [options] [pattern] tig refs tig stash tig status tig < [Git command output] _______________________________________________________________________ DESCRIPTION ----------- Tig is an ncurses-based text-mode interface for git(1). It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands. OPTIONS ------- Command line options recognized by Tig include all valid git-log(1) and git-diff(1) options, as well as the following subcommands and Tig-specific options. The first command line parameter not starting with "-" is interpreted as being either a revision specification or a path and will end the option parsing. All additional options will be passed to the underlying Git command. show:: Open diff view using the given git-show(1) options. blame:: Show given file annotated by commits. Takes zero or more git-blame(1) options. Optionally limited from given revision. status:: Start up in status view. log:: Start up in log view, displaying git-log(1) output. refs:: Start up in refs view. stash:: Start up in stash view. grep:: Open the grep view. Supports the same options as git-grep(1). +:: Show the first view with line visible and selected. -v, --version:: Show version and exit. -h, --help:: Show help message and exit. PAGER MODE ---------- Tig enters pager mode when input is provided via stdin and supports the following subcommands and options: -- - When the 'show' subcommand is specified and the '--stdin' option is given, stdin is assumed to be a list of commit IDs and will be forwarded to the diff view's underlying git-show(1) command. For example: ----------------------------------------------------------------------------- $ git rev-list --author=vivien HEAD | tig show --stdin ----------------------------------------------------------------------------- - When '--stdin' is given, stdin is assumed to be a list of commit IDs and will be forwarded to the main view's underlying git-log(1) command. For example: ----------------------------------------------------------------------------- $ tig --no-walk --stdin < cherry-picks.txt ----------------------------------------------------------------------------- - When '--pretty=raw' is given, stdin is assumed to be a "pretty=raw" formatted output similar to that of git-log(1). For example: ----------------------------------------------------------------------------- $ git reflog --pretty=raw | tig --pretty=raw ----------------------------------------------------------------------------- -- When no subcommands nor options are given, the pager view will be used for displaying the Git command input given on stdin. The pager view assumes the input is either from git-log(1) or git-diff(1) and will highlight it similar to the log and diff views. For example: ----------------------------------------------------------------------------- $ git log -Schange -p --raw | tig ----------------------------------------------------------------------------- EXAMPLES -------- Display the list of commits for the current branch: ----------------------------------------------------------------------------- $ tig ----------------------------------------------------------------------------- Display commits from one or more branches: ----------------------------------------------------------------------------- $ tig test master ----------------------------------------------------------------------------- Pretend as if all the refs in `refs/` are listed on the command line: ----------------------------------------------------------------------------- $ tig --all ----------------------------------------------------------------------------- Display differences between two branches: ----------------------------------------------------------------------------- $ tig test..master ----------------------------------------------------------------------------- Display changes for sub-module versions: ----------------------------------------------------------------------------- $ tig --submodule ----------------------------------------------------------------------------- Display changes for a single file: ----------------------------------------------------------------------------- $ tig -- README ----------------------------------------------------------------------------- Display contents of the README file in a specific revision: ----------------------------------------------------------------------------- $ tig show tig-0.8:README ----------------------------------------------------------------------------- Display revisions between two dates for a specific file: ----------------------------------------------------------------------------- $ tig --after="2004-01-01" --before="2006-05-16" -- README ----------------------------------------------------------------------------- Blame file with copy detection enabled: ----------------------------------------------------------------------------- $ tig blame -C README ----------------------------------------------------------------------------- Display the list of stashes: ----------------------------------------------------------------------------- $ tig stash ----------------------------------------------------------------------------- Grep all files for lines containing `DEFINE_ENUM`: ----------------------------------------------------------------------------- $ tig grep -p DEFINE_ENUM ----------------------------------------------------------------------------- Show references (branches, remotes and tags): ----------------------------------------------------------------------------- $ tig refs ----------------------------------------------------------------------------- ENVIRONMENT VARIABLES --------------------- In addition to environment variables used by Git (e.g. GIT_DIR), Tig defines the ones below. The command related environment variables have access to the internal state of Tig via replacement variables, such as `%(commit)` and `%(blob)`. ifdef::version[] See manpage:tigrc[5] for a full list. endif::version[] ifndef::version[] See link:tigrc.5.{docext}[tigrc(5)] for a full list. endif::version[] TIGRC_USER:: Path of the user configuration file (defaults to `~/.tigrc` or `$XDG_CONFIG_HOME/tig/config`). TIGRC_SYSTEM:: Path of the system wide configuration file (defaults to `{sysconfdir}/tigrc`). Define to empty string to use built-in configuration. TIG_LS_REMOTE:: Command for retrieving all repository references. The command should output data in the same format as git-ls-remote(1). TIG_DIFF_OPTS:: The diff options to use in the diff view. The diff view uses git-show(1) for formatting and always passes --patch-with-stat. You may also set the `diff-options` setting in the configuration file. TIG_TRACE:: Path for trace file where information about Git commands are logged. TIG_SCRIPT:: Path to script that should be executed automatically on startup. If this environment variable is defined to the empty string, the script is read from stdin. The script is interpreted line-by-line and can contain prompt commands and key mappings. TIG_NO_DISPLAY:: Open Tig without rendering anything to the terminal. This force Ncurses to write to /dev/null. The main use is for automated testing of Tig. FILES ----- '$XDG_CONFIG_HOME/tig/config':: '~/.config/tig/config':: '~/.tigrc':: The Tig user configuration file is loaded in the following way. If `$XDG_CONFIG_HOME` is set, read user configuration from `$XDG_CONFIG_HOME/tig/config`. If `$XDG_CONFIG_HOME` is empty or undefined, read user configuration from `~/.config/tig/config` if it exists and fall back to `~/.tigrc` if it does not exist. See manpage:tigrc[5] for examples. '{sysconfdir}/tigrc':: System wide configuration file. '$GIT_DIR/config':: '~/.gitconfig':: '{sysconfdir}/gitconfig':: Git configuration files. Read on start-up with the help of git-config(1). '$XDG_DATA_HOME/tig/history':: '~/.local/share/tig/history':: '~/.tig_history':: When compiled with readline support, Tig writes a persistent command and search history. The location of the history file is determined in the following way. If `$XDG_DATA_HOME` is set and `$XDG_DATA_HOME/tig/` exists, store history to `$XDG_DATA_HOME/tig/history`. If `$XDG_DATA_HOME` is empty or undefined, store history to `~/.local/share/tig/history` if the directory `~/.local/share/tig/` exists, and fall back to `~/.tig_history` if it does not exist. BUGS ---- Please visit Tig's https://jonas.github.io/tig[home page] or https://github.com/jonas/tig[main Git repository] for information about new releases and how to report bugs or feature request. COPYRIGHT --------- Copyright (c) 2006-2014 Jonas Fonseca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. SEE ALSO -------- ifndef::backend-docbook[] link:tigrc.5.{docext}[tigrc(5)], link:manual.{docext}[the Tig manual], endif::backend-docbook[] ifdef::backend-docbook[] manpage:tigrc[5], manpage:tigmanual[7], endif::backend-docbook[] git(7) tig-2.4.1/doc/tig.1.html000066400000000000000000000703621332650737300146770ustar00rootroot00000000000000 tig(1)

SYNOPSIS

tig        [options] [revisions] [--] [paths]
tig log    [options] [revisions] [--] [paths]
tig show   [options] [revisions] [--] [paths]
tig blame  [options] [rev] [--] path
tig grep   [options] [pattern]
tig refs
tig stash
tig status
tig <      [Git command output]

DESCRIPTION

Tig is an ncurses-based text-mode interface for git(1). It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands.

OPTIONS

Command line options recognized by Tig include all valid git-log(1) and git-diff(1) options, as well as the following subcommands and Tig-specific options. The first command line parameter not starting with "-" is interpreted as being either a revision specification or a path and will end the option parsing. All additional options will be passed to the underlying Git command.

show

Open diff view using the given git-show(1) options.

blame

Show given file annotated by commits. Takes zero or more git-blame(1) options. Optionally limited from given revision.

status

Start up in status view.

log

Start up in log view, displaying git-log(1) output.

refs

Start up in refs view.

stash

Start up in stash view.

grep

Open the grep view. Supports the same options as git-grep(1).

+<number>

Show the first view with line <number> visible and selected.

-v, --version

Show version and exit.

-h, --help

Show help message and exit.

PAGER MODE

Tig enters pager mode when input is provided via stdin and supports the following subcommands and options:

  • When the show subcommand is specified and the --stdin option is given, stdin is assumed to be a list of commit IDs and will be forwarded to the diff view’s underlying git-show(1) command. For example:

$ git rev-list --author=vivien HEAD | tig show --stdin
  • When --stdin is given, stdin is assumed to be a list of commit IDs and will be forwarded to the main view’s underlying git-log(1) command. For example:

$ tig --no-walk --stdin < cherry-picks.txt
  • When --pretty=raw is given, stdin is assumed to be a "pretty=raw" formatted output similar to that of git-log(1). For example:

$ git reflog --pretty=raw | tig --pretty=raw

When no subcommands nor options are given, the pager view will be used for displaying the Git command input given on stdin. The pager view assumes the input is either from git-log(1) or git-diff(1) and will highlight it similar to the log and diff views. For example:

$ git log -Schange -p --raw | tig

EXAMPLES

Display the list of commits for the current branch:

$ tig

Display commits from one or more branches:

$ tig test master

Pretend as if all the refs in refs/ are listed on the command line:

$ tig --all

Display differences between two branches:

$ tig test..master

Display changes for sub-module versions:

$ tig --submodule

Display changes for a single file:

$ tig -- README

Display contents of the README file in a specific revision:

$ tig show tig-0.8:README

Display revisions between two dates for a specific file:

$ tig --after="2004-01-01" --before="2006-05-16" -- README

Blame file with copy detection enabled:

$ tig blame -C README

Display the list of stashes:

$ tig stash

Grep all files for lines containing DEFINE_ENUM:

$ tig grep -p DEFINE_ENUM

Show references (branches, remotes and tags):

$ tig refs

ENVIRONMENT VARIABLES

In addition to environment variables used by Git (e.g. GIT_DIR), Tig defines the ones below. The command related environment variables have access to the internal state of Tig via replacement variables, such as %(commit) and %(blob). See tigrc(5) for a full list.

TIGRC_USER

Path of the user configuration file (defaults to ~/.tigrc or $XDG_CONFIG_HOME/tig/config).

TIGRC_SYSTEM

Path of the system wide configuration file (defaults to {sysconfdir}/tigrc). Define to empty string to use built-in configuration.

TIG_LS_REMOTE

Command for retrieving all repository references. The command should output data in the same format as git-ls-remote(1).

TIG_DIFF_OPTS

The diff options to use in the diff view. The diff view uses git-show(1) for formatting and always passes --patch-with-stat. You may also set the diff-options setting in the configuration file.

TIG_TRACE

Path for trace file where information about Git commands are logged.

TIG_SCRIPT

Path to script that should be executed automatically on startup. If this environment variable is defined to the empty string, the script is read from stdin. The script is interpreted line-by-line and can contain prompt commands and key mappings.

TIG_NO_DISPLAY

Open Tig without rendering anything to the terminal. This force Ncurses to write to /dev/null. The main use is for automated testing of Tig.

FILES

$XDG_CONFIG_HOME/tig/config
~/.config/tig/config
~/.tigrc

The Tig user configuration file is loaded in the following way. If $XDG_CONFIG_HOME is set, read user configuration from $XDG_CONFIG_HOME/tig/config. If $XDG_CONFIG_HOME is empty or undefined, read user configuration from ~/.config/tig/config if it exists and fall back to ~/.tigrc if it does not exist. See tigrc(5) for examples.

++SYSCONFDIR++/tigrc

System wide configuration file.

$GIT_DIR/config
~/.gitconfig
++SYSCONFDIR++/gitconfig

Git configuration files. Read on start-up with the help of git-config(1).

$XDG_DATA_HOME/tig/history
~/.local/share/tig/history
~/.tig_history

When compiled with readline support, Tig writes a persistent command and search history. The location of the history file is determined in the following way. If $XDG_DATA_HOME is set and $XDG_DATA_HOME/tig/ exists, store history to $XDG_DATA_HOME/tig/history. If $XDG_DATA_HOME is empty or undefined, store history to ~/.local/share/tig/history if the directory ~/.local/share/tig/ exists, and fall back to ~/.tig_history if it does not exist.

BUGS

Please visit Tig’s home page or main Git repository for information about new releases and how to report bugs or feature request.

Copyright (c) 2006-2014 Jonas Fonseca <jonas.fonseca@gmail.com>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

SEE ALSO


tig-2.4.1/doc/tigmanual.7000066400000000000000000000627471332650737300151500ustar00rootroot00000000000000'\" t .\" Title: tigmanual .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/26/2018 .\" Manual: Tig Manual .\" Source: Tig 2.4.1 .\" Language: English .\" .TH "TIGMANUAL" "7" "07/26/2018" "Tig 2\&.4\&.1" "Tig Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" tigmanual \- text\-mode interface for Git .SH "SYNOPSIS" .sp .nf tig [options] [revisions] [\-\-] [paths] tig show [options] [revisions] [\-\-] [paths] tig blame [options] [rev] [\-\-] path tig status tig < [Git command output] .fi .sp .SH "DESCRIPTION" .sp This is the manual for Tig, the ncurses\-based text\-mode interface for git\&. Tig allows you to browse changes in a Git repository and can additionally act as a pager for output of various Git commands\&. When used as a pager, it will display input from stdin and colorize it\&. .sp When browsing repositories, Tig uses the underlying Git commands to present the user with various views, such as summarized commit log and showing the commit with the log message, diffstat, and the diff\&. .SH "CALLING CONVENTIONS" .SS "Pager Mode" .sp If stdin is a pipe, any log or diff options will be ignored and the pager view will be opened loading data from stdin\&. The pager mode can be used for colorizing output from various Git commands\&. .sp Example on how to colorize the output of git\-show(1): .sp .if n \{\ .RS 4 .\} .nf $ git show | tig .fi .if n \{\ .RE .\} .sp .SS "Git Command Options" .sp All Git command options specified on the command line will be passed to the given command and all will be shell quoted before they are passed to the shell\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .sp If you specify options for the main view, you should not use the \-\-pretty option as this option will be set automatically to the format expected by the main view\&. .sp .5v .RE .sp Example on how to view a commit and show both author and committer information: .sp .if n \{\ .RS 4 .\} .nf $ tig show \-\-pretty=fuller .fi .if n \{\ .RE .\} .sp .sp See the section on specifying revisions for an introduction to revision options supported by the Git commands\&. For details on specific Git command options, refer to the man page of the command in question\&. .SH "THE VIEWER" .sp The display consists of a status window on the last line of the screen and one or more views\&. The default is to only show one view at a time but it is possible to split both the main and log view to also show the commit diff\&. .sp If you are in the log view and press \fIEnter\fR when the current line is a commit line, such as: .sp .if n \{\ .RS 4 .\} .nf commit 4d55caff4cc89335192f3e566004b4ceef572521 .fi .if n \{\ .RE .\} .sp .sp You will split the view so that the log view is displayed in the top window and the diff view in the bottom window\&. You can switch between the two views by pressing \fITab\fR\&. To maximize the log view again, simply press \fIl\fR\&. .SS "Views" .sp Various \fIviews\fR of a repository are presented\&. Each view is based on output from an external command, most often \fIgit log\fR, \fIgit diff\fR, or \fIgit show\fR\&. .PP The main view .RS 4 Is the default view, and it shows a one line summary of each commit in the chosen list of revisions\&. The summary includes author date, author, and the first line of the log message\&. Additionally, any repository references, such as tags, will be shown\&. .RE .PP The log view .RS 4 Presents a more rich view of the revision log showing the whole log message and the diffstat\&. .RE .PP The diff view .RS 4 Shows either the diff of the current working tree, that is, what has changed since the last commit, or the commit diff complete with log message, diffstat and diff\&. .RE .PP The tree view .RS 4 Lists directory trees associated with the current revision allowing subdirectories to be descended or ascended and file blobs to be viewed\&. .RE .PP The blob view .RS 4 Displays the file content or "blob" of data associated with a file name\&. .RE .PP The blame view .RS 4 Displays the file content annotated or blamed by commits\&. .RE .PP The refs view .RS 4 Displays the branches, remotes and tags in the repository\&. .RE .PP The status view .RS 4 Displays status of files in the working tree and allows changes to be staged/unstaged as well as adding of untracked files\&. .RE .PP The stage view .RS 4 Displays diff changes for staged or unstaged files being tracked or file content of untracked files\&. .RE .PP The stash view .RS 4 Displays the list of stashes in the repository\&. .RE .PP The grep view .RS 4 Displays a list of files and all the lines that matches a search pattern\&. .RE .PP The pager view .RS 4 Is used for displaying both input from stdin and output from Git commands entered in the internal prompt\&. .RE .PP The help view .RS 4 Displays a quick reference of key bindings\&. .RE .SS "Browsing State and User\-defined Commands" .sp The viewer keeps track of both what head and commit ID you are currently viewing\&. The commit ID will follow the cursor line and change every time you highlight a different commit\&. Whenever you reopen the diff view it will be reloaded, if the commit ID changed\&. The head ID is used when opening the main and log view to indicate from what revision to show history\&. .sp Some of the commands used or provided by Tig can be configured\&. This goes for some of the environment variables as well as the external commands\&. These user\-defined commands can use arguments that refer to the current browsing state by using one of the following variables\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B Table\ \&1.\ \&Browsing state variables .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp %(head) T}:T{ .sp The currently viewed \fIhead\fR ID\&. Defaults to HEAD T} T{ .sp %(commit) T}:T{ .sp The currently selected commit ID\&. T} T{ .sp %(blob) T}:T{ .sp The currently selected blob ID\&. T} T{ .sp %(branch) T}:T{ .sp The currently selected branch name\&. T} T{ .sp %(remote) T}:T{ .sp The currently selected remote name\&. For remote branches %(branch) will contain the branch name\&. T} T{ .sp %(tag) T}:T{ .sp The currently selected tag name\&. T} T{ .sp %(stash) T}:T{ .sp The currently selected stash name\&. T} T{ .sp %(directory) T}:T{ .sp The current directory path in the tree view or "\&." if undefined\&. T} T{ .sp %(file) T}:T{ .sp The currently selected file\&. T} T{ .sp %(lineno) T}:T{ .sp The currently selected line number\&. Defaults to 0\&. T} T{ .sp %(ref) T}:T{ .sp The reference given to blame or HEAD if undefined\&. T} T{ .sp %(revargs) T}:T{ .sp The revision arguments passed on the command line\&. T} T{ .sp %(fileargs) T}:T{ .sp The file arguments passed on the command line\&. T} T{ .sp %(cmdlineargs) T}:T{ .sp All other options passed on the command line\&. T} T{ .sp %(diffargs) T}:T{ .sp Options from \fIdiff\-options\fR or \fITIG_DIFF_OPTS\fR used by the diff and stage view\&. T} T{ .sp %(blameargs) T}:T{ .sp Options from \fIblame\-options\fR used by the blame view\&. T} T{ .sp %(logargs) T}:T{ .sp Options from \fIlog\-options\fR used by the log view\&. T} T{ .sp %(mainargs) T}:T{ .sp Options from \fImain\-options\fR used by the main view\&. T} T{ .sp %(prompt) T}:T{ .sp Prompt for the argument value\&. Optionally specify a custom prompt using "%(prompt Enter branch name: )" T} T{ .sp %(text) T}:T{ .sp The text of the currently selected line\&. T} T{ .sp %(repo:head) T}:T{ .sp The name of the checked out branch, e\&.g\&. master T} T{ .sp %(repo:head\-id) T}:T{ .sp The commit ID of the checked out branch\&. T} T{ .sp %(repo:remote) T}:T{ .sp The remote associated with the checked out branch, e\&.g\&. origin/master\&. T} T{ .sp %(repo:cdup) T}:T{ .sp The path to change directory to the repository root, e\&.g\&. \&.\&./ T} T{ .sp %(repo:prefix) T}:T{ .sp The path prefix of the current work directory, e\&.g subdir/\&. T} T{ .sp %(repo:git\-dir) T}:T{ .sp The path to the Git directory, e\&.g\&. /src/repo/\&.git\&. T} T{ .sp %(repo:worktree) T}:T{ .sp The worktree path, if defined\&. T} T{ .sp %(repo:is\-inside\-work\-tree) T}:T{ .sp Whether Tig is running inside a work tree, either true or false\&. T} .TE .sp 1 .sp Example user\-defined commands: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Allow to amend the last commit: .sp .if n \{\ .RS 4 .\} .nf bind generic + !git commit \-\-amend .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Copy commit ID to clipboard: .sp .if n \{\ .RS 4 .\} .nf bind generic 9 !@sh \-c "echo \-n %(commit) | xclip \-selection c" .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Add/edit notes for the current commit used during a review: .sp .if n \{\ .RS 4 .\} .nf bind generic T !git notes edit %(commit) .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Enter Git\(cqs interactive add for fine\-grained staging of file content: .sp .if n \{\ .RS 4 .\} .nf bind generic I !git add \-i %(file) .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Rebase current branch on top of the selected branch: .sp .if n \{\ .RS 4 .\} .nf bind refs 3 !git rebase \-i %(branch) .fi .if n \{\ .RE .\} .RE .SS "Title Windows" .sp Each view has a title window which shows the name of the view, current commit ID if available, and where the view is positioned: .sp .if n \{\ .RS 4 .\} .nf [main] c622eefaa485995320bc743431bae0d497b1d875 \- commit 1 of 61 (1%) .fi .if n \{\ .RE .\} .sp .sp By default, the title of the current view is highlighted using bold font\&. For long loading views (taking over 3 seconds) the time since loading started will be appended: .sp .if n \{\ .RS 4 .\} .nf [main] 77d9e40fbcea3238015aea403e06f61542df9a31 \- commit 1 of 779 (0%) 5s .fi .if n \{\ .RE .\} .sp .SH "ENVIRONMENT VARIABLES" .sp Several options related to the interface with Git can be configured via environment options\&. .SS "Configuration Files" .sp Upon startup, Tig first reads the system wide configuration file ({sysconfdir}/tigrc by default) and then proceeds to read the user\(cqs configuration file (~/\&.tigrc or $XDG_CONFIG_HOME/tig/config by default)\&. The paths to either of these files can be overridden through the following environment variables: .PP TIGRC_USER .RS 4 Path of the user configuration file\&. .RE .PP TIGRC_SYSTEM .RS 4 Path of the system wide configuration file\&. .RE .sp History Files .sp .if n \{\ .RS 4 .\} .nf If compiled with readline support, Tig writes a persistent command and search history to `~/\&.tig_history` or `$XDG_DATA_HOME/tig/history`\&. [[repo\-refs]] Repository References .fi .if n \{\ .RE .\} .sp .sp Commits that are referenced by tags and branch heads will be marked by the reference name surrounded by \fI[\fR and \fI]\fR: .sp .if n \{\ .RS 4 .\} .nf 2006\-03\-26 19:42 Petr Baudis | [cogito\-0\&.17\&.1] Cogito 0\&.17\&.1 .fi .if n \{\ .RE .\} .sp .sp If you want to limit what branches are shown, say only show branches named master or those which start with the feature/ prefix, you can do it by setting the following variable: .sp .if n \{\ .RS 4 .\} .nf $ TIG_LS_REMOTE="git ls\-remote \&. master feature/*" tig .fi .if n \{\ .RE .\} .sp .sp Or set the variable permanently in your environment\&. .PP TIG_LS_REMOTE .RS 4 Command for retrieving all repository references\&. The command should output data in the same format as git\-ls\-remote(1)\&. Defaults to: .RE .sp .if n \{\ .RS 4 .\} .nf git ls\-remote \&. .fi .if n \{\ .RE .\} .sp .SS "Diff options" .sp It is possible to alter how diffs are shown by the diff view\&. If for example you prefer to have commit and author dates shown as relative dates, use: .sp .if n \{\ .RS 4 .\} .nf $ TIG_DIFF_OPTS="\-\-relative\-date" tig .fi .if n \{\ .RE .\} .sp .sp Or set the variable permanently in your environment\&. .SH "DEFAULT KEYBINDINGS" .sp Below the default key bindings are shown\&. .SS "View Switching" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp m T}:T{ .sp Switch to main view\&. T} T{ .sp d T}:T{ .sp Switch to diff view\&. T} T{ .sp l T}:T{ .sp Switch to log view\&. T} T{ .sp p T}:T{ .sp Switch to pager view\&. T} T{ .sp t T}:T{ .sp Switch to (directory) tree view\&. T} T{ .sp f T}:T{ .sp Switch to (file) blob view\&. T} T{ .sp g T}:T{ .sp Switch to grep view\&. T} T{ .sp b T}:T{ .sp Switch to blame view\&. T} T{ .sp r T}:T{ .sp Switch to refs view\&. T} T{ .sp y T}:T{ .sp Switch to stash view\&. T} T{ .sp h T}:T{ .sp Switch to help view T} T{ .sp s T}:T{ .sp Switch to status view T} T{ .sp c T}:T{ .sp Switch to stage view T} .TE .sp 1 .SS "View Manipulation" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp q T}:T{ .sp Close view, if multiple views are open it will jump back to the previous view in the view stack\&. If it is the last open view it will quit\&. Use \fIQ\fR to quit all views at once\&. T} T{ .sp Enter T}:T{ .sp This key is "context sensitive" depending on what view you are currently in\&. When in log view on a commit line or in the main view, split the view and show the commit diff\&. In the diff view pressing Enter will simply scroll the view one line down\&. T} T{ .sp Tab T}:T{ .sp Switch to next view\&. T} T{ .sp R T}:T{ .sp Reload and refresh the current view\&. T} T{ .sp O T}:T{ .sp Maximize the current view to fill the whole display\&. T} T{ .sp Up T}:T{ .sp This key is "context sensitive" and will move the cursor one line up\&. However, if you opened a diff view from the main view (split\- or full\-screen) it will change the cursor to point to the previous commit in the main view and update the diff view to display it\&. If you prefer this key to move the cursor or scroll within the diff view instead, use bind diff move\-up or bind diff scroll\-line\-up, respectively\&. T} T{ .sp Down T}:T{ .sp Similar to \fIUp\fR but will move down\&. T} T{ .sp , T}:T{ .sp Move to parent\&. In the tree view, this means switch to the parent directory\&. In the blame view it will load blame for the parent commit\&. For merges the parent is queried\&. T} .TE .sp 1 .SS "View Specific Actions" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp u T}:T{ .sp Update status of file\&. In the status view, this allows you to add an untracked file or stage changes to a file for next commit (similar to running git\-add )\&. In the stage view, when pressing this on a diff chunk line stages only that chunk for next commit, when not on a diff chunk line all changes in the displayed diff are staged\&. T} T{ .sp M T}:T{ .sp Resolve unmerged file by launching git\-mergetool(1)\&. Note, to work correctly this might require some initial configuration of your preferred merge tool\&. See the manpage of git\-mergetool(1)\&. T} T{ .sp ! T}:T{ .sp Checkout file with unstaged changes\&. This will reset the file to contain the content it had at last commit\&. T} T{ .sp 1 T}:T{ .sp Stage single diff line\&. T} T{ .sp @ T}:T{ .sp Move to next chunk in the stage view\&. T} T{ .sp ] T}:T{ .sp Increase the diff context\&. T} T{ .sp [ T}:T{ .sp Decrease the diff context\&. T} .TE .sp 1 .SS "Cursor Navigation" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp k T}:T{ .sp Move cursor one line up\&. T} T{ .sp j T}:T{ .sp Move cursor one line down\&. T} T{ .sp PgUp,\-,a T}:T{ .sp Move cursor one page up\&. T} T{ .sp PgDown, Space T}:T{ .sp Move cursor one page down\&. T} T{ .sp End T}:T{ .sp Jump to last line\&. T} T{ .sp Home T}:T{ .sp Jump to first line\&. T} .TE .sp 1 .SS "Scrolling" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp Insert T}:T{ .sp Scroll view one line up\&. T} T{ .sp Delete T}:T{ .sp Scroll view one line down\&. T} T{ .sp ScrollBack T}:T{ .sp Scroll view one page up\&. T} T{ .sp ScrollFwd T}:T{ .sp Scroll view one page down\&. T} T{ .sp Left T}:T{ .sp Scroll view one column left\&. T} T{ .sp Right T}:T{ .sp Scroll view one column right\&. T} T{ .sp | T}:T{ .sp Scroll view to the first column\&. T} .TE .sp 1 .SS "Searching" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt. T{ .sp / T}:T{ .sp Search the view\&. Opens a prompt for entering search regexp to use\&. T} T{ .sp ? T}:T{ .sp Search backwards in the view\&. Also prompts for regexp\&. T} T{ .sp n T}:T{ .sp Find next match for the current search regexp\&. T} T{ .sp N T}:T{ .sp Find previous match for the current search regexp\&. T} .TE .sp 1 .SS "Misc" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp Q T}:T{ .sp Quit\&. T} T{ .sp T}:T{ .sp Redraw screen\&. T} T{ .sp z T}:T{ .sp Stop all background loading\&. This can be useful if you use Tig in a repository with a long history without limiting the revision log\&. T} T{ .sp v T}:T{ .sp Show version\&. T} T{ .sp o T}:T{ .sp Open option menu T} T{ .sp # T}:T{ .sp Toggle line numbers on/off\&. T} T{ .sp D T}:T{ .sp Toggle date display on/off/relative/relative\-compact/custom T} T{ .sp A T}:T{ .sp Toggle author display on/off/abbreviated/email/email user name\&. T} T{ .sp G T}:T{ .sp Toggle revision graph visualization on/off\&. T} T{ .sp ~ T}:T{ .sp Toggle (line) graphics mode T} T{ .sp F T}:T{ .sp Toggle reference display on/off (tag and branch names)\&. T} T{ .sp W T}:T{ .sp Toggle ignoring whitespace on/off for diffs T} T{ .sp X T}:T{ .sp Toggle commit ID display on/off T} T{ .sp % T}:T{ .sp Toggle file filtering in order to see the full diff instead of only the diff concerning the currently selected file\&. T} T{ .sp $ T}:T{ .sp Toggle highlighting of commit title overflow\&. T} T{ .sp : T}:T{ .sp Open prompt\&. This allows you to specify what command to run and also to jump to a specific line, e\&.g\&. :23 T} T{ .sp e T}:T{ .sp Open file in editor\&. T} .TE .sp 1 .SS "Prompt" .TS tab(:); ltB ltB. T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp : T}:T{ .sp Jump to the specific line number, e\&.g\&. :80\&. T} T{ .sp : T}:T{ .sp Jump to a specific commit, e\&.g\&. :2f12bcc\&. T} T{ .sp : T}:T{ .sp Execute the corresponding key binding, e\&.g\&. :q\&. T} T{ .sp :! T}:T{ .sp Execute a system command in a pager, e\&.g\&. :!git log \-p\&. T} T{ .sp : T}:T{ .sp Execute a Tig command, e\&.g\&. :edit\&. T} T{ .sp :goto T}:T{ .sp Jump to a specific revision, e\&.g\&. :goto %(commit)^2 to goto the current commit\(cqs 2nd parent or :goto some/branch to goto the commit denoting the branch some/branch\&. T} T{ .sp :save\-display T}:T{ .sp Save current display to \&. T} T{ .sp :save\-options T}:T{ .sp Save current options to \&. T} T{ .sp :save\-view T}:T{ .sp Save view info to (for testing purposes)\&. T} T{ .sp :script T}:T{ .sp Execute commands from \&. T} T{ .sp :exec T}:T{ .sp Execute command using with external user\-defined command option flags defined in \&. T} T{ .sp :echo T}:T{ .sp Display text in the status bar\&. T} .TE .sp 1 .SS "External Commands" .sp For more custom needs, external commands provide a way to easily execute a script or program\&. They are bound to keys and use information from the current browsing state, such as the current commit ID\&. Tig comes with the following built\-in external commands: .TS tab(:); ltB ltB ltB. T{ Keymap T}:T{ Key T}:T{ Action T} .T& lt lt lt lt lt lt lt lt lt. T{ .sp main T}:T{ .sp C T}:T{ .sp git cherry\-pick %(commit) T} T{ .sp status T}:T{ .sp C T}:T{ .sp git commit T} T{ .sp generic T}:T{ .sp G T}:T{ .sp git gc T} .TE .sp 1 .SH "REVISION SPECIFICATION" .sp This section describes various ways to specify what revisions to display or otherwise limit the view to\&. Tig does not itself parse the described revision options so refer to the relevant Git man pages for further information\&. Relevant man pages besides git\-log(1) are git\-diff(1) and git\-rev\-list(1)\&. .sp You can tune the interaction with Git by making use of the options explained in this section\&. For example, by configuring the environment variable described in the section on diff options\&. .SS "Limit by Path Name" .sp If you are interested only in those revisions that made changes to a specific file (or even several files) list the files like this: .sp .if n \{\ .RS 4 .\} .nf $ tig Makefile README .fi .if n \{\ .RE .\} .sp .sp To avoid ambiguity with Tig\(cqs subcommands or repository references such as tag names, be sure to separate file names from other Git options using "\-\-"\&. So if you have a file named \fIstatus\fR it will clash with the \fIstatus\fR subcommand, and thus you will have to use: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\- status .fi .if n \{\ .RE .\} .sp .SS "Limit by Date or Number" .sp To speed up interaction with Git, you can limit the amount of commits to show both for the log and main view\&. Either limit by date using e\&.g\&. \-\-since=1\&.month or limit by the number of commits using \-n400\&. .sp If you are only interested in changes that happened between two dates you can use: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-after="May 5th" \-\-before="2006\-05\-16 15:44" .fi .if n \{\ .RE .\} .sp .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .sp If you want to avoid having to quote dates containing spaces you can use "\&." instead, e\&.g\&. \-\-after=May\&.5th\&. .sp .5v .RE .SS "Limiting by Commit Ranges" .sp Alternatively, commits can be limited to a specific range, such as "all commits between \fItag\-1\&.0\fR and \fItag\-2\&.0\fR"\&. For example: .sp .if n \{\ .RS 4 .\} .nf $ tig tag\-1\&.0\&.\&.tag\-2\&.0 .fi .if n \{\ .RE .\} .sp .sp This way of commit limiting makes it trivial to only browse the commits which haven\(cqt been pushed to a remote branch\&. Assuming \fIorigin\fR is your upstream remote branch, using: .sp .if n \{\ .RS 4 .\} .nf $ tig origin\&.\&.HEAD .fi .if n \{\ .RE .\} .sp .sp will list what will be pushed to the remote branch\&. Optionally, the ending \fIHEAD\fR can be left out since it is implied\&. .SS "Limiting by Reachability" .sp Git interprets the range specifier "tag\-1\&.0\&.\&.tag\-2\&.0" as "all commits reachable from \fItag\-2\&.0\fR but not from \fItag\-1\&.0\fR"\&. Where reachability refers to what commits are ancestors (or part of the history) of the branch or tagged revision in question\&. .sp If you prefer to specify which commit to preview in this way use the following: .sp .if n \{\ .RS 4 .\} .nf $ tig tag\-2\&.0 ^tag\-1\&.0 .fi .if n \{\ .RE .\} .sp .sp You can think of \fI^\fR as a negation operator\&. Using this alternate syntax, it is possible to further prune commits by specifying multiple branch cut offs\&. .SS "Combining Revisions Specification" .sp Revision options can to some degree be combined, which makes it possible to say "show at most 20 commits from within the last month that changed files under the Documentation/ directory\&." .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-since=1\&.month \-n20 \-\- Documentation/ .fi .if n \{\ .RE .\} .sp .SS "Examining All Repository References" .sp In some cases, it can be useful to query changes across all references in a repository\&. An example is to ask "did any line of development in this repository change a particular file within the last week"\&. This can be accomplished using: .sp .if n \{\ .RS 4 .\} .nf $ tig \-\-all \-\-since=1\&.week \-\- Makefile .fi .if n \{\ .RE .\} .sp .SH "MORE INFORMATION" .sp Please visit Tig\(cqs \m[blue]\fBhome page\fR\m[]\&\s-2\u[1]\d\s+2 or \m[blue]\fBmain Git repository\fR\m[]\&\s-2\u[2]\d\s+2 for information about new releases and how to report bugs and feature requests\&. .SH "COPYRIGHT" .sp Copyright (c) 2006\-2014 Jonas Fonseca <\m[blue]\fBjonas\&.fonseca@gmail\&.com\fR\m[]\&\s-2\u[3]\d\s+2> .sp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version\&. .SH "SEE ALSO" .sp Manpages: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBtig\fR(1) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBtigrc\fR(5) .RE .SH "NOTES" .IP " 1." 4 home page .RS 4 \%https://jonas.github.io/tig .RE .IP " 2." 4 main Git repository .RS 4 \%https://github.com/jonas/tig .RE .IP " 3." 4 jonas.fonseca@gmail.com .RS 4 \%mailto:jonas.fonseca@gmail.com .RE tig-2.4.1/doc/tigmanual.7.adoc000066400000000000000000000005051332650737300160350ustar00rootroot00000000000000tigmanual(7) ============ NAME ---- tigmanual - text-mode interface for Git SYNOPSIS -------- [verse] tig [options] [revisions] [--] [paths] tig show [options] [revisions] [--] [paths] tig blame [options] [rev] [--] path tig status tig < [Git command output] DESCRIPTION ----------- include::manual.adoc[] tig-2.4.1/doc/tigrc.5000066400000000000000000001415671332650737300142730ustar00rootroot00000000000000'\" t .\" Title: tigrc .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/26/2018 .\" Manual: Tig Manual .\" Source: Tig 2.4.1 .\" Language: English .\" .TH "TIGRC" "5" "07/26/2018" "Tig 2\&.4\&.1" "Tig Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" tigrc \- Tig configuration file .SH "SYNOPSIS" .sp .nf \fBset\fR \fIvariable\fR \fB=\fR \fIvalue\fR \fBbind\fR \fIkeymap\fR \fIkey\fR \fIaction\fR \fBcolor\fR \fIarea\fR \fIfgcolor\fR \fIbgcolor\fR \fI[attributes]\fR \fBsource\fR \fIpath\fR .fi .sp .SH "DESCRIPTION" .sp You can permanently set an option by putting it in the ~/\&.tigrc file\&. The file consists of a series of \fIcommands\fR\&. Each line of the file may contain only one command\&. Commands can span multiple lines if each line is terminated by a backslash (\fI\e\fR) character\&. .sp The hash mark (\fI#\fR) is used as a \fIcomment\fR character\&. All text after the comment character to the end of the line is ignored\&. You can use comments to annotate your initialization file\&. .sp Certain options can be manipulated at runtime via the option menu\&. In addition, options can also be toggled with the :toggle prompt command or by entering the configuration command into the prompt\&. .sp In some environments, a user\(cqs configuration will be stored in the alternate location $XDG_CONFIG_HOME/tig/config\&. For brevity, this document will refer only to ~/\&.tigrc\&. .SH "GIT CONFIGURATION" .sp Alternatively to using ~/\&.tigrc, Tig options can be set by putting them in one of the Git configuration files, which are read by Tig on startup\&. See \fIgit\-config(1)\fR for which files to use\&. The following example show the basic syntax to use for settings, bindings and colors\&. .sp .if n \{\ .RS 4 .\} .nf [tig] show\-changes = true [tig "color"] cursor = yellow red bold [tig "bind"] generic = P parent .fi .if n \{\ .RE .\} .sp .sp In addition to tig\-specific options, the following Git options are read from the Git configuration: .PP \fIcolor\&.*\fR .RS 4 Colors for the various UI types\&. Can be configured via the \fIgit\-colors\fR setting\&. .RE .PP \fIcore\&.abbrev\fR .RS 4 The width of the commit ID\&. See also \fIid\-width\fR option\&. .RE .PP \fIcore\&.editor\fR .RS 4 The editor command\&. Can be overridden by setting GIT_EDITOR\&. .RE .PP \fIcore\&.worktree\fR .RS 4 The path to the root of the working tree\&. .RE .PP \fIgui\&.encoding\fR .RS 4 The encoding to use for displaying of file content\&. .RE .PP \fIi18n\&.commitencoding\fR .RS 4 The encoding used for commits\&. The default is UTF\-8\&. .RE .SH "SET COMMAND" .sp A few selective variables can be configured via the set command\&. The syntax is: .sp .if n \{\ .RS 4 .\} .nf \fBset\fR variables \fB=\fR value .fi .if n \{\ .RE .\} .sp .sp Examples: .sp .if n \{\ .RS 4 .\} .nf set commit\-order = topo # Order commits topologically set git\-colors = no # Do not read Git\*(Aqs color settings\&. set horizontal\-scroll = 33% # Scroll 33% of the view width set blame\-options = \-C \-C \-C # Blame lines from other files # Wrap branch names with () and tags with <> set reference\-format = (branch) # Configure blame view columns using command spanning multiple lines\&. set blame\-view = \e date:default \e author:abbreviated \e file\-name:auto \e id:yes,color \e line\-number:yes,interval=5 text .fi .if n \{\ .RE .\} .sp .sp Or in the Git configuration files: .sp .if n \{\ .RS 4 .\} .nf [tig] line\-graphics = no # Disable graphics characters tab\-size = 8 # Number of spaces per tab .fi .if n \{\ .RE .\} .sp .sp The type of variables is either bool, int, string, or mixed\&. .PP Valid bool values .RS 4 To set a bool variable to true use either "1", "true", or "yes"\&. Any other value will set the variable to false\&. .RE .PP Valid int values .RS 4 A non\-negative integer\&. .RE .PP Valid string values .RS 4 A string of characters\&. Optionally, use either \*(Aq or " as delimiters\&. .RE .PP Valid mixed values .RS 4 These values are composites of the above types\&. The valid values are specified in the description\&. .RE .SS "Variables" .sp The following variables can be set: .PP \fIdiff\-options\fR (string) .RS 4 A space\-separated string of diff options to use in the diff view\&. git\-show(1) is used for formatting and always passes \-\-patch\-with\-stat\&. Can control display of commit header metadata, passing option \-\-format\&. This option overrides any options specified in the TIG_DIFF_OPTS environment variable (described in \fBtig\fR(1)), but is itself overridden by diff flags given on the command line invocation\&. .RE .PP \fIblame\-options\fR (string) .RS 4 A space\-separated string of default blame options\&. Can be used for telling git\-blame(1) how to detect the origin of lines\&. The options are ignored when Tig is started in blame mode and given blame options on the command line\&. .RE .PP \fIlog\-options\fR (string) .RS 4 A space\-separated string of default options that should be passed to the git\-log(1) command used by the log view\&. Options can be overridden by command line options\&. Used internally override custom \(oqpretty\&.format\(cq settings that break the log view\&. .RE .PP \fImain\-options\fR (string) .RS 4 A space\-separated string of default options that should be passed to the git\-log(1) command used by the main view\&. Options can be overridden by command line options\&. .RE .PP \fIreference\-format\fR (string) .RS 4 A space\-separated string of format strings used for formatting reference names\&. Wrap the name of the reference type with the characters you would like to use for formatting, e\&.g\&. [tag] and \&. If no format is specified for local\-tag, the format for tag is used\&. Similarly, if no format is specified for tracked\-remote the remote format is used\&. Prefix with hide: to not show that reference type, e\&.g\&. hide:remote\&. Supported reference types are: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} head : The current HEAD\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} tag : A signed tag\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} local\-tag : An unsigned tag\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} remote : A remote\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} tracked\-remote : The remote tracked by current HEAD\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} replace : A replaced reference\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} branch : Any other reference\&. .RE .RE .PP \fIline\-graphics\fR (mixed) [ascii|default|utf\-8|] .RS 4 What type of character graphics for line drawing\&. .RE .PP \fItruncation\-delimiter\fR (mixed) [utf\-8|] .RS 4 A single character to draw where columns are truncated\&. The default is "~"\&. The special value "utf\-8" refers to the character "\&..." ("Midline Horizontal Ellipsis")\&. .RE .PP \fIhorizontal\-scroll\fR (mixed) .RS 4 Interval to scroll horizontally in each step\&. Can be specified either as the number of columns, e\&.g\&. \fI5\fR, or as a percentage of the view width, e\&.g\&. \fI33%\fR, where the maximum is 100%\&. For percentages it is always ensured that at least one column is scrolled\&. The default is to scroll \fI50%\fR of the view width\&. .RE .PP \fIgit\-colors\fR (list) .RS 4 A space\-separated list of "key=value" pairs where the key is a Git color name and the value is a Tig color name, e\&.g\&. "branch\&.current=main\-head" and "grep\&.filename=grep\&.file"\&. Set to "no" to disable\&. .RE .PP \fIshow\-notes\fR (mixed) [|] .RS 4 Whether to show notes for a commit\&. When set to a note reference the reference is passed to git show \-\-notes=\&. Notes are enabled by default\&. .RE .PP \fIshow\-changes\fR (bool) .RS 4 Whether to show staged and unstaged changes in the main view\&. .RE .PP \fIvertical\-split\fR (mixed) [auto|] .RS 4 Whether to split the view horizontally or vertically\&. "auto" (which is the default) means that it will depend on the window dimensions\&. When true vertical orientation is used, and false sets the orientation to horizontal\&. .RE .PP \fIsplit\-view\-height\fR (mixed) .RS 4 The height of the bottom view in a horizontally split display\&. Can be specified either as the number of rows, e\&.g\&. \fI5\fR, or as a percentage of the view height, e\&.g\&. \fI80%\fR, where the maximum is 100%\&. It is always ensured that the smaller of the views is at least four rows high\&. The default is \fI67%\fR\&. .RE .PP \fIsplit\-view\-width\fR (mixed) .RS 4 Width of the right\-most view in a vertically split display\&. Can be specified either as the number of column, e\&.g\&. \fI5\fR, or as a percentage of the view width, e\&.g\&. \fI80%\fR, where the maximum is 100%\&. It is always ensured that the smaller of the views is at least four columns wide\&. The default is \fI50%\fR\&. .RE .PP \fIstatus\-show\-untracked\-dirs\fR (bool) .RS 4 Show untracked directories contents in the status view (analog to git ls\-files \-\-directory option)\&. On by default\&. .RE .PP \fIstatus\-show\-untracked\-files\fR (bool) .RS 4 Show untracked files in the status view (mirrors Git\(cqs status\&.showUntrackedFiles option)\&. On by default\&. .RE .PP \fItab\-size\fR (int) .RS 4 Number of spaces per tab\&. The default is 8 spaces\&. .RE .PP \fIdiff\-context\fR (int) .RS 4 Number of context lines to show for diffs\&. .RE .PP \fIdiff\-highlight\fR (mixed) .RS 4 Whether to highlight diffs using Git\(cqs \fIdiff\-highlight\fR program\&. Defaults to false\&. When set to true then \fIdiff\-highlight\fR is used, else the option value is used as the path\&. When this option is in effect, highlighted regions are governed by color diff\-add\-highlight and color diff\-del\-highlight\&. .RE .PP \fIignore\-space\fR (mixed) [no|all|some|at\-eol|] .RS 4 Ignore space changes in diff view\&. By default no space changes are ignored\&. Changing this to "all", "some" or "at\-eol" is equivalent to passing "\-\-ignore\-all\-space", "\-\-ignore\-space" or "\-\-ignore\-space\-at\-eol" respectively to git diff or git show\&. \fBWarning:\fR when ignore\-space is set to some, all or at\-eol, then the \fBstatus\-update\fR and \fBstatus\-revert\fR may fail when updating or reverting chunks containing lines with space changes\&. Similarly, \fBstage\-update\-line\fR may fail when updating a line adjacent to a line with space changes .RE .PP \fIcommit\-order\fR (enum) [auto|default|topo|date|author\-date|reverse] .RS 4 Commit ordering using the default (chronological reverse) order, topological order, date order or reverse order\&. When set to "auto" (which is the default), topological order is automatically used in the main view when the commit graph is enabled\&. In repositories with a long commit history it is advised to set this option to "default" to speed up loading of the main view\&. .RE .PP \fIignore\-case\fR (enum) [no|yes|smart\-case] .RS 4 Ignore case in searches\&. "smart\-case" ignores case if the search string doesn\(cqt contain any uppercase letters\&. By default, the search is case sensitive\&. .RE .PP \fImailmap\fR (bool) .RS 4 Read canonical name and email addresses for authors and committers from \&.mailmap\&. Off by default\&. See git\-shortlog(1)\&. .RE .PP \fIwrap\-lines\fR (bool) .RS 4 Wrap long lines\&. By default, lines are not wrapped\&. Not compatible with line numbers enabled\&. .RE .PP \fIfocus\-child\fR (bool) .RS 4 Whether to focus the child view when it is opened\&. When disabled the focus will remain in the parent view, avoiding reloads of the child view when navigating the parent view\&. True by default\&. .RE .PP \fIsend\-child\-enter\fR (bool) .RS 4 Whether to send "enter" key presses to the child view, even if parent view is active\&. When disabled the child view has to be explicitly focused to receive the "enter" key presses\&. In practice only relevant when set focus\-child = no\&. True by default\&. .RE .PP \fIeditor\-line\-number\fR (bool) .RS 4 Whether to pass the selected line number to the editor command\&. The line number is passed as + in front of the file name\&. Example: vim +10 tig\&.c .RE .PP \fIhistory\-size\fR (int) .RS 4 Size of the persistent ~/\&.tig_history file when compiled with readline support\&. Default is 500\&. Set to 0 to disable\&. .RE .PP \fImouse\fR (bool) .RS 4 Whether to enable mouse support\&. Off by default since it makes selecting text from the terminal less intuitive\&. When enabled hold down Shift (or Option on Mac) to select text\&. Mouse support requires that ncurses itself support mouse events\&. .RE .PP \fImouse\-scroll\fR (int) .RS 4 Interval to scroll up or down using the mouse\&. The default is 3 lines\&. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/\&.tigrc with set mouse = true\&. .RE .PP \fImouse\-wheel\-cursor\fR (bool) .RS 4 Whether to prefer moving the cursor to scrolling the view when using the mouse wheel\&. Off by default\&. Combines well with set mouse\-scroll = 1\&. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/\&.tigrc with set mouse = true\&. .RE .PP \fIrefresh\-mode\fR (mixed) [manual|auto|after\-command|periodic|] .RS 4 Configures how views are refreshed based on modifications to watched files in the repository\&. When set to \fImanual\fR, nothing is refreshed automatically\&. When set to \fIauto\fR, views are refreshed when a modification is detected\&. When set to \fIafter\-command\fR only refresh after returning from an external command\&. When set to \fIperiodic\fR, visible views are refreshed periodically using \fIrefresh\-interval\fR\&. .RE .PP \fIrefresh\-interval\fR (int) .RS 4 Interval in seconds between view refresh update checks when \fIrefresh\-mode\fR is set to \fIperiodic\fR\&. .RE .PP \fIfile\-args\fR (args) .RS 4 Command line arguments referring to files\&. These are filtered using git\-rev\-parse(1)\&. .RE .PP \fIrev\-args\fR (args) .RS 4 Command line arguments referring to revisions\&. These are filtered using git\-rev\-parse(1)\&. .RE .SS "View settings" .sp The view settings define the order and options for the different columns of a view\&. Each view setting expects a space\-separated list of column specifications\&. Column specifications starts with the column type, and can optionally be followed by a colon (:) and a list of column options\&. E\&.g\&. the following column specification defines an \fIauthor\fR column displaying the author email and with a fixed width of 20 characters: author:email,width=20\&. .sp The first option value in a column specification is always the \fIdisplay\fR option\&. When no \fIdisplay\fR value is given, \fIyes\fR is assumed\&. For \fIdisplay\fR options expecting an enumerated value this will automatically resolve to the default enum value\&. For example, file\-name will automatically have its \fIdisplay\fR setting resolve to \fIauto\fR\&. .sp Specifications can also be given for a single column, for example to override the defaults in the system tigrc file\&. To override a single column, use the column name as a suffix after the view setting name, e\&.g\&. main\-view\-date will allow to set the date in the main view\&. .sp Examples: .sp .if n \{\ .RS 4 .\} .nf # Enable both ID and line numbers in the blame view set blame\-view = date:default author:full file\-name:auto id:yes,color \e line\-number:yes,interval=5 text # Change grep view to be similar to `git grep` format set grep\-view = file\-name:yes line\-number:yes,interval=1 text # Show file sizes as units set tree\-view = line\-number:no,interval=5 mode author:full \e file\-size:units date:default id:no file\-name # Show line numbers for every 10th line in the pager view set pager\-view = line\-number:yes,interval=10 text # Shorthands to change view settings for a previously defined column set main\-view\-date = custom set main\-view\-date\-format = "%Y\-%m\-%d %H:%M" set blame\-view\-line\-number = no # Use Git\*(Aqs default commit order, even when the commit graph is enabled\&. set commit\-order = default .fi .if n \{\ .RE .\} .sp .sp The following list shows which the available view settings and what column types they support: .PP blob\-view, diff\-view, log\-view, pager\-view, stage\-view .RS 4 line\-number, text .RE .PP blame\-view .RS 4 author, date, file\-name, id, line\-number, text .RE .PP grep\-view .RS 4 file\-name, line\-number, text .RE .PP main\-view .RS 4 author, date, commit\-title, id, line\-number .RE .PP refs\-view .RS 4 author, date, commit\-title, id, line\-number, ref .RE .PP stash\-view .RS 4 author, date, commit\-title, id, line\-number .RE .PP status\-view .RS 4 file\-name, line\-number, status .RE .PP tree\-view .RS 4 author, date, id, file\-name, file\-size, line\-number, mode .RE .sp Supported column types and their respective column options: .PP author .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (mixed) [full|abbreviated|email|email\-user|]: How to display author names\&. If set to "abbreviated" author initials will be shown\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the column\&. When set to a value between 1 and 10, the author name will be abbreviated to the author\(cqs initials\&. When set to zero, the width is automatically sized to fit the content\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fImaxwidth\fR (int): Maximum width of the column\&. Permit automatically sizing content, up to this limit\&. .RE .RE .PP commit\-title .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIgraph\fR (mixed) [no|v2|v1]: Whether to show the revision graph in the main view on start\-up\&. "v1" refers to the old graph rendering, which is less accurate but faster and thus recommended in large repositories\&. See also the \fIline\-graphics\fR options\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIrefs\fR (bool): Whether to show references (branches, tags, and remotes) in the main view\&. Can be toggled\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIoverflow\fR (bool or int): Whether to highlight text in commit titles exceeding a given width\&. When set to a boolean, it enables or disables the highlighting using the default width of 50 character\&. When set to an int, the assigned value is used as the maximum character width\&. .RE .RE .PP date .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (mixed) [relative|relative\-compact|custom|default|]: How to display dates\&. If set to "relative" or "relative\-compact" a relative date will be used, e\&.g\&. "2 minutes ago" or "2m"\&. If set to "custom", the strftime(3) string format specified in the "format" option is used\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIlocal\fR (bool): If true, use localtime(3) to convert to local timezone\&. Note that relative dates always use local offsets\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIformat\fR (string): format string to pass to strftime(3) when \fIcustom\fR display mode has been selected\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .RE .PP file\-name .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (mixed) [auto|always|]: When to display file names\&. If set to "auto" file names are shown only when needed, e\&.g\&. when running: tig blame \-C \&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Width of the column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fImaxwidth\fR (int): Maximum width of the column\&. Permit automatically sizing content, up to this limit\&. .RE .RE .PP file\-size .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (mixed) [default|units|]: How to display file sizes\&. When set to "units", sizes are shown using binary prefixes, e\&.g\&. 12524 bytes is shown as "12\&.2K"\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the filename column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .RE .PP id .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (bool): Whether to show commit IDs in the main view\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int) : Fixed width for the commit ID column\&. When unset Tig will use the value of \fIcore\&.abbrev\fR if found\&. See git\-config(1) on how to set \fIcore\&.abbrev\fR\&. When set to zero the width is automatically sized to fit the content of reflog (e\&.g\&. ref/stash@{4}) IDs and otherwise default to 7\&. .RE .RE .PP line\-number .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (bool): Whether to show line numbers\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIinterval\fR (int): Interval between line numbers\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .RE .PP mode .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (bool): Whether to show file modes\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .RE .PP ref .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (bool): Whether to show the reference name\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIwidth\fR (int): Fixed width for the column\&. When set to zero, the width is automatically sized to fit the content\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fImaxwidth\fR (int): Maximum width of the column\&. Permit automatically sizing content, up to this limit\&. .RE .RE .PP status .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIdisplay\fR (mixed) [no|short|long|]: How to display the status label\&. .RE .RE .PP text .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIcommit\-title\-overflow\fR (bool or int): Whether to highlight commit titles exceeding a given width in the diff view\&. When set to a boolean, it enables or disables the highlighting using the default width of 50 character\&. When set to an int, the assigned value is used as the maximum character width\&. .RE .RE .sp All column options can be toggled\&. For \fIdisplay\fR options, use the option name as the prefix followed by a dash and the column name\&. E\&.g\&. :toggle author\-display will toggle the \fIdisplay\fR option in the \fIauthor\fR column\&. For all other options use the column name followed by a dash and then the option name as the suffix\&. E\&.g\&. :toggle commit\-title\-graph will toggle the \fIgraph\fR option in the \fIcommit\-title\fR column\&. Alternatively, use the option menu to manipulate options\&. .SH "BIND COMMAND" .sp Using bind commands, keys can be mapped to an action when pressed in a given key map\&. The syntax is: .sp .if n \{\ .RS 4 .\} .nf \fBbind\fR \fIkeymap\fR \fIkey\fR \fIaction\fR .fi .if n \{\ .RE .\} .sp .sp Examples: .sp .if n \{\ .RS 4 .\} .nf # Add keybinding to quickly jump to the next diff chunk in the stage view bind stage :/^@@ # Disable the default mapping for running git\-gc bind generic G none # User\-defined external command to amend the last commit bind status + !git commit \-\-amend # User\-defined internal command that reloads ~/\&.tigrc bind generic S :source ~/\&.tigrc # UTF8\-encoded characters can be used as key values\&. bind generic \(/o @sh \-c "printf \*(Aq%s\*(Aq %(commit) | pbcopy" .fi .if n \{\ .RE .\} .sp .sp Or in the Git configuration files: .sp .if n \{\ .RS 4 .\} .nf [tig "bind"] # \*(Aqunbind\*(Aq the default quit key binding main = Q none # Cherry\-pick current commit onto current branch generic = C !git cherry\-pick %(commit) .fi .if n \{\ .RE .\} .sp .sp Keys are mapped by first searching the keybindings for the current view, then the keybindings for the \fBgeneric\fR keymap, and last the default keybindings\&. Thus, the view keybindings override the generic keybindings which override the built\-in keybindings\&. .sp Keybindings at the line\-entry prompt are typically governed by the readline library, and are configured separately in ~/\&.inputrc\&. See \fIreadline(1)\fR\&. Tig respects but does not require an $if tig section in ~/\&.inputrc\&. .PP Keymaps .RS 4 Valid keymaps are: \fBmain\fR, \fBdiff\fR, \fBlog\fR, \fBhelp\fR, \fBpager\fR, \fBstatus\fR, \fBstage\fR, \fBtree\fR, \fBblob\fR, \fBblame\fR, \fBrefs\fR, \fBstash\fR, \fBgrep\fR and \fBgeneric\fR\&. Use \fBgeneric\fR to set key mapping in all keymaps\&. Use \fBsearch\fR to define keys for navigating search results during search\&. .RE .PP Key values .RS 4 Key values should never be quoted\&. Use either an ASCII or UTF8\-encoded character or one of the following symbolic key names\&. Symbolic key names are case insensitive and starts with "<" and ends with ">"\&. Use \fB\fR to bind to the # key, since the hash mark is used as a comment character\&. Use \fB\fR to bind to the < key\&. .RE .sp \fB\fR, \fB\fR, \fB\fR, \fB\fR, \fB\fR or \fB\fR, \fB\fR, \fB\fR, \fB\fR, \fB\fR, \fB\fR or \fB\fR, \fB\fR or \fB\fR, \fB\fR, \fB\fR or \fB\fR, \fB\fR, \fB\fR, \fB\fR or \fB\fR, \fB\fR or \fB\fR, \fB\fR or \fB\fR, \fB\fR or \fB\fR, \fB\fR or \fB\fR, \fB\fR, \fB\fR, \fB\fR or \fB\fR, \fB\fR, \fB\fR, \fB\fR, \fB\fR, \fB\fR \&... \fB\fR .sp To define key mappings with the Ctrl key, use \&. In addition, key combos consisting of an initial Escape key followed by a normal key value can be bound using key\&. .sp Examples: .sp .if n \{\ .RS 4 .\} .nf bind main R refresh bind main next bind main scroll\-page\-down bind main o options bind main parent .fi .if n \{\ .RE .\} .sp .sp Notes .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Tig reads keystrokes via ncurses and is subject to various limitations\&. See \fIncurses(3x)\fR and \fIterminfo(5)\fR (or termcap)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Ctrl\-m and Ctrl\-i cannot be bound as they conflict with \fIEnter\fR and \fITab\fR respectively\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Case differences cannot be distinguished in control sequences such as Ctrl\-f and Ctrl\-F\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Ctrl\- is typically translated to Ctrl\-@, which is available for binding\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Only some subset of special symbolic keys such as will be available in any given terminal emulator\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Ctrl\-z is automatically used for process control and will suspend Tig and open a subshell (use fg to reenter Tig)\&. .PP Actions .RS 4 Actions are either specified as user\-defined commands (external or internal) or using action names as described in the following sections\&. .RE .RE .SS "External user\-defined command" .sp These actions start with one or more of the following option flags followed by the command that should be executed\&. .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp ! T}:T{ .sp Run the command in the foreground with output shown\&. T} T{ .sp @ T}:T{ .sp Run the command in the background with no output\&. T} T{ .sp + T}:T{ .sp Run the command synchronously, and echo the first line of output to the status bar\&. T} T{ .sp ? T}:T{ .sp Prompt the user before executing the command\&. T} T{ .sp < T}:T{ .sp Exit Tig after executing the command\&. T} T{ .sp > T}:T{ .sp Re\-open Tig instantly in the last displayed view after executing the command\&. T} .TE .sp 1 .sp Unless otherwise specified, commands are run in the foreground with their console output shown (as if \fI!\fR was specified)\&. When multiple command options are specified their behavior are combined, e\&.g\&. "? !git publish .fi .if n \{\ .RE .\} .sp .RE .SS "Internal user\-defined commands" .sp Actions beginning with a \fI:\fR will be run and interpreted as internal commands and act similar to commands run via Tig\(cqs prompt\&. Valid internal commands are configuration file options (as described in this document) and pager view commands\&. Examples: .sp .if n \{\ .RS 4 .\} .nf # Reload ~/\&.tigrc when \*(AqS\*(Aq is pressed bind generic S :source \&.tigrc # Change diff view to show all commit changes regardless of file limitations bind diff F :set diff\-options = \-\-full\-diff # Show the output of git\-reflog(1) in the pager view bind generic W :!git reflog # Search for previous diff (c)hunk and next diff header bind stage 2 :?^@@ bind stage D :/^diff \-\-(git|cc) bind main I :toggle id # Show/hide the ID column bind diff D :toggle diff\-options \-\-minimal # Use minimal diff algorithm bind diff [ :toggle diff\-context \-3 # Decrease context (\-U arg) bind diff ] :toggle diff\-context +3 # Increase context bind generic V :toggle split\-view\-height \-10% # Decrease split height .fi .if n \{\ .RE .\} .sp .sp Similar to external commands, pager view commands can contain variable names that will be substituted before the command is run\&. .SS "Action names" .sp Valid action names are described below\&. Note, all action names are case\-insensitive, and you may use \fI\-\fR, \fI_\fR, and \fI\&.\fR interchangeably, e\&.g\&. "view\-main", "View\&.Main", and "VIEW_MAIN" are the same\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBView switching\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp view\-main T}:T{ .sp Show main view T} T{ .sp view\-diff T}:T{ .sp Show diff view T} T{ .sp view\-log T}:T{ .sp Show log view T} T{ .sp view\-tree T}:T{ .sp Show tree view T} T{ .sp view\-blob T}:T{ .sp Show blob view T} T{ .sp view\-blame T}:T{ .sp Show blame view T} T{ .sp view\-refs T}:T{ .sp Show refs view T} T{ .sp view\-status T}:T{ .sp Show status view T} T{ .sp view\-stage T}:T{ .sp Show stage view T} T{ .sp view\-stash T}:T{ .sp Show stash view T} T{ .sp view\-grep T}:T{ .sp Show grep view T} T{ .sp view\-pager T}:T{ .sp Show pager view T} T{ .sp view\-help T}:T{ .sp Show help view T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBView manipulation\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp enter T}:T{ .sp Enter and open selected line T} T{ .sp back T}:T{ .sp Go back to the previous view state T} T{ .sp next T}:T{ .sp Move to next T} T{ .sp previous T}:T{ .sp Move to previous T} T{ .sp parent T}:T{ .sp Move to parent T} T{ .sp view\-next T}:T{ .sp Move focus to the next view T} T{ .sp refresh T}:T{ .sp Reload and refresh view T} T{ .sp maximize T}:T{ .sp Maximize the current view T} T{ .sp view\-close T}:T{ .sp Close the current view T} T{ .sp view\-close\-no\-quit T}:T{ .sp Close the current view without quitting T} T{ .sp quit T}:T{ .sp Close all views and quit T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBView-specific actions\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt. T{ .sp status\-update T}:T{ .sp Stage/unstage chunk or file changes T} T{ .sp status\-revert T}:T{ .sp Revert chunk or file changes T} T{ .sp status\-merge T}:T{ .sp Merge file using external tool T} T{ .sp stage\-update\-line T}:T{ .sp Stage/unstage single line T} T{ .sp stage\-split\-chunk T}:T{ .sp Split current diff chunk T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBCursor navigation\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp move\-up T}:T{ .sp Move cursor one line up T} T{ .sp move\-down T}:T{ .sp Move cursor one line down T} T{ .sp move\-page\-down T}:T{ .sp Move cursor one page down T} T{ .sp move\-page\-up T}:T{ .sp Move cursor half a page up T} T{ .sp move\-half\-page\-down T}:T{ .sp Move cursor half a page down T} T{ .sp move\-half\-page\-up T}:T{ .sp Move cursor one page up T} T{ .sp move\-first\-line T}:T{ .sp Move cursor to first line T} T{ .sp move\-last\-line T}:T{ .sp Move cursor to last line T} T{ .sp move\-next\-merge T}:T{ .sp Move cursor to next merge commit T} T{ .sp move\-prev\-merge T}:T{ .sp Move cursor to previous merge commit T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBScrolling\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp scroll\-line\-up T}:T{ .sp Scroll one line up T} T{ .sp scroll\-line\-down T}:T{ .sp Scroll one line down T} T{ .sp scroll\-page\-up T}:T{ .sp Scroll one page up T} T{ .sp scroll\-page\-down T}:T{ .sp Scroll one page down T} T{ .sp scroll\-first\-col T}:T{ .sp Scroll to the first line columns T} T{ .sp scroll\-left T}:T{ .sp Scroll two columns left T} T{ .sp scroll\-right T}:T{ .sp Scroll two columns right T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSearching\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt. T{ .sp search T}:T{ .sp Search the view T} T{ .sp search\-back T}:T{ .sp Search backwards in the view T} T{ .sp find\-next T}:T{ .sp Find next search match T} T{ .sp find\-prev T}:T{ .sp Find previous search match T} .TE .sp 1 .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBMisc\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp edit T}:T{ .sp Open in editor T} T{ .sp prompt T}:T{ .sp Open the prompt T} T{ .sp options T}:T{ .sp Open the options menu T} T{ .sp screen\-redraw T}:T{ .sp Redraw the screen T} T{ .sp stop\-loading T}:T{ .sp Stop all loading views T} T{ .sp show\-version T}:T{ .sp Show version information T} T{ .sp none T}:T{ .sp Do nothing T} .TE .sp 1 .RE .SH "COLOR COMMAND" .sp Color commands control highlighting and the user interface styles\&. If your terminal supports color, these commands can be used to assign foreground and background combinations to certain areas\&. Optionally, an attribute can be given as the last parameter\&. The syntax is: .sp .if n \{\ .RS 4 .\} .nf \fBcolor\fR \fIarea\fR \fIfgcolor\fR \fIbgcolor\fR \fI[attributes]\fR .fi .if n \{\ .RE .\} .sp .sp Examples: .sp .if n \{\ .RS 4 .\} .nf # Override the default terminal colors to white on black\&. color default white black # Diff colors color diff\-header yellow default color diff\-index blue default color diff\-chunk magenta default color "Reported\-by:" green default # View\-specific color color tree\&.date black cyan bold .fi .if n \{\ .RE .\} .sp .sp Or in the Git configuration files: .sp .if n \{\ .RS 4 .\} .nf [tig "color"] # A strange looking cursor line cursor = red default underline # UI colors title\-blur = white blue title\-focus = white blue bold # View\-specific color [tig "color\&.tree"] date = cyan default bold .fi .if n \{\ .RE .\} .sp .PP Area names .RS 4 Can be either a built\-in area name or a custom quoted string\&. The latter allows custom color rules to be added for lines matching a quoted string\&. Valid built\-in area names are described below\&. Note, all names are case\-insensitive, and you may use \fI\-\fR, and \fI_\fR interchangeably, e\&.g\&. "Diff\-Header" and "DIFF_HEADER" are the same\&. View\-specific colors can be defined by prefixing the view name to the area name, e\&.g\&. "stage\&.diff\-chunk" and "diff\&.diff\-chunk"\&. .RE .PP Color names .RS 4 Valid colors include: \fBwhite\fR, \fBblack\fR, \fBgreen\fR, \fBmagenta\fR, \fBblue\fR, \fBcyan\fR, \fByellow\fR, \fBred\fR, \fBdefault\fR\&. Use \fBdefault\fR to refer to the default terminal colors, for example, to keep the background transparent when you are using a terminal with a transparent background\&. .sp Colors can also be specified using the keywords \fBcolor0\fR, \fBcolor1\fR, \&..., \fBcolorN\-1\fR (where \fBN\fR is the number of colors supported by your terminal)\&. This is useful when you remap the colors for your display or want to enable colors supported by 88\-color and 256\-color terminals\&. Note that the \fIcolor\fR prefix is optional\&. If you prefer, you can specify colors directly by their numbers \fB0\fR, \fB1\fR, \&..., \fBN\-1\fR instead, just like in the configuration file of Git\&. .RE .PP Attribute names .RS 4 Valid attributes include: \fBnormal\fR, \fBblink\fR, \fBbold\fR, \fBdim\fR, \fBreverse\fR, \fBstandout\fR, and \fBunderline\fR\&. Note, not all attributes may be supported by the terminal\&. .RE .SS "UI colors" .sp The colors and attributes to be used for the text that is not highlighted or that specify the use of the default terminal colors can be controlled by setting the \fBdefault\fR color option\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B Table\ \&1.\ \&General .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp default T}:T{ .sp Override default terminal colors (see above)\&. T} T{ .sp cursor T}:T{ .sp The cursor line\&. T} T{ .sp status T}:T{ .sp The status window showing info messages\&. T} T{ .sp title\-focus T}:T{ .sp The title window for the current view\&. T} T{ .sp title\-blur T}:T{ .sp The title window of any backgrounded view\&. T} T{ .sp search\-result T}:T{ .sp Highlighted search result\&. T} T{ .sp delimiter T}:T{ .sp Delimiter shown for truncated lines\&. T} T{ .sp header T}:T{ .sp The view header lines\&. Use \fIstatus\&.header\fR to color the staged, unstaged, and untracked sections in the status view\&. Use \fIhelp\&.header\fR to color the keymap sections in the help view\&. T} T{ .sp line\-number T}:T{ .sp Line numbers\&. T} T{ .sp id T}:T{ .sp The commit ID\&. T} T{ .sp date T}:T{ .sp The author date\&. T} T{ .sp author T}:T{ .sp The commit author\&. T} T{ .sp mode T}:T{ .sp The file mode holding the permissions and type\&. T} T{ .sp overflow T}:T{ .sp Title text overflow\&. T} T{ .sp directory T}:T{ .sp The directory name\&. T} T{ .sp file T}:T{ .sp The file name\&. T} T{ .sp file\-size T}:T{ .sp File size\&. T} .TE .sp 1 .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B Table\ \&2.\ \&Main view colors .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp graph\-commit T}:T{ .sp The commit dot in the revision graph\&. T} T{ .sp palette\-[0\-13] T}:T{ .sp 14 different colors, used for distinguishing branches or commits\&. By default, the palette uses the ASCII colors, where the second half of them have the bold attribute enabled to give a brighter color\&. Example: palette\-0 = red T} T{ .sp main\-commit T}:T{ .sp The commit comment\&. T} T{ .sp main\-head T}:T{ .sp Label of the current branch\&. T} T{ .sp main\-remote T}:T{ .sp Label of a remote\&. T} T{ .sp main\-tracked T}:T{ .sp Label of the remote tracked by the current branch\&. T} T{ .sp main\-tag T}:T{ .sp Label of a signed tag\&. T} T{ .sp main\-local\-tag T}:T{ .sp Label of a local tag\&. T} T{ .sp main\-ref T}:T{ .sp Label of any other reference\&. T} T{ .sp main\-replace T}:T{ .sp Label of replaced reference\&. T} .TE .sp 1 .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B Table\ \&3.\ \&Status view .TS tab(:); lt lt lt lt lt lt lt lt. T{ .sp stat\-none T}:T{ .sp Empty status label\&. T} T{ .sp stat\-staged T}:T{ .sp Status flag of staged files\&. T} T{ .sp stat\-unstaged T}:T{ .sp Status flag of unstaged files\&. T} T{ .sp stat\-untracked T}:T{ .sp Status flag of untracked files\&. T} .TE .sp 1 .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B Table\ \&4.\ \&Help view .TS tab(:); lt lt lt lt. T{ .sp help\-group T}:T{ .sp Help group name\&. T} T{ .sp help\-action T}:T{ .sp Help action name\&. T} .TE .sp 1 .SS "Highlighting" .PP Diff markup .RS 4 Options concerning diff start, chunks and lines added and deleted\&. .RE .sp \fBdiff\-header\fR, \fBdiff\-chunk\fR, \fBdiff\-add\fR, \fBdiff\-add2\fR, \fBdiff\-del\fR, \fBdiff\-del2\fR, \fBdiff\-add\-highlight\fR, \fBdiff\-del\-highlight\fR .PP Enhanced Git diff markup .RS 4 Extra diff information emitted by the Git diff machinery, such as mode changes, rename detection, and similarity\&. .RE .sp \fBdiff\-oldmode\fR, \fBdiff\-newmode\fR, \fBdiff\-copy\-from\fR, \fBdiff\-copy\-to\fR, \fBdiff\-similarity\fR, \fBdiff\-index\fR .PP Pretty print commit headers .RS 4 Commit diffs and the revision logs are usually formatted using pretty printed headers , unless \-\-pretty=raw was given\&. This includes lines, such as merge info, commit ID, and author and committer date\&. .RE .sp \fBpp\-refs\fR, \fBpp\-reflog\fR, \fBpp\-reflogmsg\fR, \fBpp\-merge\fR .PP Raw commit header .RS 4 Usually shown when \-\-pretty=raw is given, however \fIcommit\fR is pretty much omnipresent\&. .RE .sp \fBcommit\fR, \fBparent\fR, \fBtree\fR, \fBauthor\fR, \fBcommitter\fR .PP Commit message .RS 4 Signed\-off\-by, Acked\-by, Reviewed\-by and Tested\-by lines are colorized\&. Characters in the commit title exceeding a predefined width can be highlighted\&. .RE .PP Tree markup .RS 4 Colors for information of the tree view\&. .RE .sp \fBtree\-dir\fR, \fBtree\-file\fR .SH "SOURCE COMMAND" .sp Source commands make it possible to read additional configuration files\&. Sourced files are included in\-place, meaning when a \fIsource\fR command is encountered the file will be immediately read\&. Any commands later in the current configuration file will take precedence\&. .sp If the given path does not exist, tig will proceed with a warning\&. Give the \-q parameter to suppress the warning\&. .sp The syntax is: .sp .if n \{\ .RS 4 .\} .nf \fBsource\fR \fI[\-q]\fR \fIpath\fR .fi .if n \{\ .RE .\} .sp .sp Examples: .sp .if n \{\ .RS 4 .\} .nf source ~/\&.tig/colorscheme\&.tigrc source ~/\&.tig/keybindings\&.tigrc .fi .if n \{\ .RE .\} .sp .SH "COPYRIGHT" .sp Copyright (c) 2006\-2014 Jonas Fonseca <\m[blue]\fBjonas\&.fonseca@gmail\&.com\fR\m[]\&\s-2\u[1]\d\s+2> .sp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version\&. .SH "SEE ALSO" .sp \fBtig\fR(1), \fBtigmanual\fR(7), git(7), git\-config(1) .SH "NOTES" .IP " 1." 4 jonas.fonseca@gmail.com .RS 4 \%mailto:jonas.fonseca@gmail.com .RE tig-2.4.1/doc/tigrc.5.adoc000066400000000000000000001244521332650737300151720ustar00rootroot00000000000000tigrc(5) ======== :docext: adoc NAME ---- tigrc - Tig configuration file SYNOPSIS -------- [verse] _______________________________________________________________________ *set* 'variable' *=* 'value' *bind* 'keymap' 'key' 'action' *color* 'area' 'fgcolor' 'bgcolor' '[attributes]' *source* 'path' _______________________________________________________________________ DESCRIPTION ----------- You can permanently set an option by putting it in the `~/.tigrc` file. The file consists of a series of 'commands'. Each line of the file may contain only one command. Commands can span multiple lines if each line is terminated by a backslash ('\') character. The hash mark ('#') is used as a 'comment' character. All text after the comment character to the end of the line is ignored. You can use comments to annotate your initialization file. Certain options can be manipulated at runtime via the option menu. In addition, options can also be toggled with the `:toggle` prompt command or by entering the configuration command into the prompt. In some environments, a user's configuration will be stored in the alternate location `$XDG_CONFIG_HOME/tig/config`. For brevity, this document will refer only to `~/.tigrc`. Git configuration ----------------- Alternatively to using `~/.tigrc`, Tig options can be set by putting them in one of the Git configuration files, which are read by Tig on startup. See 'git-config(1)' for which files to use. The following example show the basic syntax to use for settings, bindings and colors. // TEST: gitconfig -------------------------------------------------------------------------- [tig] show-changes = true [tig "color"] cursor = yellow red bold [tig "bind"] generic = P parent -------------------------------------------------------------------------- In addition to tig-specific options, the following Git options are read from the Git configuration: 'color.*':: Colors for the various UI types. Can be configured via the 'git-colors' setting. 'core.abbrev':: The width of the commit ID. See also 'id-width' option. 'core.editor':: The editor command. Can be overridden by setting GIT_EDITOR. 'core.worktree':: The path to the root of the working tree. 'gui.encoding':: The encoding to use for displaying of file content. 'i18n.commitencoding':: The encoding used for commits. The default is UTF-8. Set command ----------- A few selective variables can be configured via the set command. The syntax is: [verse] *set* variables *=* value Examples: // TEST: tigrc -------------------------------------------------------------------------- set commit-order = topo # Order commits topologically set git-colors = no # Do not read Git's color settings. set horizontal-scroll = 33% # Scroll 33% of the view width set blame-options = -C -C -C # Blame lines from other files # Wrap branch names with () and tags with <> set reference-format = (branch) # Configure blame view columns using command spanning multiple lines. set blame-view = \ date:default \ author:abbreviated \ file-name:auto \ id:yes,color \ line-number:yes,interval=5 text -------------------------------------------------------------------------- Or in the Git configuration files: // TEST: gitconfig -------------------------------------------------------------------------- [tig] line-graphics = no # Disable graphics characters tab-size = 8 # Number of spaces per tab -------------------------------------------------------------------------- The type of variables is either bool, int, string, or mixed. Valid bool values:: To set a bool variable to true use either "1", "true", or "yes". Any other value will set the variable to false. Valid int values:: A non-negative integer. Valid string values:: A string of characters. Optionally, use either ' or " as delimiters. Valid mixed values:: These values are composites of the above types. The valid values are specified in the description. Variables ~~~~~~~~~ The following variables can be set: 'diff-options' (string):: A space-separated string of diff options to use in the diff view. git-show(1) is used for formatting and always passes --patch-with-stat. Can control display of commit header metadata, passing option --format. This option overrides any options specified in the TIG_DIFF_OPTS environment variable (described in manpage:tig[1]), but is itself overridden by diff flags given on the command line invocation. 'blame-options' (string):: A space-separated string of default blame options. Can be used for telling git-blame(1) how to detect the origin of lines. The options are ignored when Tig is started in blame mode and given blame options on the command line. 'log-options' (string):: A space-separated string of default options that should be passed to the git-log(1) command used by the log view. Options can be overridden by command line options. Used internally override custom `pretty.format' settings that break the log view. 'main-options' (string):: A space-separated string of default options that should be passed to the git-log(1) command used by the main view. Options can be overridden by command line options. 'reference-format' (string):: A space-separated string of format strings used for formatting reference names. Wrap the name of the reference type with the characters you would like to use for formatting, e.g. `[tag]` and ``. If no format is specified for `local-tag`, the format for `tag` is used. Similarly, if no format is specified for `tracked-remote` the `remote` format is used. Prefix with `hide:` to not show that reference type, e.g. `hide:remote`. Supported reference types are: - head : The current HEAD. - tag : A signed tag. - local-tag : An unsigned tag. - remote : A remote. - tracked-remote : The remote tracked by current HEAD. - replace : A replaced reference. - branch : Any other reference. 'line-graphics' (mixed) [ascii|default|utf-8|]:: What type of character graphics for line drawing. 'truncation-delimiter' (mixed) [utf-8|]:: A single character to draw where columns are truncated. The default is "~". The special value "utf-8" refers to the character "⋯" ("Midline Horizontal Ellipsis"). 'horizontal-scroll' (mixed):: Interval to scroll horizontally in each step. Can be specified either as the number of columns, e.g. '5', or as a percentage of the view width, e.g. '33%', where the maximum is 100%. For percentages it is always ensured that at least one column is scrolled. The default is to scroll '50%' of the view width. 'git-colors' (list):: A space-separated list of "key=value" pairs where the key is a Git color name and the value is a Tig color name, e.g. "branch.current=main-head" and "grep.filename=grep.file". Set to "no" to disable. 'show-notes' (mixed) [|]:: Whether to show notes for a commit. When set to a note reference the reference is passed to `git show --notes=`. Notes are enabled by default. 'show-changes' (bool):: Whether to show staged and unstaged changes in the main view. 'vertical-split' (mixed) [auto|]:: Whether to split the view horizontally or vertically. "auto" (which is the default) means that it will depend on the window dimensions. When true vertical orientation is used, and false sets the orientation to horizontal. 'split-view-height' (mixed):: The height of the bottom view in a horizontally split display. Can be specified either as the number of rows, e.g. '5', or as a percentage of the view height, e.g. '80%', where the maximum is 100%. It is always ensured that the smaller of the views is at least four rows high. The default is '67%'. 'split-view-width' (mixed):: Width of the right-most view in a vertically split display. Can be specified either as the number of column, e.g. '5', or as a percentage of the view width, e.g. '80%', where the maximum is 100%. It is always ensured that the smaller of the views is at least four columns wide. The default is '50%'. 'status-show-untracked-dirs' (bool):: Show untracked directories contents in the status view (analog to `git ls-files --directory` option). On by default. 'status-show-untracked-files' (bool):: Show untracked files in the status view (mirrors Git's `status.showUntrackedFiles` option). On by default. 'tab-size' (int):: Number of spaces per tab. The default is 8 spaces. 'diff-context' (int):: Number of context lines to show for diffs. 'diff-highlight' (mixed):: Whether to highlight diffs using Git's 'diff-highlight' program. Defaults to false. When set to true then 'diff-highlight' is used, else the option value is used as the path. When this option is in effect, highlighted regions are governed by `color diff-add-highlight` and `color diff-del-highlight`. 'ignore-space' (mixed) [no|all|some|at-eol|]:: Ignore space changes in diff view. By default no space changes are ignored. Changing this to "all", "some" or "at-eol" is equivalent to passing "--ignore-all-space", "--ignore-space" or "--ignore-space-at-eol" respectively to `git diff` or `git show`. + + *Warning:* when `ignore-space` is set to `some`, `all` or `at-eol`, then the *status-update* and *status-revert* may fail when updating or reverting chunks containing lines with space changes. Similarly, *stage-update-line* may fail when updating a line adjacent to a line with space changes 'commit-order' (enum) [auto|default|topo|date|author-date|reverse]:: Commit ordering using the default (chronological reverse) order, topological order, date order or reverse order. When set to "auto" (which is the default), topological order is automatically used in the main view when the commit graph is enabled. In repositories with a long commit history it is advised to set this option to "default" to speed up loading of the main view. 'ignore-case' (enum) [no|yes|smart-case]:: Ignore case in searches. "smart-case" ignores case if the search string doesn't contain any uppercase letters. By default, the search is case sensitive. 'mailmap' (bool):: Read canonical name and email addresses for authors and committers from `.mailmap`. Off by default. See `git-shortlog(1)`. 'wrap-lines' (bool):: Wrap long lines. By default, lines are not wrapped. Not compatible with line numbers enabled. 'focus-child' (bool):: Whether to focus the child view when it is opened. When disabled the focus will remain in the parent view, avoiding reloads of the child view when navigating the parent view. True by default. 'send-child-enter' (bool):: Whether to send "enter" key presses to the child view, even if parent view is active. When disabled the child view has to be explicitly focused to receive the "enter" key presses. In practice only relevant when `set focus-child = no`. True by default. 'editor-line-number' (bool):: Whether to pass the selected line number to the editor command. The line number is passed as `+` in front of the file name. Example: `vim +10 tig.c` 'history-size' (int):: Size of the persistent `~/.tig_history` file when compiled with readline support. Default is 500. Set to 0 to disable. 'mouse' (bool):: Whether to enable mouse support. Off by default since it makes selecting text from the terminal less intuitive. When enabled hold down Shift (or Option on Mac) to select text. Mouse support requires that ncurses itself support mouse events. 'mouse-scroll' (int):: Interval to scroll up or down using the mouse. The default is 3 lines. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/.tigrc with `set mouse = true`. 'mouse-wheel-cursor' (bool):: Whether to prefer moving the cursor to scrolling the view when using the mouse wheel. Off by default. Combines well with `set mouse-scroll = 1`. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/.tigrc with `set mouse = true`. 'refresh-mode' (mixed) [manual|auto|after-command|periodic|]:: Configures how views are refreshed based on modifications to watched files in the repository. When set to 'manual', nothing is refreshed automatically. When set to 'auto', views are refreshed when a modification is detected. When set to 'after-command' only refresh after returning from an external command. When set to 'periodic', visible views are refreshed periodically using 'refresh-interval'. 'refresh-interval' (int):: Interval in seconds between view refresh update checks when 'refresh-mode' is set to 'periodic'. 'file-args' (args):: Command line arguments referring to files. These are filtered using `git-rev-parse(1)`. 'rev-args' (args):: Command line arguments referring to revisions. These are filtered using `git-rev-parse(1)`. View settings ~~~~~~~~~~~~~ The view settings define the order and options for the different columns of a view. Each view setting expects a space-separated list of column specifications. Column specifications starts with the column type, and can optionally be followed by a colon (`:`) and a list of column options. E.g. the following column specification defines an 'author' column displaying the author email and with a fixed width of 20 characters: `author:email,width=20`. The first option value in a column specification is always the 'display' option. When no 'display' value is given, 'yes' is assumed. For 'display' options expecting an enumerated value this will automatically resolve to the default enum value. For example, `file-name` will automatically have its 'display' setting resolve to 'auto'. Specifications can also be given for a single column, for example to override the defaults in the system tigrc file. To override a single column, use the column name as a suffix after the view setting name, e.g. `main-view-date` will allow to set the date in the main view. Examples: // TEST: tigrc -------------------------------------------------------------------------- # Enable both ID and line numbers in the blame view set blame-view = date:default author:full file-name:auto id:yes,color \ line-number:yes,interval=5 text # Change grep view to be similar to `git grep` format set grep-view = file-name:yes line-number:yes,interval=1 text # Show file sizes as units set tree-view = line-number:no,interval=5 mode author:full \ file-size:units date:default id:no file-name # Show line numbers for every 10th line in the pager view set pager-view = line-number:yes,interval=10 text # Shorthands to change view settings for a previously defined column set main-view-date = custom set main-view-date-format = "%Y-%m-%d %H:%M" set blame-view-line-number = no # Use Git's default commit order, even when the commit graph is enabled. set commit-order = default -------------------------------------------------------------------------- The following list shows which the available view settings and what column types they support: blob-view, diff-view, log-view, pager-view, stage-view:: line-number, text blame-view:: author, date, file-name, id, line-number, text grep-view:: file-name, line-number, text main-view:: author, date, commit-title, id, line-number refs-view:: author, date, commit-title, id, line-number, ref stash-view:: author, date, commit-title, id, line-number status-view:: file-name, line-number, status tree-view:: author, date, id, file-name, file-size, line-number, mode Supported column types and their respective column options: author:: - 'display' (mixed) [full|abbreviated|email|email-user|]: How to display author names. If set to "abbreviated" author initials will be shown. - 'width' (int): Fixed width for the column. When set to a value between 1 and 10, the author name will be abbreviated to the author's initials. When set to zero, the width is automatically sized to fit the content. - 'maxwidth' (int): Maximum width of the column. Permit automatically sizing content, up to this limit. commit-title:: - 'graph' (mixed) [no|v2|v1]: Whether to show the revision graph in the main view on start-up. "v1" refers to the old graph rendering, which is less accurate but faster and thus recommended in large repositories. See also the 'line-graphics' options. - 'refs' (bool): Whether to show references (branches, tags, and remotes) in the main view. Can be toggled. - 'overflow' (bool or int): Whether to highlight text in commit titles exceeding a given width. When set to a boolean, it enables or disables the highlighting using the default width of 50 character. When set to an int, the assigned value is used as the maximum character width. date:: - 'display' (mixed) [relative|relative-compact|custom|default|]: How to display dates. If set to "relative" or "relative-compact" a relative date will be used, e.g. "2 minutes ago" or "2m". If set to "custom", the strftime(3) string format specified in the "format" option is used. - 'local' (bool): If true, use localtime(3) to convert to local timezone. Note that relative dates always use local offsets. - 'format' (string): format string to pass to strftime(3) when 'custom' display mode has been selected. - 'width' (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content. file-name:: - 'display' (mixed) [auto|always|]: When to display file names. If set to "auto" file names are shown only when needed, e.g. when running: tig blame -C . - 'width' (int): Width of the column. When set to zero, the width is automatically sized to fit the content. - 'maxwidth' (int): Maximum width of the column. Permit automatically sizing content, up to this limit. file-size:: - 'display' (mixed) [default|units|]: How to display file sizes. When set to "units", sizes are shown using binary prefixes, e.g. 12524 bytes is shown as "12.2K". - 'width' (int): Fixed width for the filename column. When set to zero, the width is automatically sized to fit the content. id:: - 'display' (bool): Whether to show commit IDs in the main view. - 'width' (int) : Fixed width for the commit ID column. When unset Tig will use the value of 'core.abbrev' if found. See git-config(1) on how to set 'core.abbrev'. When set to zero the width is automatically sized to fit the content of reflog (e.g. `ref/stash@{4}`) IDs and otherwise default to 7. line-number:: - 'display' (bool): Whether to show line numbers. - 'interval' (int): Interval between line numbers. - 'width' (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content. mode:: - 'display' (bool): Whether to show file modes. - 'width' (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content. ref:: - 'display' (bool): Whether to show the reference name. - 'width' (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content. - 'maxwidth' (int): Maximum width of the column. Permit automatically sizing content, up to this limit. status:: - 'display' (mixed) [no|short|long|]: How to display the status label. text:: - 'commit-title-overflow' (bool or int): Whether to highlight commit titles exceeding a given width in the diff view. When set to a boolean, it enables or disables the highlighting using the default width of 50 character. When set to an int, the assigned value is used as the maximum character width. All column options can be toggled. For 'display' options, use the option name as the prefix followed by a dash and the column name. E.g. `:toggle author-display` will toggle the 'display' option in the 'author' column. For all other options use the column name followed by a dash and then the option name as the suffix. E.g. `:toggle commit-title-graph` will toggle the 'graph' option in the 'commit-title' column. Alternatively, use the option menu to manipulate options. Bind command ------------ Using bind commands, keys can be mapped to an action when pressed in a given key map. The syntax is: [verse] *bind* 'keymap' 'key' 'action' Examples: // TEST: tigrc -------------------------------------------------------------------------- # Add keybinding to quickly jump to the next diff chunk in the stage view bind stage :/^@@ # Disable the default mapping for running git-gc bind generic G none # User-defined external command to amend the last commit bind status + !git commit --amend # User-defined internal command that reloads ~/.tigrc bind generic S :source ~/.tigrc # UTF8-encoded characters can be used as key values. bind generic ø @sh -c "printf '%s' %(commit) | pbcopy" -------------------------------------------------------------------------- Or in the Git configuration files: // TEST: gitconfig -------------------------------------------------------------------------- [tig "bind"] # 'unbind' the default quit key binding main = Q none # Cherry-pick current commit onto current branch generic = C !git cherry-pick %(commit) -------------------------------------------------------------------------- Keys are mapped by first searching the keybindings for the current view, then the keybindings for the *generic* keymap, and last the default keybindings. Thus, the view keybindings override the generic keybindings which override the built-in keybindings. Keybindings at the line-entry prompt are typically governed by the readline library, and are configured separately in `~/.inputrc`. See 'readline(1)'. Tig respects but does not require an `$if tig` section in `~/.inputrc`. -- Keymaps:: Valid keymaps are: *main*, *diff*, *log*, *help*, *pager*, *status*, *stage*, *tree*, *blob*, *blame*, *refs*, *stash*, *grep* and *generic*. Use *generic* to set key mapping in all keymaps. Use *search* to define keys for navigating search results during search. Key values:: Key values should never be quoted. Use either an ASCII or UTF8-encoded character or one of the following symbolic key names. Symbolic key names are case insensitive and starts with "<" and ends with ">". Use ** to bind to the `#` key, since the hash mark is used as a comment character. Use ** to bind to the `<` key. **, **, **, **, ** or **, **, **, **, **, ** or **, ** or **, **, ** or **, **, **, ** or **, ** or **, ** or **, ** or **, ** or **, **, **, ** or **, **, **, **, **, ** ... ** To define key mappings with the `Ctrl` key, use ``. In addition, key combos consisting of an initial `Escape` key followed by a normal key value can be bound using `key`. Examples: // TEST: tigrc -------------------------------------------------------------------------- bind main R refresh bind main next bind main scroll-page-down bind main o options bind main parent -------------------------------------------------------------------------- Notes - Tig reads keystrokes via ncurses and is subject to various limitations. See 'ncurses(3x)' and 'terminfo(5)' (or termcap). - `Ctrl-m` and `Ctrl-i` cannot be bound as they conflict with 'Enter' and 'Tab' respectively. - Case differences cannot be distinguished in control sequences such as `Ctrl-f` and `Ctrl-F`. - `Ctrl-` is typically translated to `Ctrl-@`, which is available for binding. - Only some subset of special symbolic keys such as `` will be available in any given terminal emulator. - `Ctrl-z` is automatically used for process control and will suspend Tig and open a subshell (use `fg` to reenter Tig). Actions:: Actions are either specified as user-defined commands (external or internal) or using action names as described in the following sections. -- External user-defined command ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ These actions start with one or more of the following option flags followed by the command that should be executed. [frame="none",grid="none",cols="25 |Re-open Tig instantly in the last displayed view after executing the command. |============================================================================= Unless otherwise specified, commands are run in the foreground with their console output shown (as if '!' was specified). When multiple command options are specified their behavior are combined, e.g. "? !git publish -------------------------------------------------------------------------- Internal user-defined commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Actions beginning with a ':' will be run and interpreted as internal commands and act similar to commands run via Tig's prompt. Valid internal commands are configuration file options (as described in this document) and pager view commands. Examples: // TEST: tigrc -------------------------------------------------------------------------- # Reload ~/.tigrc when 'S' is pressed bind generic S :source .tigrc # Change diff view to show all commit changes regardless of file limitations bind diff F :set diff-options = --full-diff # Show the output of git-reflog(1) in the pager view bind generic W :!git reflog # Search for previous diff (c)hunk and next diff header bind stage 2 :?^@@ bind stage D :/^diff --(git|cc) bind main I :toggle id # Show/hide the ID column bind diff D :toggle diff-options --minimal # Use minimal diff algorithm bind diff [ :toggle diff-context -3 # Decrease context (-U arg) bind diff ] :toggle diff-context +3 # Increase context bind generic V :toggle split-view-height -10% # Decrease split height -------------------------------------------------------------------------- Similar to external commands, pager view commands can contain variable names that will be substituted before the command is run. Action names ~~~~~~~~~~~~ Valid action names are described below. Note, all action names are case-insensitive, and you may use '-', '_', and '.' interchangeably, e.g. "view-main", "View.Main", and "VIEW_MAIN" are the same. ifndef::DOC_GEN_ACTIONS[] View switching ^^^^^^^^^^^^^^ [frame="none",grid="none",cols="25 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. SEE ALSO -------- ifndef::backend-docbook[] link:tig.1.{docext}[tig(1)], link:manual.{docext}[the Tig manual], endif::backend-docbook[] ifdef::backend-docbook[] manpage:tig[1], manpage:tigmanual[7], endif::backend-docbook[] git(7), git-config(1) // vim: tw=80 tig-2.4.1/doc/tigrc.5.html000066400000000000000000002620111332650737300152220ustar00rootroot00000000000000 tigrc(5)

SYNOPSIS

set   variable = value
bind  keymap key action
color area fgcolor bgcolor [attributes]
source path

DESCRIPTION

You can permanently set an option by putting it in the ~/.tigrc file. The file consists of a series of commands. Each line of the file may contain only one command. Commands can span multiple lines if each line is terminated by a backslash (\) character.

The hash mark (#) is used as a comment character. All text after the comment character to the end of the line is ignored. You can use comments to annotate your initialization file.

Certain options can be manipulated at runtime via the option menu. In addition, options can also be toggled with the :toggle prompt command or by entering the configuration command into the prompt.

In some environments, a user’s configuration will be stored in the alternate location $XDG_CONFIG_HOME/tig/config. For brevity, this document will refer only to ~/.tigrc.

Git configuration

Alternatively to using ~/.tigrc, Tig options can be set by putting them in one of the Git configuration files, which are read by Tig on startup. See git-config(1) for which files to use. The following example show the basic syntax to use for settings, bindings and colors.

[tig] show-changes = true
[tig "color"] cursor = yellow red bold
[tig "bind"] generic = P parent

In addition to tig-specific options, the following Git options are read from the Git configuration:

color.*

Colors for the various UI types. Can be configured via the git-colors setting.

core.abbrev

The width of the commit ID. See also id-width option.

core.editor

The editor command. Can be overridden by setting GIT_EDITOR.

core.worktree

The path to the root of the working tree.

gui.encoding

The encoding to use for displaying of file content.

i18n.commitencoding

The encoding used for commits. The default is UTF-8.

Set command

A few selective variables can be configured via the set command. The syntax is:

set variables = value

Examples:

set commit-order = topo         # Order commits topologically
set git-colors = no             # Do not read Git's color settings.
set horizontal-scroll = 33%     # Scroll 33% of the view width
set blame-options = -C -C -C    # Blame lines from other files

# Wrap branch names with () and tags with <>
set reference-format = (branch) <tag>

# Configure blame view columns using command spanning multiple lines.
set blame-view = \
        date:default \
        author:abbreviated \
        file-name:auto \
        id:yes,color \
        line-number:yes,interval=5 text

Or in the Git configuration files:

[tig]
        line-graphics = no      # Disable graphics characters
        tab-size = 8            # Number of spaces per tab

The type of variables is either bool, int, string, or mixed.

Valid bool values

To set a bool variable to true use either "1", "true", or "yes". Any other value will set the variable to false.

Valid int values

A non-negative integer.

Valid string values

A string of characters. Optionally, use either ' or " as delimiters.

Valid mixed values

These values are composites of the above types. The valid values are specified in the description.

Variables

The following variables can be set:

diff-options (string)

A space-separated string of diff options to use in the diff view. git-show(1) is used for formatting and always passes --patch-with-stat. Can control display of commit header metadata, passing option --format. This option overrides any options specified in the TIG_DIFF_OPTS environment variable (described in tig(1)), but is itself overridden by diff flags given on the command line invocation.

blame-options (string)

A space-separated string of default blame options. Can be used for telling git-blame(1) how to detect the origin of lines. The options are ignored when Tig is started in blame mode and given blame options on the command line.

log-options (string)

A space-separated string of default options that should be passed to the git-log(1) command used by the log view. Options can be overridden by command line options. Used internally override custom ‘pretty.format’ settings that break the log view.

main-options (string)

A space-separated string of default options that should be passed to the git-log(1) command used by the main view. Options can be overridden by command line options.

reference-format (string)

A space-separated string of format strings used for formatting reference names. Wrap the name of the reference type with the characters you would like to use for formatting, e.g. [tag] and <remote>. If no format is specified for local-tag, the format for tag is used. Similarly, if no format is specified for tracked-remote the remote format is used. Prefix with hide: to not show that reference type, e.g. hide:remote. Supported reference types are:

  • head : The current HEAD.

  • tag : A signed tag.

  • local-tag : An unsigned tag.

  • remote : A remote.

  • tracked-remote : The remote tracked by current HEAD.

  • replace : A replaced reference.

  • branch : Any other reference.

line-graphics (mixed) [ascii|default|utf-8|<bool>]

What type of character graphics for line drawing.

truncation-delimiter (mixed) [utf-8|<string>]

A single character to draw where columns are truncated. The default is "~". The special value "utf-8" refers to the character "⋯" ("Midline Horizontal Ellipsis").

horizontal-scroll (mixed)

Interval to scroll horizontally in each step. Can be specified either as the number of columns, e.g. 5, or as a percentage of the view width, e.g. 33%, where the maximum is 100%. For percentages it is always ensured that at least one column is scrolled. The default is to scroll 50% of the view width.

git-colors (list)

A space-separated list of "key=value" pairs where the key is a Git color name and the value is a Tig color name, e.g. "branch.current=main-head" and "grep.filename=grep.file". Set to "no" to disable.

show-notes (mixed) [<reference>|<bool>]

Whether to show notes for a commit. When set to a note reference the reference is passed to git show --notes=. Notes are enabled by default.

show-changes (bool)

Whether to show staged and unstaged changes in the main view.

vertical-split (mixed) [auto|<bool>]

Whether to split the view horizontally or vertically. "auto" (which is the default) means that it will depend on the window dimensions. When true vertical orientation is used, and false sets the orientation to horizontal.

split-view-height (mixed)

The height of the bottom view in a horizontally split display. Can be specified either as the number of rows, e.g. 5, or as a percentage of the view height, e.g. 80%, where the maximum is 100%. It is always ensured that the smaller of the views is at least four rows high. The default is 67%.

split-view-width (mixed)

Width of the right-most view in a vertically split display. Can be specified either as the number of column, e.g. 5, or as a percentage of the view width, e.g. 80%, where the maximum is 100%. It is always ensured that the smaller of the views is at least four columns wide. The default is 50%.

status-show-untracked-dirs (bool)

Show untracked directories contents in the status view (analog to git ls-files --directory option). On by default.

status-show-untracked-files (bool)

Show untracked files in the status view (mirrors Git’s status.showUntrackedFiles option). On by default.

tab-size (int)

Number of spaces per tab. The default is 8 spaces.

diff-context (int)

Number of context lines to show for diffs.

diff-highlight (mixed)

Whether to highlight diffs using Git’s diff-highlight program. Defaults to false. When set to true then diff-highlight is used, else the option value is used as the path. When this option is in effect, highlighted regions are governed by color diff-add-highlight and color diff-del-highlight.

ignore-space (mixed) [no|all|some|at-eol|<bool>]

Ignore space changes in diff view. By default no space changes are ignored. Changing this to "all", "some" or "at-eol" is equivalent to passing "--ignore-all-space", "--ignore-space" or "--ignore-space-at-eol" respectively to git diff or git show.

Warning: when ignore-space is set to some, all or at-eol, then the status-update and status-revert may fail when updating or reverting chunks containing lines with space changes. Similarly, stage-update-line may fail when updating a line adjacent to a line with space changes

commit-order (enum) [auto|default|topo|date|author-date|reverse]

Commit ordering using the default (chronological reverse) order, topological order, date order or reverse order. When set to "auto" (which is the default), topological order is automatically used in the main view when the commit graph is enabled. In repositories with a long commit history it is advised to set this option to "default" to speed up loading of the main view.

ignore-case (enum) [no|yes|smart-case]

Ignore case in searches. "smart-case" ignores case if the search string doesn’t contain any uppercase letters. By default, the search is case sensitive.

mailmap (bool)

Read canonical name and email addresses for authors and committers from .mailmap. Off by default. See git-shortlog(1).

wrap-lines (bool)

Wrap long lines. By default, lines are not wrapped. Not compatible with line numbers enabled.

focus-child (bool)

Whether to focus the child view when it is opened. When disabled the focus will remain in the parent view, avoiding reloads of the child view when navigating the parent view. True by default.

send-child-enter (bool)

Whether to send "enter" key presses to the child view, even if parent view is active. When disabled the child view has to be explicitly focused to receive the "enter" key presses. In practice only relevant when set focus-child = no. True by default.

editor-line-number (bool)

Whether to pass the selected line number to the editor command. The line number is passed as +<line-number> in front of the file name. Example: vim +10 tig.c

history-size (int)

Size of the persistent ~/.tig_history file when compiled with readline support. Default is 500. Set to 0 to disable.

mouse (bool)

Whether to enable mouse support. Off by default since it makes selecting text from the terminal less intuitive. When enabled hold down Shift (or Option on Mac) to select text. Mouse support requires that ncurses itself support mouse events.

mouse-scroll (int)

Interval to scroll up or down using the mouse. The default is 3 lines. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/.tigrc with set mouse = true.

mouse-wheel-cursor (bool)

Whether to prefer moving the cursor to scrolling the view when using the mouse wheel. Off by default. Combines well with set mouse-scroll = 1. Mouse support requires that ncurses itself support mouse events and that you have enabled mouse support in ~/.tigrc with set mouse = true.

refresh-mode (mixed) [manual|auto|after-command|periodic|<bool>]

Configures how views are refreshed based on modifications to watched files in the repository. When set to manual, nothing is refreshed automatically. When set to auto, views are refreshed when a modification is detected. When set to after-command only refresh after returning from an external command. When set to periodic, visible views are refreshed periodically using refresh-interval.

refresh-interval (int)

Interval in seconds between view refresh update checks when refresh-mode is set to periodic.

file-args (args)

Command line arguments referring to files. These are filtered using git-rev-parse(1).

rev-args (args)

Command line arguments referring to revisions. These are filtered using git-rev-parse(1).

View settings

The view settings define the order and options for the different columns of a view. Each view setting expects a space-separated list of column specifications. Column specifications starts with the column type, and can optionally be followed by a colon (:) and a list of column options. E.g. the following column specification defines an author column displaying the author email and with a fixed width of 20 characters: author:email,width=20.

The first option value in a column specification is always the display option. When no display value is given, yes is assumed. For display options expecting an enumerated value this will automatically resolve to the default enum value. For example, file-name will automatically have its display setting resolve to auto.

Specifications can also be given for a single column, for example to override the defaults in the system tigrc file. To override a single column, use the column name as a suffix after the view setting name, e.g. main-view-date will allow to set the date in the main view.

Examples:

# Enable both ID and line numbers in the blame view
set blame-view = date:default author:full file-name:auto id:yes,color \
                 line-number:yes,interval=5 text

# Change grep view to be similar to `git grep` format
set grep-view = file-name:yes line-number:yes,interval=1 text

# Show file sizes as units
set tree-view = line-number:no,interval=5 mode author:full \
                file-size:units date:default id:no file-name

# Show line numbers for every 10th line in the pager view
set pager-view = line-number:yes,interval=10 text

# Shorthands to change view settings for a previously defined column
set main-view-date = custom
set main-view-date-format = "%Y-%m-%d %H:%M"
set blame-view-line-number = no
# Use Git's default commit order, even when the commit graph is enabled.
set commit-order = default

The following list shows which the available view settings and what column types they support:

blob-view, diff-view, log-view, pager-view, stage-view

line-number, text

blame-view

author, date, file-name, id, line-number, text

grep-view

file-name, line-number, text

main-view

author, date, commit-title, id, line-number

refs-view

author, date, commit-title, id, line-number, ref

stash-view

author, date, commit-title, id, line-number

status-view

file-name, line-number, status

tree-view

author, date, id, file-name, file-size, line-number, mode

Supported column types and their respective column options:

author
  • display (mixed) [full|abbreviated|email|email-user|<bool>]: How to display author names. If set to "abbreviated" author initials will be shown.

  • width (int): Fixed width for the column. When set to a value between 1 and 10, the author name will be abbreviated to the author’s initials. When set to zero, the width is automatically sized to fit the content.

  • maxwidth (int): Maximum width of the column. Permit automatically sizing content, up to this limit.

commit-title
  • graph (mixed) [no|v2|v1]: Whether to show the revision graph in the main view on start-up. "v1" refers to the old graph rendering, which is less accurate but faster and thus recommended in large repositories. See also the line-graphics options.

  • refs (bool): Whether to show references (branches, tags, and remotes) in the main view. Can be toggled.

  • overflow (bool or int): Whether to highlight text in commit titles exceeding a given width. When set to a boolean, it enables or disables the highlighting using the default width of 50 character. When set to an int, the assigned value is used as the maximum character width.

date
  • display (mixed) [relative|relative-compact|custom|default|<bool>]: How to display dates. If set to "relative" or "relative-compact" a relative date will be used, e.g. "2 minutes ago" or "2m". If set to "custom", the strftime(3) string format specified in the "format" option is used.

  • local (bool): If true, use localtime(3) to convert to local timezone. Note that relative dates always use local offsets.

  • format (string): format string to pass to strftime(3) when custom display mode has been selected.

  • width (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content.

file-name
  • display (mixed) [auto|always|<bool>]: When to display file names. If set to "auto" file names are shown only when needed, e.g. when running: tig blame -C <file>.

  • width (int): Width of the column. When set to zero, the width is automatically sized to fit the content.

  • maxwidth (int): Maximum width of the column. Permit automatically sizing content, up to this limit.

file-size
  • display (mixed) [default|units|<bool>]: How to display file sizes. When set to "units", sizes are shown using binary prefixes, e.g. 12524 bytes is shown as "12.2K".

  • width (int): Fixed width for the filename column. When set to zero, the width is automatically sized to fit the content.

id
  • display (bool): Whether to show commit IDs in the main view.

  • width (int) : Fixed width for the commit ID column. When unset Tig will use the value of core.abbrev if found. See git-config(1) on how to set core.abbrev. When set to zero the width is automatically sized to fit the content of reflog (e.g. ref/stash@{4}) IDs and otherwise default to 7.

line-number
  • display (bool): Whether to show line numbers.

  • interval (int): Interval between line numbers.

  • width (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content.

mode
  • display (bool): Whether to show file modes.

  • width (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content.

ref
  • display (bool): Whether to show the reference name.

  • width (int): Fixed width for the column. When set to zero, the width is automatically sized to fit the content.

  • maxwidth (int): Maximum width of the column. Permit automatically sizing content, up to this limit.

status
  • display (mixed) [no|short|long|<bool>]: How to display the status label.

text
  • commit-title-overflow (bool or int): Whether to highlight commit titles exceeding a given width in the diff view. When set to a boolean, it enables or disables the highlighting using the default width of 50 character. When set to an int, the assigned value is used as the maximum character width.

All column options can be toggled. For display options, use the option name as the prefix followed by a dash and the column name. E.g. :toggle author-display will toggle the display option in the author column. For all other options use the column name followed by a dash and then the option name as the suffix. E.g. :toggle commit-title-graph will toggle the graph option in the commit-title column. Alternatively, use the option menu to manipulate options.

Bind command

Using bind commands, keys can be mapped to an action when pressed in a given key map. The syntax is:

bind keymap key action

Examples:

# Add keybinding to quickly jump to the next diff chunk in the stage view
bind stage <Enter> :/^@@

# Disable the default mapping for running git-gc
bind generic G none

# User-defined external command to amend the last commit
bind status + !git commit --amend

# User-defined internal command that reloads ~/.tigrc
bind generic S :source ~/.tigrc

# UTF8-encoded characters can be used as key values.
bind generic ø @sh -c "printf '%s' %(commit) | pbcopy"

Or in the Git configuration files:

[tig "bind"]
        # 'unbind' the default quit key binding
        main = Q none
        # Cherry-pick current commit onto current branch
        generic = C !git cherry-pick %(commit)

Keys are mapped by first searching the keybindings for the current view, then the keybindings for the generic keymap, and last the default keybindings. Thus, the view keybindings override the generic keybindings which override the built-in keybindings.

Keybindings at the line-entry prompt are typically governed by the readline library, and are configured separately in ~/.inputrc. See readline(1). Tig respects but does not require an $if tig section in ~/.inputrc.

Keymaps

Valid keymaps are: main, diff, log, help, pager, status, stage, tree, blob, blame, refs, stash, grep and generic. Use generic to set key mapping in all keymaps. Use search to define keys for navigating search results during search.

Key values

Key values should never be quoted. Use either an ASCII or UTF8-encoded character or one of the following symbolic key names. Symbolic key names are case insensitive and starts with "<" and ends with ">". Use <Hash> to bind to the # key, since the hash mark is used as a comment character. Use <LessThan> to bind to the < key.

<Enter>, <Space>, <Backspace>, <Tab>, <Escape> or <Esc>, <Left>, <Right>, <Up>, <Down>, <Insert> or <Ins>, <Delete> or <Del>, <Hash>, <LessThan> or <LT>, <Home>, <End>, <PageUp> or <PgUp>, <PageDown> or <PgDown>, <ScrollBack> or <SBack>, <ScrollFwd> or <SFwd>, <ShiftTab> or <BackTab>, <ShiftLeft>, <ShiftRight>, <ShiftDelete> or <ShiftDel>, <ShiftHome>, <ShiftEnd>, <SingleQuote>, <DoubleQuote>, <F1><F19>

To define key mappings with the Ctrl key, use <Ctrl-key>. In addition, key combos consisting of an initial Escape key followed by a normal key value can be bound using <Esc>key.

Examples:

bind main R             refresh
bind main <Down>        next
bind main <Ctrl-f>      scroll-page-down
bind main <Esc>o        options
bind main <ShiftTab>    parent

Notes

  • Tig reads keystrokes via ncurses and is subject to various limitations. See ncurses(3x) and terminfo(5) (or termcap).

  • Ctrl-m and Ctrl-i cannot be bound as they conflict with Enter and Tab respectively.

  • Case differences cannot be distinguished in control sequences such as Ctrl-f and Ctrl-F.

  • Ctrl-<Space> is typically translated to Ctrl-@, which is available for binding.

  • Only some subset of special symbolic keys such as <ShiftTab> will be available in any given terminal emulator.

  • Ctrl-z is automatically used for process control and will suspend Tig and open a subshell (use fg to reenter Tig).

    Actions

    Actions are either specified as user-defined commands (external or internal) or using action names as described in the following sections.

External user-defined command

These actions start with one or more of the following option flags followed by the command that should be executed.

!

Run the command in the foreground with output shown.

@

Run the command in the background with no output.

+

Run the command synchronously, and echo the first line of output to the status bar.

?

Prompt the user before executing the command.

<

Exit Tig after executing the command.

>

Re-open Tig instantly in the last displayed view after executing the command.

Unless otherwise specified, commands are run in the foreground with their console output shown (as if ! was specified). When multiple command options are specified their behavior are combined, e.g. "?<git commit" will prompt the user whether to execute the command and will exit Tig after completion.

Browsing state variables

User-defined commands can optionally refer to Tig’s internal state using the following variable names, which are substituted before commands are run:

%(head)

The currently viewed head ID. Defaults to HEAD

%(commit)

The currently selected commit ID.

%(blob)

The currently selected blob ID.

%(branch)

The currently selected branch name.

%(remote)

The currently selected remote name. For remote branches %(branch) will contain the branch name.

%(tag)

The currently selected tag name.

%(stash)

The currently selected stash name.

%(directory)

The current directory path in the tree view or "." if undefined.

%(file)

The currently selected file.

%(lineno)

The currently selected line number. Defaults to 0.

%(ref)

The reference given to blame or HEAD if undefined.

%(revargs)

The revision arguments passed on the command line.

%(fileargs)

The file arguments passed on the command line.

%(cmdlineargs)

All other options passed on the command line.

%(diffargs)

Options from diff-options or TIG_DIFF_OPTS used by the diff and stage view.

%(blameargs)

Options from blame-options used by the blame view.

%(logargs)

Options from log-options used by the log view.

%(mainargs)

Options from main-options used by the main view.

%(prompt)

Prompt for the argument value. Optionally specify a custom prompt using "%(prompt Enter branch name: )"

%(text)

The text of the currently selected line.

%(repo:head)

The name of the checked out branch, e.g. master

%(repo:head-id)

The commit ID of the checked out branch.

%(repo:remote)

The remote associated with the checked out branch, e.g. origin/master.

%(repo:cdup)

The path to change directory to the repository root, e.g. ../

%(repo:prefix)

The path prefix of the current work directory, e.g subdir/.

%(repo:git-dir)

The path to the Git directory, e.g. /src/repo/.git.

%(repo:worktree)

The worktree path, if defined.

%(repo:is-inside-work-tree)

Whether Tig is running inside a work tree, either true or false.

Examples:

# Save the current commit as a patch file when the user selects a commit
# in the main view and presses 'S'.
bind main S !git format-patch -1 %(commit)

# Create and checkout a new branch; specify custom prompt
bind main B ?git checkout -b "%(prompt Enter new branch name: )"

# Show commit statistics for the author under the cursor
bind main U +sh -c 'git --no-pager shortlog -s --author="$(git show -s --format=%aE %(commit))" </dev/tty'

Advanced shell-like commands

If your command requires use of dynamic features, such as subshells, expansion of environment variables and process control, this can be achieved by using a shell command:

Configure a binding to copy the current commit ID to the clipboard.
bind generic I @sh -c "echo -n %(commit) | xclip -selection c"

Or by using a combination of Git aliases and Tig external commands. The following example entries can be put in either the .gitconfig or .git/config file:

Git configuration which binds Tig keys to Git command aliases.
[alias]
        gitk-bg = !"gitk HEAD --not $(git rev-parse --remotes) &"
        publish = !"for i in origin public; do git push $i; done"
[tig "bind"]
        # @-prefix means that the console output will not be shown.
        generic = V !@git gitk-bg
        generic = > !git publish

Internal user-defined commands

Actions beginning with a : will be run and interpreted as internal commands and act similar to commands run via Tig’s prompt. Valid internal commands are configuration file options (as described in this document) and pager view commands. Examples:

# Reload ~/.tigrc when 'S' is pressed
bind generic S :source .tigrc

# Change diff view to show all commit changes regardless of file limitations
bind diff F :set diff-options = --full-diff

# Show the output of git-reflog(1) in the pager view
bind generic W :!git reflog

# Search for previous diff (c)hunk and next diff header
bind stage 2 :?^@@
bind stage D :/^diff --(git|cc)

bind main I :toggle id                          # Show/hide the ID column
bind diff D :toggle diff-options --minimal      # Use minimal diff algorithm
bind diff [ :toggle diff-context -3             # Decrease context (-U arg)
bind diff ] :toggle diff-context +3             # Increase context
bind generic V :toggle split-view-height -10%   # Decrease split height

Similar to external commands, pager view commands can contain variable names that will be substituted before the command is run.

Action names

Valid action names are described below. Note, all action names are case-insensitive, and you may use -, _, and . interchangeably, e.g. "view-main", "View.Main", and "VIEW_MAIN" are the same.

View switching

view-main

Show main view

view-diff

Show diff view

view-log

Show log view

view-tree

Show tree view

view-blob

Show blob view

view-blame

Show blame view

view-refs

Show refs view

view-status

Show status view

view-stage

Show stage view

view-stash

Show stash view

view-grep

Show grep view

view-pager

Show pager view

view-help

Show help view

View manipulation

enter

Enter and open selected line

back

Go back to the previous view state

next

Move to next

previous

Move to previous

parent

Move to parent

view-next

Move focus to the next view

refresh

Reload and refresh view

maximize

Maximize the current view

view-close

Close the current view

view-close-no-quit

Close the current view without quitting

quit

Close all views and quit

View-specific actions

status-update

Stage/unstage chunk or file changes

status-revert

Revert chunk or file changes

status-merge

Merge file using external tool

stage-update-line

Stage/unstage single line

stage-split-chunk

Split current diff chunk

Cursor navigation

move-up

Move cursor one line up

move-down

Move cursor one line down

move-page-down

Move cursor one page down

move-page-up

Move cursor half a page up

move-half-page-down

Move cursor half a page down

move-half-page-up

Move cursor one page up

move-first-line

Move cursor to first line

move-last-line

Move cursor to last line

move-next-merge

Move cursor to next merge commit

move-prev-merge

Move cursor to previous merge commit

Scrolling

scroll-line-up

Scroll one line up

scroll-line-down

Scroll one line down

scroll-page-up

Scroll one page up

scroll-page-down

Scroll one page down

scroll-first-col

Scroll to the first line columns

scroll-left

Scroll two columns left

scroll-right

Scroll two columns right

Searching

search

Search the view

search-back

Search backwards in the view

find-next

Find next search match

find-prev

Find previous search match

Misc

edit

Open in editor

prompt

Open the prompt

options

Open the options menu

screen-redraw

Redraw the screen

stop-loading

Stop all loading views

show-version

Show version information

none

Do nothing

Color command

Color commands control highlighting and the user interface styles. If your terminal supports color, these commands can be used to assign foreground and background combinations to certain areas. Optionally, an attribute can be given as the last parameter. The syntax is:

color area fgcolor bgcolor [attributes]

Examples:

# Override the default terminal colors to white on black.
color default           white   black
# Diff colors
color diff-header       yellow  default
color diff-index        blue    default
color diff-chunk        magenta default
color "Reported-by:"    green   default
# View-specific color
color tree.date         black   cyan    bold

Or in the Git configuration files:

[tig "color"]
        # A strange looking cursor line
        cursor          = red   default underline
        # UI colors
        title-blur      = white blue
        title-focus     = white blue    bold
# View-specific color
[tig "color.tree"]
        date            = cyan  default bold
Area names

Can be either a built-in area name or a custom quoted string. The latter allows custom color rules to be added for lines matching a quoted string. Valid built-in area names are described below. Note, all names are case-insensitive, and you may use -, and _ interchangeably, e.g. "Diff-Header" and "DIFF_HEADER" are the same. View-specific colors can be defined by prefixing the view name to the area name, e.g. "stage.diff-chunk" and "diff.diff-chunk".

Color names

Valid colors include: white, black, green, magenta, blue, cyan, yellow, red, default. Use default to refer to the default terminal colors, for example, to keep the background transparent when you are using a terminal with a transparent background.

Colors can also be specified using the keywords color0, color1, …, colorN-1 (where N is the number of colors supported by your terminal). This is useful when you remap the colors for your display or want to enable colors supported by 88-color and 256-color terminals. Note that the color prefix is optional. If you prefer, you can specify colors directly by their numbers 0, 1, …, N-1 instead, just like in the configuration file of Git.

Attribute names

Valid attributes include: normal, blink, bold, dim, reverse, standout, and underline. Note, not all attributes may be supported by the terminal.

UI colors

The colors and attributes to be used for the text that is not highlighted or that specify the use of the default terminal colors can be controlled by setting the default color option.

Table 1. General

default

Override default terminal colors (see above).

cursor

The cursor line.

status

The status window showing info messages.

title-focus

The title window for the current view.

title-blur

The title window of any backgrounded view.

search-result

Highlighted search result.

delimiter

Delimiter shown for truncated lines.

header

The view header lines. Use status.header to color the staged, unstaged, and untracked sections in the status view. Use help.header to color the keymap sections in the help view.

line-number

Line numbers.

id

The commit ID.

date

The author date.

author

The commit author.

mode

The file mode holding the permissions and type.

overflow

Title text overflow.

directory

The directory name.

file

The file name.

file-size

File size.

Table 2. Main view colors

graph-commit

The commit dot in the revision graph.

palette-[0-13]

14 different colors, used for distinguishing branches or commits. By default, the palette uses the ASCII colors, where the second half of them have the bold attribute enabled to give a brighter color. Example: palette-0 = red

main-commit

The commit comment.

main-head

Label of the current branch.

main-remote

Label of a remote.

main-tracked

Label of the remote tracked by the current branch.

main-tag

Label of a signed tag.

main-local-tag

Label of a local tag.

main-ref

Label of any other reference.

main-replace

Label of replaced reference.

Table 3. Status view

stat-none

Empty status label.

stat-staged

Status flag of staged files.

stat-unstaged

Status flag of unstaged files.

stat-untracked

Status flag of untracked files.

Table 4. Help view

help-group

Help group name.

help-action

Help action name.

Highlighting

Diff markup

Options concerning diff start, chunks and lines added and deleted.

diff-header, diff-chunk, diff-add, diff-add2, diff-del, diff-del2, diff-add-highlight, diff-del-highlight

Enhanced Git diff markup

Extra diff information emitted by the Git diff machinery, such as mode changes, rename detection, and similarity.

diff-oldmode, diff-newmode, diff-copy-from, diff-copy-to, diff-similarity, diff-index

Pretty print commit headers

Commit diffs and the revision logs are usually formatted using pretty printed headers , unless --pretty=raw was given. This includes lines, such as merge info, commit ID, and author and committer date.

pp-refs, pp-reflog, pp-reflogmsg, pp-merge

Raw commit header

Usually shown when --pretty=raw is given, however commit is pretty much omnipresent.

commit, parent, tree, author, committer

Commit message

Signed-off-by, Acked-by, Reviewed-by and Tested-by lines are colorized. Characters in the commit title exceeding a predefined width can be highlighted.

Tree markup

Colors for information of the tree view.

tree-dir, tree-file

Source command

Source commands make it possible to read additional configuration files. Sourced files are included in-place, meaning when a source command is encountered the file will be immediately read. Any commands later in the current configuration file will take precedence.

If the given path does not exist, tig will proceed with a warning. Give the -q parameter to suppress the warning.

The syntax is:

source [-q] path

Examples:

source ~/.tig/colorscheme.tigrc
source ~/.tig/keybindings.tigrc

Copyright (c) 2006-2014 Jonas Fonseca <jonas.fonseca@gmail.com>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

SEE ALSO

tig(1), the Tig manual, git(7), git-config(1)


tig-2.4.1/include/000077500000000000000000000000001332650737300137355ustar00rootroot00000000000000tig-2.4.1/include/tig/000077500000000000000000000000001332650737300145205ustar00rootroot00000000000000tig-2.4.1/include/tig/apps.h000066400000000000000000000016361332650737300156420ustar00rootroot00000000000000/* Copyright (c) 2006-2017 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_APPS_H #define TIG_APPS_H #include "tig/tig.h" #include "tig/argv.h" #include "tig/util.h" /* * general */ struct app_external { const char *argv[SIZEOF_ARG]; char * const env[SIZEOF_ARG]; }; /* * diff-highlight */ struct app_external *app_diff_highlight_load(const char *query); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/argv.h000066400000000000000000000052771332650737300156430ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_ARGV_H #define TIG_ARGV_H #include "tig/tig.h" /* * Argument array helpers. */ #define SIZEOF_ARG 32 /* Default argument array size. */ #define DIFF_ARGS "%(diffargs)" bool argv_to_string(const char *argv[], char *buf, size_t buflen, const char *sep); char *argv_to_string_alloc(const char *argv[], const char *sep); bool argv_to_string_quoted(const char *argv[SIZEOF_ARG], char *buf, size_t buflen, const char *sep); bool argv_from_string_no_quotes(const char *argv[SIZEOF_ARG], int *argc, char *cmd); bool argv_from_string(const char *argv[SIZEOF_ARG], int *argc, char *cmd); void argv_free(const char *argv[]); size_t argv_size(const char **argv); bool argv_append(const char ***argv, const char *arg); bool argv_appendn(const char ***argv, const char *arg, size_t arglen); bool argv_append_array(const char ***dst_argv, const char *src_argv[]); bool argv_copy(const char ***dst, const char *src[]); bool argv_contains(const char **argv, const char *arg); typedef char argv_string[SIZEOF_STR]; typedef unsigned long argv_number; #define ARGV_ENV_INFO(_) \ _(argv_string, commit, "", "HEAD") \ _(argv_string, blob, "", "") \ _(argv_string, branch, "", "") \ _(argv_string, directory, ".", "") \ _(argv_string, file, "", "") \ _(argv_string, head, "", "HEAD") \ _(argv_number, lineno, "", 0) \ _(argv_string, ref, "HEAD", "") \ _(argv_string, remote, "origin", "") \ _(argv_string, stash, "", "") \ _(argv_string, status, "", "") \ _(argv_string, tag, "", "") \ _(argv_string, text, "", "") \ #define ARGV_ENV_FIELDS(type, name, ifempty, initval) type name; struct argv_env { ARGV_ENV_INFO(ARGV_ENV_FIELDS) unsigned long goto_lineno; char search[SIZEOF_STR]; char none[1]; }; extern struct argv_env argv_env; bool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], bool first, bool file_filter); char *argv_format_arg(struct argv_env *argv_env, const char *src_arg); struct rev_flags { size_t search_offset; bool with_graph; bool with_reflog; }; bool argv_parse_rev_flag(const char *arg, struct rev_flags *flags); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/blame.h000066400000000000000000000015051332650737300157520ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_BLAME_H #define TIG_BLAME_H #include "tig/view.h" extern struct view blame_view; static inline void open_blame_view(struct view *prev, enum open_flags flags) { open_view(prev, &blame_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/blob.h000066400000000000000000000014111332650737300156040ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_BLOB_H #define TIG_BLOB_H #include "tig/view.h" extern struct view blob_view; void open_blob_view(struct view *prev, enum open_flags flags); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/diff.h000066400000000000000000000036421332650737300156060ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_DIFF_H #define TIG_DIFF_H #include "tig/view.h" struct diff_state { bool after_commit_title; bool after_diff; bool reading_diff_stat; bool combined_diff; bool adding_describe_ref; bool highlight; const char *file; unsigned int lineno; struct position pos; struct io view_io; }; enum request diff_common_edit(struct view *view, enum request request, struct line *line); bool diff_common_read(struct view *view, const char *data, struct diff_state *state); enum request diff_common_enter(struct view *view, enum request request, struct line *line); struct line *diff_common_add_diff_stat(struct view *view, const char *text, size_t offset); void diff_common_select(struct view *view, struct line *line, const char *changes_msg); void diff_save_line(struct view *view, struct diff_state *state, enum open_flags flags); void diff_restore_line(struct view *view, struct diff_state *state); enum status_code diff_init_highlight(struct view *view, struct diff_state *state); bool diff_done_highlight(struct diff_state *state); unsigned int diff_get_lineno(struct view *view, struct line *line); const char *diff_get_pathname(struct view *view, struct line *line); extern struct view diff_view; static inline void open_diff_view(struct view *prev, enum open_flags flags) { open_view(prev, &diff_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/display.h000066400000000000000000000043321332650737300163400ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_DISPLAY_H #define TIG_DISPLAY_H #include "tig/tig.h" #include "tig/keys.h" int get_input(int prompt_position, struct key *key); int get_input_char(void); extern WINDOW *status_win; void update_status(const char *msg, ...) PRINTF_LIKE(1, 2); void update_status_with_context(const char *context, const char *msg, ...) PRINTF_LIKE(2, 3); void report(const char *msg, ...) PRINTF_LIKE(1, 2); void report_clear(void); /* * Display management. */ /* The display array of active views and the index of the current view. */ extern struct view *display[2]; extern unsigned int current_view; #define foreach_displayed_view(view, i) \ for (i = 0; i < ARRAY_SIZE(display) && (view = display[i]); i++) #define displayed_views() (!!display[0] + !!display[1]) #define view_is_displayed(view) \ (view == display[0] || view == display[1]) void init_tty(void); void init_display(void); void resize_display(void); void redraw_display(bool clear); bool save_display(const char *path); bool save_view(struct view *view, const char *path); bool vertical_split_is_enabled(enum vertical_split vsplit, int height, int width); int apply_vertical_split(int base_width); bool open_external_viewer(const char *argv[], const char *dir, bool silent, bool confirm, bool echo, bool quick, bool refresh, const char *notice); void open_editor(const char *file, unsigned int lineno); void enable_mouse(bool enable); enum status_code open_script(const char *path); bool is_script_executing(void); #define get_cursor_pos(cursor_y, cursor_x) getyx(newscr, cursor_y, cursor_x) #define set_cursor_pos(cursor_y, cursor_x) wmove(newscr, cursor_y, cursor_x) #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/draw.h000066400000000000000000000032171332650737300156310ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_DRAW_H #define TIG_DRAW_H #include "tig/tig.h" #include "tig/line.h" #include "tig/view.h" #include "tig/refdb.h" #include "tig/util.h" enum align { ALIGN_LEFT, ALIGN_RIGHT }; #define VIEW_MAX_LEN(view) ((view)->width + (view)->pos.col - (view)->col) bool draw_text(struct view *view, enum line_type type, const char *string); bool PRINTF_LIKE(3, 4) draw_formatted(struct view *view, enum line_type type, const char *format, ...); bool draw_graphic(struct view *view, enum line_type type, const chtype graphic[], size_t size, bool separator); bool draw_field(struct view *view, enum line_type type, const char *text, int width, enum align align, bool trim); bool draw_lineno(struct view *view, struct view_column *column, unsigned int lineno, bool add_offset); bool view_column_draw(struct view *view, struct line *line, unsigned int lineno); void redraw_view(struct view *view); void redraw_view_from(struct view *view, int lineno); void redraw_view_dirty(struct view *view); bool draw_view_line(struct view *view, unsigned int lineno); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/git.h000066400000000000000000000053121332650737300154550ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_GIT_H #define TIG_GIT_H /* * Argv-style git command macros. */ #define GIT_DIFF_INITIAL(encoding_arg, cached_arg, context_arg, space_arg, old_name, new_name) \ "git", "diff", (encoding_arg), "--no-color", "--patch-with-stat", \ (cached_arg), (context_arg), (space_arg), "--", (old_name), (new_name), NULL #define GIT_DIFF_STAGED_INITIAL(encoding_arg, context_arg, space_arg, new_name) \ GIT_DIFF_INITIAL(encoding_arg, "--cached", context_arg, space_arg, "", new_name) #define GIT_DIFF_STAGED(encoding_arg, context_arg, space_arg, old_name, new_name) \ "git", "diff-index", (encoding_arg), "--root", "--patch-with-stat", "-C", "-M", \ "--cached", "--diff-filter=ACDMRTXB", DIFF_ARGS, "%(cmdlineargs)", (context_arg), (space_arg), "HEAD", \ "--", (old_name), (new_name), NULL #define GIT_DIFF_UNSTAGED(encoding_arg, context_arg, space_arg, old_name, new_name) \ "git", "diff-files", (encoding_arg), "--root", "--patch-with-stat", "-C", "-M", \ DIFF_ARGS, "%(cmdlineargs)", (context_arg), (space_arg), "--", (old_name), (new_name), NULL /* Don't show staged unmerged entries. */ #define GIT_DIFF_STAGED_FILES(output_arg) \ "git", "diff-index", (output_arg), "--diff-filter=ACDMRTXB", "-C", "--cached", "HEAD", "--", NULL #define GIT_DIFF_UNSTAGED_FILES(output_arg) \ "git", "diff-files", (output_arg), NULL #define GIT_DIFF_BLAME(encoding_arg, context_arg, space_arg, new_name) \ GIT_DIFF_UNSTAGED(encoding_arg, context_arg, space_arg, "", new_name) #define GIT_DIFF_BLAME_NO_PARENT(encoding_arg, context_arg, space_arg, new_name) \ GIT_DIFF_INITIAL(encoding_arg, "", context_arg, space_arg, "/dev/null", new_name) #define GIT_MAIN_LOG(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs, pretty_arg) \ "git", "log", (encoding_arg), \ (commit_order_arg), (mainargs), (diffargs), (revargs), "--date=raw", "--parents", \ "--no-color", (pretty_arg), "--", (fileargs), NULL #define GIT_MAIN_LOG_RAW(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs) \ GIT_MAIN_LOG(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs, \ "--pretty=raw") #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/graph.h000066400000000000000000000035201332650737300157720ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_GRAPH_H #define TIG_GRAPH_H #include "tig/types.h" #define GRAPH_COMMIT_COLOR (-1) #define GRAPH_COLORS 14 struct graph; struct graph_symbol; struct graph_canvas { size_t size; /* The width of the graph array. */ struct graph_symbol *symbols; /* Symbols for this row. */ }; typedef bool (*graph_symbol_iterator_fn)(void *, const struct graph *graph, const struct graph_symbol *, int color_id, bool); struct graph { void *private; void (*done)(struct graph *graph); void (*done_rendering)(struct graph *graph); bool (*add_commit)(struct graph *graph, struct graph_canvas *canvas, const char *id, const char *parents, bool is_boundary); bool (*add_parent)(struct graph *graph, const char *parent); bool (*render_parents)(struct graph *graph, struct graph_canvas *canvas); bool (*is_merge)(struct graph_canvas *canvas); void (*foreach_symbol)(const struct graph *graph, const struct graph_canvas *canvas, graph_symbol_iterator_fn fn, void *data); const char *(*symbol_to_ascii)(const struct graph_symbol *symbol); const char *(*symbol_to_utf8)(const struct graph_symbol *symbol); const chtype *(*symbol_to_chtype)(const struct graph_symbol *symbol); }; struct graph *init_graph(enum graph_display display); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/grep.h000066400000000000000000000013621332650737300156300ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_GREP_H #define TIG_GREP_H #include "tig/view.h" void open_grep_view(struct view *prev); extern struct view grep_view; #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/help.h000066400000000000000000000015001332650737300156150ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_HELP_H #define TIG_HELP_H #include "tig/view.h" extern struct view help_view; static inline void open_help_view(struct view *prev, enum open_flags flags) { open_view(prev, &help_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/io.h000066400000000000000000000100471332650737300153020ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_IO_H #define TIG_IO_H #include "tig/tig.h" struct buffer { char *data; size_t size; }; /* * Encoding conversion. */ #define ENCODING_UTF8 "UTF-8" struct encoding; struct encoding *encoding_open(const char *fromcode); bool encoding_convert(struct encoding *encoding, struct buffer *buf); const char *encoding_iconv(iconv_t iconv_out, const char *string, size_t length); struct encoding *get_path_encoding(const char *path, struct encoding *default_encoding); extern char encoding_arg[]; extern struct encoding *default_encoding; /* * Path manipulation. */ #ifndef _PATH_DEFPATH #define _PATH_DEFPATH "/usr/bin:/bin" #endif bool path_expand(char *dst, size_t dstlen, const char *src); bool path_search(char *dst, size_t dstlen, const char *query, const char *colon_path, int access_flags); /* * Executing external commands. */ enum io_flags { IO_RD_FORWARD_STDIN = 1 << 0, /* Forward stdin from parent process to child. */ IO_RD_WITH_STDERR = 1 << 1, /* Redirect stderr to stdin. */ }; enum io_type { IO_BG, /* Execute command in the background. */ IO_FG, /* Execute command with same std{in,out,err}. */ IO_RD, /* Read only fork+exec IO. */ IO_RP, /* Read only fork+exec IO with input pipe. */ IO_WR, /* Write only fork+exec IO. */ IO_AP, /* Append fork+exec output to file. */ }; struct io { int pipe; /* Pipe end for reading or writing. */ pid_t pid; /* PID of spawned process. */ int error; /* Error status. */ char *buf; /* Read buffer. */ size_t bufalloc; /* Allocated buffer size. */ size_t bufsize; /* Buffer content size. */ char *bufpos; /* Current buffer position. */ unsigned int eof:1; /* Has end of file been reached. */ int status:8; /* Status exit code. */ }; typedef enum status_code (*io_read_fn)(char *, size_t, char *, size_t, void *data); bool io_open(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3); bool io_from_string(struct io *io, const char *str); bool io_kill(struct io *io); bool io_done(struct io *io); bool io_exec(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[], int custom); bool io_run(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[]); bool io_run_bg(const char **argv, const char *dir); bool io_run_fg(const char **argv, const char *dir); bool io_run_append(const char **argv, int fd); bool io_eof(struct io *io); int io_error(struct io *io); char * io_strerror(struct io *io); bool io_can_read(struct io *io, bool can_block); ssize_t io_read(struct io *io, void *buf, size_t bufsize); bool io_get(struct io *io, struct buffer *buf, int c, bool can_read); bool io_write(struct io *io, const void *buf, size_t bufsize); bool io_printf(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3); bool io_read_buf(struct io *io, char buf[], size_t bufsize, bool allow_empty); bool io_run_buf(const char **argv, char buf[], size_t bufsize, const char *dir, bool allow_empty); enum status_code io_load(struct io *io, const char *separators, io_read_fn read_property, void *data); enum status_code io_load_span(struct io *io, const char *separators, size_t *lineno, io_read_fn read_property, void *data); enum status_code io_run_load(const char **argv, const char *separators, io_read_fn read_property, void *data); char *io_memchr(struct buffer *buf, char *data, int c); const char *get_temp_dir(void); bool PRINTF_LIKE(2, 3) io_fprintf(FILE *file, const char *fmt, ...); bool io_trace(const char *fmt, ...); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/keys.h000066400000000000000000000057121332650737300156510ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_KEYS_H #define TIG_KEYS_H #include "tig/tig.h" #include "tig/request.h" #include "tig/util.h" /* * Keys */ struct keybinding; struct keymap { const char *name; struct keybinding **data; size_t size; bool hidden; }; struct key { union { int value; char bytes[7]; } data; struct { bool control:1; bool multibytes:1; } modifiers; }; static inline int key_to_value(const struct key *key) { return key->modifiers.multibytes ? 0 : key->data.value; } static inline unsigned long key_to_unicode(const struct key *key) { return key->modifiers.multibytes ? utf8_to_unicode(key->data.bytes, strlen(key->data.bytes)) : 0; } static inline char key_to_control(const struct key *key) { return (key->modifiers.control && key->modifiers.multibytes && strlen(key->data.bytes) == 1) ? key->data.bytes[0] : 0; } struct keymap *get_keymap(const char *name, size_t namelen); const char *get_key_name(const struct key key[], size_t keys, bool quote_comma); enum status_code get_key_value(const char **name, struct key *key); /* Looks for a key binding first in the given map, then in the generic map, and * lastly in the default keybindings. */ enum request get_keybinding(const struct keymap *keymap, const struct key key[], size_t keys, int *matches); enum status_code add_keybinding(struct keymap *table, enum request request, const struct key key[], size_t keys); const char *get_keys(const struct keymap *keymap, enum request request, bool all); #define get_view_key(view, request) get_keys((view)->keymap, request, false) struct run_request_flags { bool silent; bool confirm; bool exit; bool internal; bool echo; bool quick; }; struct run_request { struct keymap *keymap; struct run_request_flags flags; const char **argv; }; struct run_request *get_run_request(enum request request); enum status_code add_run_request(struct keymap *keymap, const struct key key[], size_t keys, const char **argv); enum status_code parse_run_request_flags(struct run_request_flags *flags, const char **argv); const char *format_run_request_flags(const struct run_request *req); typedef bool (*key_visitor_fn)(void *data, const char *group, struct keymap *keymap, enum request request, const char *key, const struct request_info *req_info, const struct run_request *run_req); bool foreach_key(key_visitor_fn fn, void *data, bool combine_keys); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/line.h000066400000000000000000000077321332650737300156310ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_LINE_H #define TIG_LINE_H #include "tig/tig.h" struct ref; /* * Line-oriented content detection. */ #define LINE_INFO(_) \ _(DIFF_HEADER, "diff --"), \ _(DIFF_DEL_FILE, "--- "), \ _(DIFF_ADD_FILE, "+++ "), \ _(DIFF_START, "---"), \ _(DIFF_CHUNK, "@@"), \ _(DIFF_ADD, "+"), \ _(DIFF_ADD2, " +"), \ _(DIFF_DEL, "-"), \ _(DIFF_DEL2, " -"), \ _(DIFF_INDEX, "index "), \ _(DIFF_OLDMODE, "old file mode "), \ _(DIFF_NEWMODE, "new file mode "), \ _(DIFF_DELMODE, "deleted file mode "), \ _(DIFF_SIMILARITY, "similarity "), \ _(DIFF_ADD_HIGHLIGHT, ""), \ _(DIFF_DEL_HIGHLIGHT, ""), \ _(PP_MERGE, "Merge: "), \ _(PP_REFS, "Refs: "), \ _(PP_REFLOG, "Reflog: "), \ _(PP_REFLOGMSG, "Reflog message: "), \ _(COMMIT, "commit "), \ _(PARENT, "parent "), \ _(TREE, "tree "), \ _(AUTHOR, "author "), \ _(COMMITTER, "committer "), \ _(DEFAULT, ""), \ _(CURSOR, ""), \ _(STATUS, ""), \ _(DELIMITER, ""), \ _(DATE, ""), \ _(MODE, ""), \ _(ID, ""), \ _(OVERFLOW, ""), \ _(DIRECTORY, ""), \ _(FILE, ""), \ _(FILE_SIZE, ""), \ _(LINE_NUMBER, ""), \ _(TITLE_BLUR, ""), \ _(TITLE_FOCUS, ""), \ _(HEADER, ""), \ _(SECTION, ""), \ _(MAIN_COMMIT, ""), \ _(MAIN_TAG, ""), \ _(MAIN_LOCAL_TAG, ""), \ _(MAIN_REMOTE, ""), \ _(MAIN_REPLACE, ""), \ _(MAIN_TRACKED, ""), \ _(MAIN_REF, ""), \ _(MAIN_HEAD, ""), \ _(STAT_NONE, ""), \ _(STAT_STAGED, ""), \ _(STAT_UNSTAGED, ""), \ _(STAT_UNTRACKED, ""), \ _(HELP_GROUP, ""), \ _(HELP_ACTION, ""), \ _(DIFF_STAT, ""), \ _(PALETTE_0, ""), \ _(PALETTE_1, ""), \ _(PALETTE_2, ""), \ _(PALETTE_3, ""), \ _(PALETTE_4, ""), \ _(PALETTE_5, ""), \ _(PALETTE_6, ""), \ _(PALETTE_7, ""), \ _(PALETTE_8, ""), \ _(PALETTE_9, ""), \ _(PALETTE_10, ""), \ _(PALETTE_11, ""), \ _(PALETTE_12, ""), \ _(PALETTE_13, ""), \ _(GRAPH_COMMIT, ""), \ _(SEARCH_RESULT, "") enum line_type { #define DEFINE_LINE_ENUM(type, line) LINE_##type LINE_INFO(DEFINE_LINE_ENUM), LINE_NONE }; struct line_info { struct line_info *next; /* List of line info matching this line type. */ const char *prefix; /* View (or keymap) name. */ int fg, bg, attr; /* Color and text attributes for the lines. */ int color_pair; }; struct line_rule { const char *name; /* Option name. */ int namelen; /* Size of option name. */ const char *line; /* The start of line to match. */ int linelen; /* Size of string to match. */ struct line_info info; /* List of line info matching this rule. */ }; enum line_type get_line_type(const char *line); enum line_type get_line_type_from_ref(const struct ref *ref); const char *get_line_type_name(enum line_type type); struct line_info *get_line_info(const char *prefix, enum line_type type); struct line_info *add_line_rule(const char *prefix, struct line_rule *rule); void init_colors(void); typedef bool (*line_rule_visitor_fn)(void *data, const struct line_rule *rule); bool foreach_line_rule(line_rule_visitor_fn fn, void *data); /* Color IDs must be 1 or higher. [GH #15] */ #define COLOR_ID(line_type) ((line_type) + 1) static inline int get_line_color(const char *prefix, enum line_type type) { return COLOR_ID(get_line_info(prefix, type)->color_pair); } static inline int get_line_attr(const char *prefix, enum line_type type) { struct line_info *info = get_line_info(prefix, type); return COLOR_PAIR(COLOR_ID(info->color_pair)) | info->attr; } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/log.h000066400000000000000000000014731332650737300154570ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_LOG_H #define TIG_LOG_H #include "tig/view.h" extern struct view log_view; static inline void open_log_view(struct view *prev, enum open_flags flags) { open_view(prev, &log_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/main.h000066400000000000000000000035341332650737300156220ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_MAIN_H #define TIG_MAIN_H #include "tig/view.h" #include "tig/graph.h" #include "tig/util.h" struct commit { char id[SIZEOF_REV]; /* SHA1 ID. */ const struct ident *author; /* Author of the commit. */ struct time time; /* Date from the author ident. */ struct graph_canvas graph; /* Ancestry chain graphics. */ char title[1]; /* First line of the commit message. */ }; struct main_state { struct graph *graph; struct commit current; char **reflog; size_t reflogs; int reflog_width; char reflogmsg[SIZEOF_STR / 2]; enum line_type goto_line_type; bool in_header; bool with_graph; bool first_parent; bool add_changes_staged; bool add_changes_unstaged; }; bool main_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data); bool main_read(struct view *view, struct buffer *buf, bool force_stop); enum request main_request(struct view *view, enum request request, struct line *line); void main_select(struct view *view, struct line *line); void main_done(struct view *view); bool main_status_exists(struct view *view, enum line_type type); extern struct view main_view; static inline void open_main_view(struct view *prev, enum open_flags flags) { open_view(prev, &main_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/map.h000066400000000000000000000037061332650737300154540ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_MAP_H #define TIG_MAP_H #include "tig/tig.h" /* * String map. */ typedef unsigned int string_map_key_t; typedef string_map_key_t (*string_map_hash_fn)(const void *value); typedef const char *(*string_map_key_fn)(const void *value); typedef bool (*string_map_iterator_fn)(void *data, void *value); struct string_map { string_map_hash_fn hash_fn; string_map_key_fn key_fn; size_t init_size; void *htab; const char *key; }; extern string_map_hash_fn string_map_hash_helper; void *string_map_get(struct string_map *map, const char *key); void **string_map_get_at(struct string_map *map, const char *key); void *string_map_put(struct string_map *map, const char *key, void *value); void **string_map_put_to(struct string_map *map, const char *key); void *string_map_remove(struct string_map *map, const char *key); void string_map_clear(struct string_map *map); void string_map_foreach(struct string_map *map, string_map_iterator_fn iterator, void *data); #define DEFINE_STRING_MAP(name, type, key_member, init_size) \ static const char * \ name ## _key(const void *value) \ { \ return ((type) value)->key_member; \ } \ static string_map_key_t \ name ## _hash(const void *value) \ { \ return string_map_hash_helper(name ## _key(value)); \ } \ static struct string_map name = { \ name ## _hash, \ name ## _key, \ init_size, \ }; #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/options.h000066400000000000000000000171231332650737300163700ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_OPTIONS_H #define TIG_OPTIONS_H #include "tig/tig.h" #include "tig/util.h" #include "tig/line.h" /* * Option variables. */ struct ref_format; struct view_column; typedef struct view_column *view_settings; #ifndef TIG_USER_CONFIG #define TIG_USER_CONFIG "~/.tigrc" #endif #define OPTION_INFO(_) \ _(blame_options, const char **, VIEW_BLAME_LIKE) \ _(blame_view, view_settings, VIEW_NO_FLAGS) \ _(blob_view, view_settings, VIEW_NO_FLAGS) \ _(commit_order, enum commit_order, VIEW_LOG_LIKE) \ _(diff_context, int, VIEW_DIFF_LIKE) \ _(diff_noprefix, bool, VIEW_NO_FLAGS) \ _(diff_options, const char **, VIEW_DIFF_LIKE) \ _(diff_highlight, const char *, VIEW_DIFF_LIKE) \ _(diff_view, view_settings, VIEW_NO_FLAGS) \ _(editor_line_number, bool, VIEW_NO_FLAGS) \ _(file_args, const char **, VIEW_NO_FLAGS) \ _(file_filter, bool, VIEW_DIFF_LIKE | VIEW_LOG_LIKE) \ _(focus_child, bool, VIEW_NO_FLAGS) \ _(git_colors, const char **, VIEW_NO_FLAGS) \ _(grep_view, view_settings, VIEW_NO_FLAGS) \ _(history_size, int, VIEW_NO_FLAGS) \ _(horizontal_scroll, double, VIEW_NO_FLAGS) \ _(id_width, int, VIEW_NO_FLAGS) \ _(ignore_case, enum ignore_case, VIEW_NO_FLAGS) \ _(ignore_space, enum ignore_space, VIEW_DIFF_LIKE) \ _(line_graphics, enum graphic, VIEW_RESET_DISPLAY) \ _(log_options, const char **, VIEW_LOG_LIKE) \ _(log_view, view_settings, VIEW_NO_FLAGS) \ _(mailmap, bool, VIEW_DIFF_LIKE | VIEW_LOG_LIKE) \ _(main_options, const char **, VIEW_LOG_LIKE) \ _(main_view, view_settings, VIEW_NO_FLAGS) \ _(mouse, bool, VIEW_NO_FLAGS) \ _(mouse_scroll, int, VIEW_NO_FLAGS) \ _(mouse_wheel_cursor, bool, VIEW_NO_FLAGS) \ _(pager_view, view_settings, VIEW_NO_FLAGS) \ _(reference_format, struct ref_format **, VIEW_NO_FLAGS) \ _(refresh_interval, int, VIEW_NO_FLAGS) \ _(refresh_mode, enum refresh_mode, VIEW_NO_FLAGS) \ _(refs_view, view_settings, VIEW_NO_FLAGS) \ _(rev_args, const char **, VIEW_NO_FLAGS) \ _(send_child_enter, bool, VIEW_NO_FLAGS) \ _(show_changes, bool, VIEW_NO_FLAGS) \ _(show_notes, bool, VIEW_NO_FLAGS) \ _(split_view_height, double, VIEW_RESET_DISPLAY) \ _(split_view_width, double, VIEW_RESET_DISPLAY) \ _(stage_view, view_settings, VIEW_NO_FLAGS) \ _(stash_view, view_settings, VIEW_NO_FLAGS) \ _(status_show_untracked_dirs, bool, VIEW_STATUS_LIKE) \ _(status_show_untracked_files, bool, VIEW_STATUS_LIKE) \ _(status_view, view_settings, VIEW_NO_FLAGS) \ _(tab_size, int, VIEW_NO_FLAGS) \ _(tree_view, view_settings, VIEW_NO_FLAGS) \ _(truncation_delimiter, const char *, VIEW_NO_FLAGS) \ _(vertical_split, enum vertical_split, VIEW_RESET_DISPLAY | VIEW_DIFF_LIKE) \ _(wrap_lines, bool, VIEW_NO_FLAGS) \ _(wrap_search, bool, VIEW_NO_FLAGS) \ #define DEFINE_OPTION_EXTERNS(name, type, flags) extern type opt_##name; OPTION_INFO(DEFINE_OPTION_EXTERNS) /* * View column options. */ #define AUTHOR_COLUMN_OPTIONS(_) \ _(display, enum author, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ _(maxwidth, int, VIEW_NO_FLAGS) \ #define COMMIT_TITLE_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(graph, enum graph_display, VIEW_LOG_LIKE) \ _(refs, bool, VIEW_NO_FLAGS) \ _(overflow, int, VIEW_NO_FLAGS) \ #define DATE_COLUMN_OPTIONS(_) \ _(display, enum date, VIEW_NO_FLAGS) \ _(local, bool, VIEW_NO_FLAGS) \ _(format, const char *, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ #define FILE_NAME_COLUMN_OPTIONS(_) \ _(display, enum filename, VIEW_GREP_LIKE) \ _(width, int, VIEW_NO_FLAGS) \ _(maxwidth, int, VIEW_NO_FLAGS) \ #define FILE_SIZE_COLUMN_OPTIONS(_) \ _(display, enum file_size, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ #define ID_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(color, bool, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ #define LINE_NUMBER_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(interval, int, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ #define MODE_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ #define REF_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(width, int, VIEW_NO_FLAGS) \ _(maxwidth, int, VIEW_NO_FLAGS) \ #define SECTION_COLUMN_OPTIONS(_) \ _(type, enum line_type, VIEW_NO_FLAGS) \ _(text, const char *, VIEW_NO_FLAGS) \ #define STATUS_COLUMN_OPTIONS(_) \ _(display, enum status_label, VIEW_NO_FLAGS) \ #define TEXT_COLUMN_OPTIONS(_) \ _(display, bool, VIEW_NO_FLAGS) \ _(commit_title_overflow, int, VIEW_NO_FLAGS) \ #define COLUMN_OPTIONS(_) \ _(author, AUTHOR, AUTHOR_COLUMN_OPTIONS) \ _(commit_title, COMMIT_TITLE, COMMIT_TITLE_COLUMN_OPTIONS) \ _(date, DATE, DATE_COLUMN_OPTIONS) \ _(file_name, FILE_NAME, FILE_NAME_COLUMN_OPTIONS) \ _(file_size, FILE_SIZE, FILE_SIZE_COLUMN_OPTIONS) \ _(id, ID, ID_COLUMN_OPTIONS) \ _(line_number, LINE_NUMBER, LINE_NUMBER_COLUMN_OPTIONS) \ _(mode, MODE, MODE_COLUMN_OPTIONS) \ _(ref, REF, REF_COLUMN_OPTIONS) \ _(section, SECTION, SECTION_COLUMN_OPTIONS) \ _(status, STATUS, STATUS_COLUMN_OPTIONS) \ _(text, TEXT, TEXT_COLUMN_OPTIONS) \ #define DEFINE_COLUMN_OPTIONS_STRUCT_VALUE(name, type, flags) type name; #define DEFINE_COLUMN_OPTIONS_STRUCT(name, id, options) \ struct name##_options { \ options(DEFINE_COLUMN_OPTIONS_STRUCT_VALUE) \ } name; union view_column_options { COLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_STRUCT) }; /* * Global state variables. */ extern iconv_t opt_iconv_out; extern char opt_editor[SIZEOF_STR]; extern const char **opt_cmdline_args; /* * Mapping between options and command argument mapping. */ void update_options_from_argv(const char *argv[]); const char *ignore_space_arg(); const char *commit_order_arg(); const char *commit_order_arg_with_graph(enum graph_display graph_display); const char *log_custom_pretty_arg(); const char *use_mailmap_arg(); const char *diff_context_arg(); const char *show_notes_arg(); /* * Option loading and parsing. */ struct option_info { const char *name; size_t namelen; const char *type; void *value; int flags; bool seen; }; struct option_info *find_option_info(struct option_info *option, size_t options, const char *prefix, const char *name); enum status_code parse_option(struct option_info *option, const char *prefix, const char *arg); struct option_info *find_column_option_info(enum view_column_type type, union view_column_options *opts, const char *option, struct option_info *column_info, const char **column_name); enum status_code parse_int(int *opt, const char *arg, int min, int max); enum status_code parse_step(double *opt, const char *arg); enum status_code set_option(const char *opt, int argc, const char *argv[]); enum status_code load_options(void); enum status_code load_git_config(void); enum status_code save_options(const char *path); const char *format_option_value(const struct option_info *option, char buf[], size_t bufsize); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/pager.h000066400000000000000000000023641332650737300157740ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_PAGER_H #define TIG_PAGER_H #include "tig/view.h" bool pager_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data); bool pager_read(struct view *view, struct buffer *buf, bool force_stop); bool pager_common_read(struct view *view, const char *data, enum line_type type, struct line **line); enum request pager_request(struct view *view, enum request request, struct line *line); void pager_select(struct view *view, struct line *line); extern struct view pager_view; static inline void open_pager_view(struct view *prev, enum open_flags flags) { open_view(prev, &pager_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/parse.h000066400000000000000000000040461332650737300160070ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_PARSE_H #define TIG_PARSE_H #include "tig/tig.h" #include "tig/util.h" struct chunk_header_position { unsigned long position; unsigned long lines; }; struct chunk_header { struct chunk_header_position old; struct chunk_header_position new; }; bool parse_chunk_header(struct chunk_header *header, const char *line); bool parse_chunk_lineno(unsigned long *lineno, const char *chunk, int marker); struct blame_commit { char id[SIZEOF_REV]; /* SHA1 ID. */ char title[128]; /* First line of the commit message. */ const struct ident *author; /* Author of the commit. */ struct time time; /* Date from the author ident. */ const char *filename; /* Name of file. */ char parent_id[SIZEOF_REV]; /* Parent/previous SHA1 ID. */ const char *parent_filename; /* Parent/previous name of file. */ }; struct blame_header { char id[SIZEOF_REV]; /* SHA1 ID. */ size_t orig_lineno; size_t lineno; size_t group; }; bool parse_blame_header(struct blame_header *header, const char *text, size_t max_lineno); bool parse_blame_info(struct blame_commit *commit, char author[SIZEOF_STR], char *line); /* Parse author lines where the name may be empty: * author 1138474660 +0100 */ void parse_author_line(char *ident, const struct ident **author, struct time *time); size_t parse_size(const char *text); /* * Caches. */ const char *get_path(const char *path); struct ident *get_author(const char *name, const char *email); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/prompt.h000066400000000000000000000032221332650737300162110ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_PROMPT_H #define TIG_PROMPT_H #include "tig/tig.h" #include "tig/keys.h" struct view; struct input; enum input_status { INPUT_OK, INPUT_SKIP, INPUT_DELETE, INPUT_STOP, INPUT_CANCEL }; struct menu_item { int hotkey; const char *text; void *data; }; typedef enum input_status (*input_handler)(struct input *input, struct key *key); struct input { input_handler handler; bool allow_empty; void *data; char buf[SIZEOF_STR]; char context[SIZEOF_STR]; }; enum input_status prompt_default_handler(struct input *input, struct key *key); char *read_prompt_incremental(const char *prompt, bool edit_mode, bool allow_empty, input_handler handler, void *data); char *read_prompt(const char *prompt); void prompt_init(void); bool prompt_yesno(const char *prompt); bool prompt_menu(const char *prompt, const struct menu_item *items, int *selected); enum request run_prompt_command(struct view *view, const char *argv[]); enum request open_prompt(struct view *view); enum request exec_run_request(struct view *view, struct run_request *req); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/refdb.h000066400000000000000000000045131332650737300157560ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_REFDB_H #define TIG_REFDB_H #include "tig/tig.h" #include "tig/types.h" #include "tig/util.h" struct argv_env; struct ref { struct ref *next; enum reference_type type; char id[SIZEOF_REV]; /* Commit SHA1 ID */ unsigned int valid:1; /* Is the ref still valid? */ char name[1]; /* Ref name; tag or head names are shortened. */ }; #define is_initial_commit() (!get_ref_head()) #define is_head_commit(rev) (!strcmp((rev), "HEAD") || (get_ref_head() && !strncmp(rev, get_ref_head()->id, SIZEOF_REV - 1))) #define ref_is_tag(ref) ((ref)->type == REFERENCE_TAG || (ref)->type == REFERENCE_LOCAL_TAG) #define ref_is_remote(ref) ((ref)->type == REFERENCE_REMOTE || (ref)->type == REFERENCE_TRACKED_REMOTE) #define foreach_ref_list(ref, id) for (ref = get_ref_list(id); ref; ref = ref->next) const struct ref *get_ref_head(); const struct ref *get_ref_list(const char *id); const struct ref *get_canonical_ref(const char *id); bool ref_list_contains_tag(const char *id); enum status_code load_refs(bool force); enum status_code add_ref(const char *id, char *name, const char *remote_name, const char *head); int ref_compare(const struct ref *ref1, const struct ref *ref2); void ref_update_env(struct argv_env *env, const struct ref *ref, bool recurse); bool refs_contain_tag(void); typedef bool (*ref_visitor_fn)(void *data, const struct ref *ref); void foreach_ref(ref_visitor_fn visitor, void *data); struct ref_format { const char *start; const char *end; }; const struct ref_format *get_ref_format(struct ref_format **formats, const struct ref *ref); enum status_code parse_ref_formats(struct ref_format ***formats, const char *argv[]); enum status_code format_ref_formats(struct ref_format **formats, char buf[], size_t bufsize); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/refs.h000066400000000000000000000015001332650737300156240ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_REFS_H #define TIG_REFS_H #include "tig/view.h" extern struct view refs_view; static inline void open_refs_view(struct view *prev, enum open_flags flags) { open_view(prev, &refs_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/repo.h000066400000000000000000000025521332650737300156420ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_REPO_H #define TIG_REPO_H #include "tig/tig.h" typedef char repo_ref[SIZEOF_REF]; typedef char repo_rev[SIZEOF_REV]; typedef char repo_str[SIZEOF_STR]; #define REPO_INFO(_) \ _(repo_ref, head) \ _(repo_rev, head_id) \ _(repo_ref, remote) \ _(repo_str, cdup) \ _(repo_str, prefix) \ _(repo_str, git_dir) \ _(repo_str, worktree) \ _(bool, is_inside_work_tree) #define REPO_INFO_FIELDS(type, name) type name; struct repo_info { REPO_INFO(REPO_INFO_FIELDS) }; extern struct repo_info repo; enum status_code load_repo_info(void); enum status_code load_repo_head(void); struct index_diff { int staged; int unstaged; int untracked; }; bool index_diff(struct index_diff *diff, bool untracked, bool count_all); bool update_index(void); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/request.h000066400000000000000000000076421332650737300163720ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_REQUEST_H #define TIG_REQUEST_H #include "tig/tig.h" /* * User requests */ #define VIEW_REQ(id, name) REQ_(VIEW_##id, "Show " #name " view") #define REQ_INFO \ REQ_GROUP("View switching") \ VIEW_INFO(VIEW_REQ), \ \ REQ_GROUP("View manipulation") \ REQ_(ENTER, "Enter and open selected line"), \ REQ_(BACK, "Go back to the previous view state"), \ REQ_(NEXT, "Move to next"), \ REQ_(PREVIOUS, "Move to previous"), \ REQ_(PARENT, "Move to parent"), \ REQ_(VIEW_NEXT, "Move focus to the next view"), \ REQ_(REFRESH, "Reload and refresh view"), \ REQ_(MAXIMIZE, "Maximize the current view"), \ REQ_(VIEW_CLOSE, "Close the current view"), \ REQ_(VIEW_CLOSE_NO_QUIT, "Close the current view without quitting"), \ REQ_(QUIT, "Close all views and quit"), \ \ REQ_GROUP("View-specific actions") \ REQ_(STATUS_UPDATE, "Stage/unstage chunk or file changes"), \ REQ_(STATUS_REVERT, "Revert chunk or file changes"), \ REQ_(STATUS_MERGE, "Merge file using external tool"), \ REQ_(STAGE_UPDATE_LINE, "Stage/unstage single line"), \ REQ_(STAGE_SPLIT_CHUNK, "Split current diff chunk"), \ \ REQ_GROUP("Cursor navigation") \ REQ_(MOVE_UP, "Move cursor one line up"), \ REQ_(MOVE_DOWN, "Move cursor one line down"), \ REQ_(MOVE_PAGE_DOWN, "Move cursor one page down"), \ REQ_(MOVE_PAGE_UP, "Move cursor half a page up"), \ REQ_(MOVE_HALF_PAGE_DOWN, "Move cursor half a page down"), \ REQ_(MOVE_HALF_PAGE_UP, "Move cursor one page up"), \ REQ_(MOVE_FIRST_LINE, "Move cursor to first line"), \ REQ_(MOVE_LAST_LINE, "Move cursor to last line"), \ REQ_(MOVE_NEXT_MERGE, "Move cursor to next merge commit"), \ REQ_(MOVE_PREV_MERGE, "Move cursor to previous merge commit"), \ \ REQ_GROUP("Scrolling") \ REQ_(SCROLL_LINE_UP, "Scroll one line up"), \ REQ_(SCROLL_LINE_DOWN, "Scroll one line down"), \ REQ_(SCROLL_PAGE_UP, "Scroll one page up"), \ REQ_(SCROLL_PAGE_DOWN, "Scroll one page down"), \ REQ_(SCROLL_FIRST_COL, "Scroll to the first line columns"), \ REQ_(SCROLL_LEFT, "Scroll two columns left"), \ REQ_(SCROLL_RIGHT, "Scroll two columns right"), \ \ REQ_GROUP("Searching") \ REQ_(SEARCH, "Search the view"), \ REQ_(SEARCH_BACK, "Search backwards in the view"), \ REQ_(FIND_NEXT, "Find next search match"), \ REQ_(FIND_PREV, "Find previous search match"), \ \ REQ_GROUP("Misc") \ REQ_(EDIT, "Open in editor"), \ REQ_(PROMPT, "Open the prompt"), \ REQ_(OPTIONS, "Open the options menu"), \ REQ_(SCREEN_REDRAW, "Redraw the screen"), \ REQ_(STOP_LOADING, "Stop all loading views"), \ REQ_(SHOW_VERSION, "Show version information"), \ REQ_(NONE, "Do nothing") /* User action requests. */ enum request { #define REQ_GROUP(help) #define REQ_(req, help) REQ_##req /* Offset all requests to avoid conflicts with ncurses getch values. */ REQ_UNKNOWN = KEY_MAX + 1, REQ_OFFSET, REQ_INFO, /* Internal requests. */ REQ_SCROLL_WHEEL_DOWN, REQ_SCROLL_WHEEL_UP, REQ_MOVE_WHEEL_DOWN, REQ_MOVE_WHEEL_UP, /* Start of the run request IDs */ REQ_RUN_REQUESTS #undef REQ_GROUP #undef REQ_ }; struct request_info { enum request request; const char *name; int namelen; const char *help; }; enum request get_request(const char *name); const char *get_request_name(enum request request); bool foreach_request(bool (*visitor)(void *data, const struct request_info *req_info, const char *group), void *data); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/search.h000066400000000000000000000016731332650737300161450ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_SEARCH_H #define TIG_SEARCH_H #include "tig/view.h" void reset_search(struct view *view); void search_view(struct view *view, enum request request); void find_next(struct view *view, enum request request); void find_merge(struct view *view, enum request request); bool grep_text(struct view *view, const char *text[]); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/stage.h000066400000000000000000000015121332650737300157730ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_STAGE_H #define TIG_STAGE_H #include "tig/view.h" struct status; extern struct view stage_view; void open_stage_view(struct view *prev, struct status *status, enum line_type type, enum open_flags flags); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/stash.h000066400000000000000000000015051332650737300160140ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_STASH_H #define TIG_STASH_H #include "tig/view.h" extern struct view stash_view; static inline void open_stash_view(struct view *prev, enum open_flags flags) { open_view(prev, &stash_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/status.h000066400000000000000000000030251332650737300162140ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_STATUS_H #define TIG_STATUS_H #include "tig/view.h" #include "tig/line.h" struct status { char status; struct { mode_t mode; char rev[SIZEOF_REV]; char name[SIZEOF_STR]; } old; struct { mode_t mode; char rev[SIZEOF_REV]; char name[SIZEOF_STR]; } new; }; bool status_update_file(struct status *status, enum line_type type); bool status_update_files(struct view *view, struct line *line); bool status_revert(struct status *status, enum line_type type, bool has_none); bool status_exists(struct view *view, struct status *status, enum line_type type); bool status_stage_info_(char *buf, size_t bufsize, enum line_type type, struct status *status); #define status_stage_info(buf, type, status) \ status_stage_info_(buf, sizeof(buf), type, status) extern struct view status_view; static inline void open_status_view(struct view *prev, enum open_flags flags) { open_view(prev, &status_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/string.h000066400000000000000000000076301332650737300162050ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_STRING_H #define TIG_STRING_H #include "tig/tig.h" #include "tig/string.h" /* * Strings. */ #define prefixcmp(str1, str2) \ strncmp(str1, str2, STRING_SIZE(str2)) bool string_isnumber(const char *str); bool iscommit(const char *str); #define get_graph_indent(str) strspn(str, "*|\\/_ ") static inline int ascii_toupper(int c) { if (c >= 'a' && c <= 'z') c &= ~0x20; return c; } static inline int ascii_tolower(int c) { if (c >= 'A' && c <= 'Z') c |= 0x20; return c; } int suffixcmp(const char *str, int slen, const char *suffix); void string_ncopy_do(char *dst, size_t dstlen, const char *src, size_t srclen); /* Shorthands for safely copying into a fixed buffer. */ #define FORMAT_BUFFER(buf, bufsize, fmt, retval, allow_truncate) \ do { \ va_list args; \ va_start(args, fmt); \ retval = vsnprintf(buf, bufsize, fmt, args); \ va_end(args); \ if (retval >= (bufsize) && allow_truncate) { \ (buf)[(bufsize) - 1] = 0; \ (buf)[(bufsize) - 2] = '.'; \ (buf)[(bufsize) - 3] = '.'; \ (buf)[(bufsize) - 4] = '.'; \ retval = (bufsize) - 1; \ } else if (retval < 0 || retval >= (bufsize)) { \ retval = -1; \ } \ } while (0) #define string_copy(dst, src) \ string_ncopy_do(dst, sizeof(dst), src, sizeof(src)) #define string_ncopy(dst, src, srclen) \ string_ncopy_do(dst, sizeof(dst), src, srclen) void string_copy_rev(char *dst, const char *src); void string_copy_rev_from_commit_line(char *dst, const char *src); #define string_rev_is_null(rev) !strncmp(rev, NULL_ID, STRING_SIZE(NULL_ID)) #define string_add(dst, from, src) \ string_ncopy_do(dst + (from), sizeof(dst) - (from), src, sizeof(src)) size_t string_expanded_length(const char *src, size_t srclen, size_t tabsize, size_t max_size); size_t string_expand(char *dst, size_t dstlen, const char *src, int srclen, int tabsize); char *string_trim_end(char *name); char *string_trim(char *name); bool PRINTF_LIKE(4, 5) string_nformat(char *buf, size_t bufsize, size_t *bufpos, const char *fmt, ...); #define string_format(buf, fmt, ...) \ string_nformat(buf, sizeof(buf), NULL, fmt, ## __VA_ARGS__) #define string_format_from(buf, from, fmt, ...) \ string_nformat(buf, sizeof(buf), from, fmt, ## __VA_ARGS__) int strcmp_null(const char *s1, const char *s2); int strcmp_numeric(const char *s1, const char *s2); /* * Unicode / UTF-8 handling */ int unicode_width(unsigned long c, int tab_size); unsigned char utf8_char_length(const char *string); /* Decode UTF-8 multi-byte representation into a Unicode character. */ unsigned long utf8_to_unicode(const char *string, size_t length); /* Calculates how much of string can be shown within the given maximum width * and sets trimmed parameter to non-zero value if all of string could not be * shown. If the reserve flag is TRUE, it will reserve at least one * trailing character, which can be useful when drawing a delimiter. * * Returns the number of bytes to output from string to satisfy max_width. */ size_t utf8_length(const char **start, int max_bytes, size_t skip, int *width, size_t max_width, int *trimmed, bool reserve, int tab_size); int utf8_width_of(const char *text, int max_bytes, int max_width); #define utf8_width_max(text, width) utf8_width_of(text, -1, width) #define utf8_width(text) utf8_width_max(text, -1) bool utf8_string_contains_uppercase(const char *text); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/tig.h000066400000000000000000000101031332650737300154470ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_H #define TIG_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "compat/compat.h" #ifndef TIG_VERSION #define TIG_VERSION "unknown-version" #endif #ifndef DEBUG #define NDEBUG #endif /* necessary on Snow Leopard to use WINDOW struct */ #ifdef NCURSES_OPAQUE #undef NCURSES_OPAQUE #endif #define NCURSES_OPAQUE 0 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_EXECINFO_H #include #endif #ifdef HAVE_PATHS_H #include #endif /* ncurses(3): Must be defined to have extended wide-character functions. */ #define _XOPEN_SOURCE_EXTENDED 1 #if defined HAVE_NCURSESW_CURSES_H # include #elif defined HAVE_NCURSESW_H # include #elif defined HAVE_NCURSES_CURSES_H # include #elif defined HAVE_NCURSES_H # include #elif defined HAVE_CURSES_H # include #else #ifdef WARN_MISSING_CURSES_CONFIGURATION # warning SysV or X/Open-compatible Curses installation is required. # warning Will assume Curses is found in default include and library path. # warning To fix any build issues please use autotools to configure Curses. # warning See INSTALL.adoc file for instructions. #endif # include #endif #ifdef TRUE #undef TRUE #endif #ifdef FALSE #undef FALSE #endif #ifndef newscr /* `newscr` is a ncurses-ism, and doesn't exist in netbsd-curses. (#790) */ #define newscr curscr #endif #if __GNUC__ >= 3 #define TIG_NORETURN __attribute__((__noreturn__)) #define PRINTF_LIKE(fmt, args) __attribute__((format (printf, fmt, args))) #else #define TIG_NORETURN #define PRINTF_LIKE(fmt, args) #endif #include "tig/string.h" #define ABS(x) ((x) >= 0 ? (x) : -(x)) #define MIN(x, y) ((x) < (y) ? (x) : (y)) #define MAX(x, y) ((x) > (y) ? (x) : (y)) #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #define STRING_SIZE(x) (sizeof(x) - 1) #define SIZEOF_STR 1024 /* Default string size. */ #define SIZEOF_MED_STR 8192 /* Medium string size. */ #define SIZEOF_REF 256 /* Size of symbolic or SHA1 ID. */ #define SIZEOF_REV 41 /* Holds a SHA-1 and an ending NUL. */ /* This color name can be used to refer to the default term colors. */ #define COLOR_DEFAULT (-1) #define ICONV_NONE ((iconv_t) -1) #ifndef ICONV_CONST #define ICONV_CONST /* nothing */ #endif #define ICONV_TRANSLIT "//TRANSLIT" #define MIN_VIEW_HEIGHT 4 #define MIN_VIEW_WIDTH 4 #define VSPLIT_SCALE 0.5 #define NULL_ID "0000000000000000000000000000000000000000" #define S_ISGITLINK(mode) (((mode) & S_IFMT) == 0160000) /* Some ASCII-shorthands fitted into the ncurses namespace. */ #define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */ #define KEY_TAB '\t' #define KEY_RETURN '\r' #define KEY_ESC 27 void TIG_NORETURN usage(const char *message); /* * Global view definition. */ #define VIEW_INFO(_) \ _(MAIN, main), \ _(DIFF, diff), \ _(LOG, log), \ _(TREE, tree), \ _(BLOB, blob), \ _(BLAME, blame), \ _(REFS, refs), \ _(STATUS, status), \ _(STAGE, stage), \ _(STASH, stash), \ _(GREP, grep), \ _(PAGER, pager), \ _(HELP, help) #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/tree.h000066400000000000000000000016171332650737300156350ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_TREE_H #define TIG_TREE_H #include "tig/view.h" void open_blob_editor(const char *id, const char *name, unsigned int lineno); extern struct view tree_view; static inline void open_tree_view(struct view *prev, enum open_flags flags) { open_view(prev, &tree_view, flags); } #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/types.h000066400000000000000000000116411332650737300160400ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_TYPES_H #define TIG_TYPES_H #include "tig/tig.h" /* * Enumerations */ struct enum_map_entry { const char *name; int namelen; int value; }; struct enum_map { const struct enum_map_entry *entries; const int size; }; #define string_enum_sep(x) ((x) == '-' || (x) == '_') int string_enum_compare(const char *str1, const char *str2, int len); #define enum_equals(entry, str, len) \ ((entry).namelen == (len) && !string_enum_compare((entry).name, str, len)) #define enum_equals_static(str, name, namelen) \ (namelen == STRING_SIZE(str) && !string_enum_compare(str, name, namelen)) #define enum_equals_prefix(entry, name_, namelen_) \ ((namelen_) > (entry).namelen && \ string_enum_sep((name_)[(entry).namelen]) && \ enum_equals(entry, name_, (entry).namelen)) const char *enum_name(const char *name); bool enum_name_copy(char buf[], size_t bufsize, const char *name); bool enum_name_prefixed(char buf[], size_t bufsize, const char *prefix, const char *name); const struct enum_map *find_enum_map(const char *type); bool map_enum_do(const struct enum_map_entry *map, size_t map_size, int *value, const char *name); #define map_enum(attr, map, name) \ map_enum_do(map, ARRAY_SIZE(map), attr, name) #define ENUM_MAP_ENTRY(name, value) { name, STRING_SIZE(name), value } #define ENUM_SYM_MACRO(prefix, name) prefix##_##name #define ENUM_MAP_MACRO(prefix, name) ENUM_MAP_ENTRY(#name, ENUM_SYM_MACRO(prefix, name)) #define DEFINE_ENUM(name, info) \ enum name { info(ENUM_SYM_MACRO) }; \ extern const struct enum_map name##_map[]; #define DEFINE_ENUM_MAP(name, info) \ const struct enum_map_entry name##_map_entries[] = { info(ENUM_MAP_MACRO) }; \ const struct enum_map name##_map[] = { { name##_map_entries, ARRAY_SIZE(name##_map_entries) } } #define VERTICAL_SPLIT_ENUM(_) \ _(VERTICAL_SPLIT, HORIZONTAL), \ _(VERTICAL_SPLIT, VERTICAL), \ _(VERTICAL_SPLIT, AUTO) #define GRAPHIC_ENUM(_) \ _(GRAPHIC, ASCII), \ _(GRAPHIC, DEFAULT), \ _(GRAPHIC, UTF_8) #define GRAPH_DISPLAY_ENUM(_) \ _(GRAPH_DISPLAY, NO), \ _(GRAPH_DISPLAY, V2), \ _(GRAPH_DISPLAY, V1) #define DATE_ENUM(_) \ _(DATE, NO), \ _(DATE, DEFAULT), \ _(DATE, RELATIVE), \ _(DATE, RELATIVE_COMPACT), \ _(DATE, CUSTOM) #define FILE_SIZE_ENUM(_) \ _(FILE_SIZE, NO), \ _(FILE_SIZE, DEFAULT), \ _(FILE_SIZE, UNITS) #define AUTHOR_ENUM(_) \ _(AUTHOR, NO), \ _(AUTHOR, FULL), \ _(AUTHOR, ABBREVIATED), \ _(AUTHOR, EMAIL), \ _(AUTHOR, EMAIL_USER) #define FILENAME_ENUM(_) \ _(FILENAME, NO), \ _(FILENAME, AUTO), \ _(FILENAME, ALWAYS) #define IGNORE_SPACE_ENUM(_) \ _(IGNORE_SPACE, NO), \ _(IGNORE_SPACE, ALL), \ _(IGNORE_SPACE, SOME), \ _(IGNORE_SPACE, AT_EOL) #define IGNORE_CASE_ENUM(_) \ _(IGNORE_CASE, NO), \ _(IGNORE_CASE, YES), \ _(IGNORE_CASE, SMART_CASE) #define COMMIT_ORDER_ENUM(_) \ _(COMMIT_ORDER, AUTO), \ _(COMMIT_ORDER, DEFAULT), \ _(COMMIT_ORDER, TOPO), \ _(COMMIT_ORDER, DATE), \ _(COMMIT_ORDER, AUTHOR_DATE), \ _(COMMIT_ORDER, REVERSE) #define VIEW_COLUMN_ENUM(_) \ _(VIEW_COLUMN, AUTHOR), \ _(VIEW_COLUMN, COMMIT_TITLE), \ _(VIEW_COLUMN, DATE), \ _(VIEW_COLUMN, FILE_NAME), \ _(VIEW_COLUMN, FILE_SIZE), \ _(VIEW_COLUMN, ID), \ _(VIEW_COLUMN, LINE_NUMBER), \ _(VIEW_COLUMN, MODE), \ _(VIEW_COLUMN, REF), \ _(VIEW_COLUMN, SECTION), \ _(VIEW_COLUMN, STATUS), \ _(VIEW_COLUMN, TEXT) #define REFERENCE_ENUM(_) \ _(REFERENCE, HEAD), \ _(REFERENCE, BRANCH), \ _(REFERENCE, TRACKED_REMOTE), \ _(REFERENCE, REMOTE), \ _(REFERENCE, TAG), \ _(REFERENCE, LOCAL_TAG), \ _(REFERENCE, REPLACE) #define STATUS_LABEL_ENUM(_) \ _(STATUS_LABEL, NO), \ _(STATUS_LABEL, SHORT), \ _(STATUS_LABEL, LONG) #define REFRESH_MODE_ENUM(_) \ _(REFRESH_MODE, MANUAL), \ _(REFRESH_MODE, AUTO), \ _(REFRESH_MODE, AFTER_COMMAND), \ _(REFRESH_MODE, PERIODIC), #define ENUM_INFO(_) \ _(author, AUTHOR_ENUM) \ _(commit_order, COMMIT_ORDER_ENUM) \ _(date, DATE_ENUM) \ _(file_size, FILE_SIZE_ENUM) \ _(filename, FILENAME_ENUM) \ _(graphic, GRAPHIC_ENUM) \ _(graph_display, GRAPH_DISPLAY_ENUM) \ _(ignore_case, IGNORE_CASE_ENUM) \ _(ignore_space, IGNORE_SPACE_ENUM) \ _(vertical_split, VERTICAL_SPLIT_ENUM) \ _(view_column_type, VIEW_COLUMN_ENUM) \ _(reference_type, REFERENCE_ENUM) \ _(refresh_mode, REFRESH_MODE_ENUM) \ _(status_label, STATUS_LABEL_ENUM) \ #define DEFINE_ENUMS(name, macro) DEFINE_ENUM(name, macro) ENUM_INFO(DEFINE_ENUMS) #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/ui.h000066400000000000000000000013031332650737300153030ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_UI_H #define TIG_UI_H const char *open_file_finder(const char *commit); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/util.h000066400000000000000000000060031332650737300156450ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_UTIL_H #define TIG_UTIL_H #include "tig/tig.h" #include "tig/types.h" /* * Error handling. */ #define STATUS_CODE_INFO(_) \ _(CUSTOM_MESSAGE, NULL), \ _(NO_OPTION_VALUE, "No option value"), \ _(OUT_OF_MEMORY, "Out of memory"), \ _(FILE_DOES_NOT_EXIST, "File does not exist"), \ _(UNMATCHED_QUOTATION, "Unmatched quotation"), \ enum status_code { SUCCESS, #define STATUS_CODE_ENUM(name, msg) ERROR_ ## name STATUS_CODE_INFO(STATUS_CODE_ENUM) }; const char *get_status_message(enum status_code code); enum status_code error(const char *fmt, ...) PRINTF_LIKE(1, 2); enum status_code success(const char *fmt, ...) PRINTF_LIKE(1, 2); typedef void (*die_fn)(void); extern die_fn die_callback; void TIG_NORETURN die(const char *err, ...) PRINTF_LIKE(1, 2); void warn(const char *msg, ...) PRINTF_LIKE(1, 2); static inline int count_digits(unsigned long i) { int digits; if (!i) return 1; for (digits = 0; i; digits++) i /= 10; return digits; } static inline int apply_step(double step, int value) { if (step >= 1) return (int) step; value *= step; return value ? value : 1; } /* * Git data formatters. */ struct time { time_t sec; int tz; }; struct ident { const char *key; const char *name; const char *email; }; extern const struct ident unknown_ident; int time_now(struct timeval *timeval, struct timezone *tz); int timecmp(const struct time *t1, const struct time *t2); int ident_compare(const struct ident *i1, const struct ident *i2); const char *mkdate(const struct time *time, enum date date, bool local, const char *custom_format); const char *mkfilesize(unsigned long size, enum file_size format); const char *mkauthor(const struct ident *ident, int cols, enum author author); const char *mkmode(mode_t mode); const char *mkstatus(const char status, enum status_label label); #define author_trim(cols) (cols == 0 || cols > 10) /* * Allocation helper. */ void *chunk_allocator(void *mem, size_t type_size, size_t chunk_size, size_t size, size_t increase); #define DEFINE_ALLOCATOR(name, type, chunk_size) \ static type * \ name(type **mem, size_t size, size_t increase) \ { \ type *tmp; \ \ assert(mem); \ if (mem == NULL) \ return NULL; \ \ tmp = chunk_allocator(*mem, sizeof(type), chunk_size, size, increase); \ if (tmp) \ *mem = tmp; \ return tmp; \ } void sigsegv_handler(int sig); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/view.h000066400000000000000000000310431332650737300156440ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_VIEW_H #define TIG_VIEW_H #include "tig/tig.h" #include "tig/types.h" #include "tig/argv.h" #include "tig/watch.h" #include "tig/io.h" #include "tig/line.h" #include "tig/keys.h" #include "tig/options.h" struct view_ops; struct box_cell { enum line_type type; size_t length; }; struct box { const char *text; size_t cells; struct box_cell cell[1]; }; struct line { enum line_type type; unsigned int lineno:24; /* State flags */ unsigned int selected:1; unsigned int dirty:1; unsigned int cleareol:1; unsigned int wrapped:1; unsigned int commit_title:1; unsigned int no_commit_refs:1; unsigned int graph_indent:1; unsigned int search_result:1; void *data; /* User data */ }; enum view_flag { VIEW_NO_FLAGS = 0, VIEW_CUSTOM_STATUS = 1 << 1, VIEW_ADD_DESCRIBE_REF = 1 << 2, VIEW_ADD_PAGER_REFS = 1 << 3, VIEW_OPEN_DIFF = 1 << 4, VIEW_NO_REF = 1 << 5, VIEW_NO_GIT_DIR = 1 << 6, VIEW_DIFF_LIKE = 1 << 7, VIEW_BLAME_LIKE = 1 << 8, VIEW_SEND_CHILD_ENTER = 1 << 9, VIEW_FILE_FILTER = 1 << 10, VIEW_LOG_LIKE = 1 << 11, VIEW_STATUS_LIKE = 1 << 12, VIEW_REFRESH = 1 << 13, VIEW_GREP_LIKE = 1 << 14, VIEW_SORTABLE = 1 << 15, VIEW_FLEX_WIDTH = 1 << 16, VIEW_RESET_DISPLAY = 1 << 31, }; #define view_has_flags(view, flag) ((view)->ops->flags & (flag)) #define view_can_refresh(view) \ (view_has_flags(view, VIEW_REFRESH) && !(view)->unrefreshable) struct position { unsigned long offset; /* Offset of the window top */ unsigned long col; /* Offset from the window side. */ unsigned long lineno; /* Current line number */ }; struct sort_state { struct view_column *current; bool reverse; }; struct view_column { struct view_column *next; enum view_column_type type; int width; union view_column_options prev_opt; union view_column_options opt; bool hidden; }; struct view { const char *name; /* View name */ struct view_ops *ops; /* View operations */ struct argv_env *env; /* View variables. */ char ref[SIZEOF_REF]; /* Hovered commit reference */ char vid[SIZEOF_REF]; /* View ID. Set to id member when updating. */ int height, width; /* The width and height of the main window */ WINDOW *win; /* The main window */ WINDOW *title; /* The title window */ struct keymap *keymap; /* What keymap does this view have */ struct sort_state sort; /* Sorting information. */ /* Navigation */ struct position pos; /* Current position. */ struct position prev_pos; /* Previous position. */ /* View columns rendering state */ struct view_column *columns; /* Searching */ char grep[SIZEOF_STR]; /* Search string */ regex_t *regex; /* Pre-compiled regexp */ unsigned int *matched_line; size_t matched_lines; /* If non-NULL, points to the view that opened this view. If this view * is closed tig will switch back to the parent view. */ struct view *parent; struct view *prev; /* Buffering */ size_t lines; /* Total number of lines */ struct line *line; /* Line index */ /* Number of lines with custom status, not to be counted in the * view title. */ unsigned int custom_lines; /* Drawing */ struct line *curline; /* Line currently being drawn. */ enum line_type curtype; /* Attribute currently used for drawing. */ unsigned long col; /* Column when drawing. */ bool has_scrolled; /* View was scrolled. */ bool force_redraw; /* Whether to force a redraw after reading. */ /* Loading */ const char **argv; /* Shell command arguments. */ const char *dir; /* Directory from which to execute. */ struct io io; struct io *pipe; time_t start_time; time_t update_secs; struct encoding *encoding; bool unrefreshable; struct watch watch; /* Private data */ void *private; }; #define DEFINE_VIEW(name) struct view name ##_view = { #name, &name##_ops, &argv_env } enum open_flags { OPEN_DEFAULT = 0, /* Use default view switching. */ OPEN_STDIN = 1, /* Open in pager mode. */ OPEN_FORWARD_STDIN = 2, /* Forward stdin to I/O process. */ OPEN_SPLIT = 4, /* Split current view. */ OPEN_RELOAD = 8, /* Reload view even if it is the current. */ OPEN_REFRESH = 16, /* Refresh view using previous command. */ OPEN_PREPARED = 32, /* Open already prepared command. */ OPEN_EXTRA = 64, /* Open extra data from command. */ OPEN_WITH_STDERR = 128, /* Redirect stderr to stdin. */ OPEN_PAGER_MODE = OPEN_STDIN | OPEN_FORWARD_STDIN, OPEN_ALWAYS_LOAD = OPEN_RELOAD | OPEN_REFRESH | OPEN_PREPARED | OPEN_EXTRA | OPEN_PAGER_MODE, }; #define open_in_pager_mode(flags) ((flags) & OPEN_PAGER_MODE) #define open_from_stdin(flags) ((flags) & OPEN_STDIN) struct view_column_data { struct view_column *section; const struct ident *author; const char *commit_title; const struct time *date; const char *file_name; const unsigned long *file_size; const struct graph *graph; const struct graph_canvas *graph_canvas; const char *id; const unsigned long *line_number; const mode_t *mode; const struct ref *ref; const char *reflog; const struct ref *refs; const char *status; const char *text; const struct box *box; }; #define view_column_bit(id) (1 << VIEW_COLUMN_##id) #define view_has_column(view, id) ((view)->ops->column_bits & view_column_bit(id)) #define view_column_name(id) enum_name(view_column_type_map->entries[id].name) struct view_ops { /* What type of content being displayed. Used in the title bar. */ const char *type; /* Points to either of ref_{head,commit,blob} */ const char *id; /* Flags to control the view behavior. */ enum view_flag flags; /* Size of private data. */ size_t private_size; /* Open and reads in all view content. */ enum status_code (*open)(struct view *view, enum open_flags flags); /* Read one line; updates view->line. */ bool (*read)(struct view *view, struct buffer *buf, bool force_stop); /* Draw one line; @lineno must be < view->height. */ bool (*draw)(struct view *view, struct line *line, unsigned int lineno); /* Depending on view handle a special requests. */ enum request (*request)(struct view *view, enum request request, struct line *line); /* Search for regexp in a line. */ bool (*grep)(struct view *view, struct line *line); /* Select line */ void (*select)(struct view *view, struct line *line); /* Release resources when reloading the view */ void (*done)(struct view *view); /* Supported view columns. */ unsigned long column_bits; /* Extract line information. */ bool (*get_column_data)(struct view *view, const struct line *line, struct view_column_data *column_data); }; /* * Global view state. */ struct view *get_view(int index); #define foreach_view(view, i) \ for (i = 0; (view = get_view(i)); i++) #define view_has_line(view, line_) \ ((view)->line <= (line_) && (line_) < (view)->line + (view)->lines) /* * Navigation */ bool goto_view_line(struct view *view, unsigned long offset, unsigned long lineno); void select_view_line(struct view *view, unsigned long lineno); void do_scroll_view(struct view *view, int lines); void scroll_view(struct view *view, enum request request); void move_view(struct view *view, enum request request); void goto_id(struct view *view, const char *expression, bool from_start, bool save_search); /* * View history */ struct view_state { struct view_state *prev; /* Entry below this in the stack */ struct position position; /* View position to restore */ void *data; /* View specific state */ }; struct view_history { size_t state_alloc; struct view_state *stack; struct position position; }; struct view_state *push_view_history_state(struct view_history *history, struct position *position, void *data); bool pop_view_history_state(struct view_history *history, struct position *position, void *data); void reset_view_history(struct view_history *history); /* * View opening */ void split_view(struct view *prev, struct view *view); void maximize_view(struct view *view, bool redraw); void load_view(struct view *view, struct view *prev, enum open_flags flags); #define refresh_view(view) load_view(view, NULL, OPEN_REFRESH) #define reload_view(view) load_view(view, NULL, OPEN_RELOAD) void open_view(struct view *prev, struct view *view, enum open_flags flags); void open_argv(struct view *prev, struct view *view, const char *argv[], const char *dir, enum open_flags flags); bool view_exec(struct view *view, enum open_flags flags); /* * Various utilities. */ #define get_sort_field(view) ((view)->sort.current->type) void resort_view(struct view *view, bool renumber); void sort_view(struct view *view, bool change_field); struct view_column *get_view_column(struct view *view, enum view_column_type type); bool view_column_grep(struct view *view, struct line *line); bool view_column_info_changed(struct view *view, bool update); void view_column_reset(struct view *view); bool view_column_info_update(struct view *view, struct line *line); enum status_code parse_view_config(struct view_column **column, const char *view_name, const char *argv[]); enum status_code parse_view_column_config(const char *view_name, enum view_column_type type, const char *option_name, const char *argv[]); enum status_code format_view_config(struct view_column *column, char buf[], size_t bufsize); bool view_has_wrapped_lines(struct view *view); struct line * find_line_by_type(struct view *view, struct line *line, enum line_type type, int direction); #define find_prev_line_by_type(view, line, type) \ find_line_by_type(view, line, type, -1) #define find_next_line_by_type(view, line, type) \ find_line_by_type(view, line, type, 1) #define is_initial_view(view) (!(view)->prev && !(view)->argv) #define failed_to_load_initial_view(view) (!(view)->prev && !(view)->lines) #define get_view_color(view, type) get_line_color((view)->keymap->name, type) #define get_view_attr(view, type) get_line_attr((view)->keymap->name, type) /* * Incremental updating */ static inline bool check_position(struct position *pos) { return pos->lineno || pos->col || pos->offset; } static inline void clear_position(struct position *pos) { memset(pos, 0, sizeof(*pos)); } void reset_view(struct view *view); enum status_code begin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags); void end_update(struct view *view, bool force); bool update_view(struct view *view); void update_view_title(struct view *view); /* * Line utilities. */ static inline const char * box_text(const struct line *line) { const struct box *box = line->data; return box->text; } static inline size_t box_text_length(const struct box *box) { size_t i, length = 0; for (i = 0; i < box->cells; i++) length += box->cell[i].length; return length; } static inline size_t box_sizeof(const struct box *box, size_t extra_cells, size_t extra_textlen) { size_t textlen = (box ? box_text_length(box) : 0) + extra_textlen; size_t cells = (box ? box->cells : 0) + extra_cells; size_t cells_size = cells > 1 ? sizeof(box->cell) * (cells - 1) : 0; return sizeof(*box) + cells_size + textlen + 1; } void box_text_copy(struct box *box, size_t cells, const char *src, size_t srclen); struct line *add_line_at(struct view *view, unsigned long pos, const void *data, enum line_type type, size_t data_size, bool custom); struct line *add_line(struct view *view, const void *data, enum line_type type, size_t data_size, bool custom); struct line *add_line_alloc_(struct view *view, void **ptr, enum line_type type, size_t data_size, bool custom); #define add_line_alloc(view, data_ptr, type, extra_size, custom) \ add_line_alloc_(view, (void **) data_ptr, type, sizeof(**data_ptr) + extra_size, custom) struct line *add_line_nodata(struct view *view, enum line_type type); struct line *add_line_text(struct view *view, const char *text, enum line_type type); struct line *add_line_text_at(struct view *view, unsigned long pos, const char *text, enum line_type type, size_t cells); struct line *add_line_text_at_(struct view *view, unsigned long pos, const char *text, size_t textlen, enum line_type type, size_t cells, bool custom); struct line * PRINTF_LIKE(3, 4) add_line_format(struct view *view, enum line_type type, const char *fmt, ...); bool append_line_format(struct view *view, struct line *line, const char *fmt, ...); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/include/tig/watch.h000066400000000000000000000034261332650737300160040ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef TIG_WATCH_H #define TIG_WATCH_H #include "tig/tig.h" #include "tig/types.h" enum watch_event { WATCH_EVENT_SWITCH_VIEW, WATCH_EVENT_AFTER_COMMAND, WATCH_EVENT_LOAD, WATCH_EVENT_PERIODIC, }; enum watch_trigger { WATCH_NONE = 0, WATCH_INDEX_STAGED_YES = 1 << 0, WATCH_INDEX_STAGED_NO = 1 << 1, WATCH_INDEX_UNSTAGED_YES = 1 << 2, WATCH_INDEX_UNSTAGED_NO = 1 << 3, WATCH_HEAD = 1 << 4, WATCH_STASH = 1 << 5, WATCH_REFS = 1 << 6, WATCH_INDEX_STAGED = WATCH_INDEX_STAGED_YES | WATCH_INDEX_STAGED_NO, WATCH_INDEX_UNSTAGED = WATCH_INDEX_UNSTAGED_YES | WATCH_INDEX_UNSTAGED_NO, WATCH_INDEX = WATCH_INDEX_STAGED | WATCH_INDEX_UNSTAGED, }; struct watch { struct watch *next; enum watch_trigger triggers; enum watch_trigger changed; enum watch_trigger state; }; void watch_register(struct watch *watch, enum watch_trigger triggers); void watch_unregister(struct watch *watch); bool watch_dirty(struct watch *watch); enum watch_trigger watch_update(enum watch_event event); enum watch_trigger watch_update_single(struct watch *watch, enum watch_event event); void watch_apply(struct watch *source, enum watch_trigger changed); int watch_periodic(int interval); #endif /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/manual.html000066400000000000000000001510271332650737300144630ustar00rootroot00000000000000 The tig Manual

This is the manual for tig, the ncurses-based text-mode interface for git. Tig allows you to browse changes in a git repository and can additionally act as a pager for output of various git commands. When used as a pager, it will display input from stdin and colorize it.

When browsing repositories, tig uses the underlying git commands to present the user with various views, such as summarized commit log and showing the commit with the log message, diffstat, and the diff.

Table of Contents

1. Calling Conventions

1.1. Pager Mode

If stdin is a pipe, any log or diff options will be ignored and the pager view will be opened loading data from stdin. The pager mode can be used for colorizing output from various git commands.

Example on how to colorize the output of git-show(1):

$ git show | tig

1.2. Git Command Options

All git command options specified on the command line will be passed to the given command and all will be shell quoted before they are passed to the shell.

Note
If you specify options for the main view, you should not use the --pretty option as this option will be set automatically to the format expected by the main view.

Example on how to view a commit and show both author and committer information:

$ tig show --pretty=fuller

See the section on specifying revisions for an introduction to revision options supported by the git commands. For details on specific git command options, refer to the man page of the command in question.

2. The Viewer

The display consists of a status window on the last line of the screen and one or more views. The default is to only show one view at a time but it is possible to split both the main and log view to also show the commit diff.

If you are in the log view and press Enter when the current line is a commit line, such as:

commit 4d55caff4cc89335192f3e566004b4ceef572521

You will split the view so that the log view is displayed in the top window and the diff view in the bottom window. You can switch between the two views by pressing Tab. To maximize the log view again, simply press l.

2.1. Views

Various views of a repository are presented. Each view is based on output from an external command, most often git log, git diff, or git show.

The main view

Is the default view, and it shows a one line summary of each commit in the chosen list of revisions. The summary includes commit date, author, and the first line of the log message. Additionally, any repository references, such as tags, will be shown.

The log view

Presents a more rich view of the revision log showing the whole log message and the diffstat.

The diff view

Shows either the diff of the current working tree, that is, what has changed since the last commit, or the commit diff complete with log message, diffstat and diff.

The tree view

Lists directory trees associated with the current revision allowing subdirectories to be descended or ascended and file blobs to be viewed.

The blob view

Displays the file content or "blob" of data associated with a file name.

The blame view

Displays the file content annotated or blamed by commits.

The branch view

Displays the branches in the repository.

The status view

Displays status of files in the working tree and allows changes to be staged/unstaged as well as adding of untracked files.

The stage view

Displays diff changes for staged or unstaged files being tracked or file content of untracked files.

The stash view

Displays the list of stashes in the repository.

The pager view

Is used for displaying both input from stdin and output from git commands entered in the internal prompt.

The help view

Displays a quick reference of key bindings.

2.2. Browsing State and User-defined Commands

The viewer keeps track of both what head and commit ID you are currently viewing. The commit ID will follow the cursor line and change every time you highlight a different commit. Whenever you reopen the diff view it will be reloaded, if the commit ID changed. The head ID is used when opening the main and log view to indicate from what revision to show history.

Some of the commands used or provided by tig can be configured. This goes for some of the environment variables as well as the external commands. These user-defined commands can use arguments that refer to the current browsing state by using one of the following variables.

Table 1. Browsing state variables

%(head)

The currently viewed head ID. Defaults to HEAD

%(commit)

The currently selected commit ID.

%(blob)

The currently selected blob ID.

%(branch)

The currently selected branch name.

%(stash)

The currently selected stash name.

%(directory)

The current directory path in the tree view; empty for the root directory.

%(file)

The currently selected file.

%(ref)

The reference given to blame or HEAD if undefined.

%(revargs)

The revision arguments passed on the command line.

%(fileargs)

The file arguments passed on the command line.

%(diffargs)

The diff options passed on the command line.

%(prompt)

Prompt for the argument value.

Example user-defined commands:

  • Allow to amend the last commit:

    bind generic + !git commit --amend
  • Copy commit ID to clipboard:

    bind generic 9 !@sh -c "echo -n %(commit) | xclip -selection c"
  • Add/edit notes for the current commit used during a review:

    bind generic T !git notes edit %(commit)
  • Enter git’s interactive add for fine-grained staging of file content:

    bind generic I !git add -i %(file)
  • Rebase current branch on top of the selected branch:

    bind branch 3 !git rebase -i %(branch)

2.3. Title Windows

Each view has a title window which shows the name of the view, current commit ID if available, and where the view is positioned:

[main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61 (1%)

By default, the title of the current view is highlighted using bold font. For long loading views (taking over 3 seconds) the time since loading started will be appended:

[main] 77d9e40fbcea3238015aea403e06f61542df9a31 - commit 1 of 779 (0%) 5s

3. Environment Variables

Several options related to the interface with git can be configured via environment options.

3.1. Configuration Files

Upon startup, tig first reads the system wide configuration file ({sysconfdir}/tigrc by default) and then proceeds to read the user’s configuration file (~/.tigrc by default). The paths to either of these files can be overridden through the following environment variables:

TIGRC_USER

Path of the user configuration file.

TIGRC_SYSTEM

Path of the system wide configuration file.

3.2. Repository References

Commits that are referenced by tags and branch heads will be marked by the reference name surrounded by [ and ]:

2006-03-26 19:42 Petr Baudis         | [cogito-0.17.1] Cogito 0.17.1

If you want to limit what branches are shown, say only show branches named master or those which start with the jf/ prefix, you can do it by setting the following variable:

$ TIG_LS_REMOTE="git ls-remote . master jf/*" tig

Or set the variable permanently in your environment.

TIG_LS_REMOTE

Set command for retrieving all repository references. The command should output data in the same format as git-ls-remote(1). Defaults to:

git ls-remote .

3.3. Diff options

It is possible to alter how diffs are shown by the diff view. If for example you prefer to have commit and author dates shown as relative dates, use:

$ TIG_DIFF_OPTS="--relative-date" tig

Or set the variable permanently in your environment.

4. Default Keybindings

Below the default key bindings are shown.

4.1. View Switching

Key Action

m

Switch to main view.

d

Switch to diff view.

l

Switch to log view.

p

Switch to pager view.

t

Switch to (directory) tree view.

f

Switch to (file) blob view.

B

Switch to blame view.

H

Switch to branch view.

y

Switch to stash view.

h

Switch to help view

S

Switch to status view

c

Switch to stage view

4.2. View Manipulation

Key Action

q

Close view, if multiple views are open it will jump back to the previous view in the view stack. If it is the last open view it will quit. Use Q to quit all views at once.

Enter

This key is "context sensitive" depending on what view you are currently in. When in log view on a commit line or in the main view, split the view and show the commit diff. In the diff view pressing Enter will simply scroll the view one line down.

Tab

Switch to next view.

R

Reload and refresh the current view.

O

Maximize the current view to fill the whole display.

Up

This key is "context sensitive" and will move the cursor one line up. However, if you opened a diff view from the main view (split- or full-screen) it will change the cursor to point to the previous commit in the main view and update the diff view to display it.

Down

Similar to Up but will move down.

,

Move to parent. In the tree view, this means switch to the parent directory. In the blame view it will load blame for the parent commit. For merges the parent is queried.

4.3. View Specific Actions

Key Action

u

Update status of file. In the status view, this allows you to add an untracked file or stage changes to a file for next commit (similar to running git-add <filename>). In the stage view, when pressing this on a diff chunk line stages only that chunk for next commit, when not on a diff chunk line all changes in the displayed diff are staged.

M

Resolve unmerged file by launching git-mergetool(1). Note, to work correctly this might require some initial configuration of your preferred merge tool. See the manpage of git-mergetool(1).

!

Checkout file with unstaged changes. This will reset the file to contain the content it had at last commit.

1

Stage single diff line.

@

Move to next chunk in the stage view.

]

Increase the diff context.

[

Decrease the diff context.

4.4. Cursor Navigation

Key Action

k

Move cursor one line up.

j

Move cursor one line down.

PgUp,-,a

Move cursor one page up.

PgDown, Space

Move cursor one page down.

End

Jump to last line.

Home

Jump to first line.

4.5. Scrolling

Key Action

Insert

Scroll view one line up.

Delete

Scroll view one line down.

w

Scroll view one page up.

s

Scroll view one page down.

Left

Scroll view one column left.

Right

Scroll view one column right.

|

Scroll view to the first column.

4.6. Searching

Key Action

/

Search the view. Opens a prompt for entering search regexp to use.

?

Search backwards in the view. Also prompts for regexp.

n

Find next match for the current search regexp.

N

Find previous match for the current search regexp.

4.7. Misc

Key Action

Q

Quit.

r

Redraw screen.

z

Stop all background loading. This can be useful if you use tig in a repository with a long history without limiting the revision log.

v

Show version.

o

Open option menu

.

Toggle line numbers on/off.

D

Toggle date display on/off/short/relative/local.

A

Toggle author display on/off/abbreviated/email/email user name.

g

Toggle revision graph visualization on/off.

~

Toggle (line) graphics mode

F

Toggle reference display on/off (tag and branch names).

W

Toggle ignoring whitespace on/off for diffs

X

Toggle commit ID display on/off

%

Toggle file filtering in order to see the full diff instead of only the diff concerning the currently selected file.

$

Toggle highlighting of commit title overflow.

:

Open prompt. This allows you to specify what command to run.

e

Open file in editor.

4.8. Prompt

Key Action

:<number>

Jump to the specific line number, e.g. :80.

:<sha>

Jump to a specific commit, e.g. :2f12bcc.

:<x>

Execute the corresponding key binding, e.g. :q.

:!<command>

Execute a system command in a pager, e.g. :!git log -p.

:<action>

Execute a tig command, e.g. :edit.

4.9. External Commands

For more custom needs, external commands provide a way to easily execute a script or program. They are bound to keys and use information from the current browsing state, such as the current commit ID. Tig comes with the following built-in external commands:

Keymap Key Action

main

C

git cherry-pick %(commit)

status

C

git commit

generic

G

git gc

5. Revision Specification

This section describes various ways to specify what revisions to display or otherwise limit the view to. Tig does not itself parse the described revision options so refer to the relevant git man pages for further information. Relevant man pages besides git-log(1) are git-diff(1) and git-rev-list(1).

You can tune the interaction with git by making use of the options explained in this section. For example, by configuring the environment variable described in the section on diff options.

5.1. Limit by Path Name

If you are interested only in those revisions that made changes to a specific file (or even several files) list the files like this:

$ tig Makefile README

To avoid ambiguity with tig’s subcommands or repository references such as tag names, be sure to separate file names from other git options using "--". So if you have a file named status it will clash with the status subcommand, and thus you will have to use:

$ tig -- status

5.2. Limit by Date or Number

To speed up interaction with git, you can limit the amount of commits to show both for the log and main view. Either limit by date using e.g. --since=1.month or limit by the number of commits using -n400.

If you are only interested in changes that happened between two dates you can use:

$ tig --after="May 5th" --before="2006-05-16 15:44"
Note
If you want to avoid having to quote dates containing spaces you can use "." instead, e.g. --after=May.5th.

5.3. Limiting by Commit Ranges

Alternatively, commits can be limited to a specific range, such as "all commits between tag-1.0 and tag-2.0". For example:

$ tig tag-1.0..tag-2.0

This way of commit limiting makes it trivial to only browse the commits which haven’t been pushed to a remote branch. Assuming origin is your upstream remote branch, using:

$ tig origin..HEAD

will list what will be pushed to the remote branch. Optionally, the ending HEAD can be left out since it is implied.

5.4. Limiting by Reachability

Git interprets the range specifier "tag-1.0..tag-2.0" as "all commits reachable from tag-2.0 but not from tag-1.0". Where reachability refers to what commits are ancestors (or part of the history) of the branch or tagged revision in question.

If you prefer to specify which commit to preview in this way use the following:

$ tig tag-2.0 ^tag-1.0

You can think of ^ as a negation operator. Using this alternate syntax, it is possible to further prune commits by specifying multiple branch cut offs.

5.5. Combining Revisions Specification

Revision options can to some degree be combined, which makes it possible to say "show at most 20 commits from within the last month that changed files under the Documentation/ directory."

$ tig --since=1.month -n20 -- Documentation/

5.6. Examining All Repository References

In some cases, it can be useful to query changes across all references in a repository. An example is to ask "did any line of development in this repository change a particular file within the last week". This can be accomplished using:

$ tig --all --since=1.week -- Makefile

6. BUGS

Bugs and feature requests can be reported using the issue tracker at https://github.com/jonas/tig/issues or by mail to either the git mailing list or directly to the maintainer. Ensure that the word "tig" is in the subject. For other tig related questions please use Stack Overflow: http://stackoverflow.com/questions/tagged/tig.

7. Copyright

Copyright (c) 2006-2012 Jonas Fonseca <fonseca@diku.dk>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

8. See Also

Manpages:

Online resources:


tig-2.4.1/snap/000077500000000000000000000000001332650737300132535ustar00rootroot00000000000000tig-2.4.1/snap/snapcraft.yaml000066400000000000000000000010771332650737300161250ustar00rootroot00000000000000name: tig version: git summary: Text-mode interface for git description: | Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands. grade: devel # must be 'stable' to release into candidate/stable channels confinement: classic apps: tig: command: bin/tig parts: tig: source: . plugin: autotools build-packages: - pkg-config - libncursesw5-dev - libreadline-dev tig-2.4.1/src/000077500000000000000000000000001332650737300131015ustar00rootroot00000000000000tig-2.4.1/src/apps.c000066400000000000000000000067741332650737300142260ustar00rootroot00000000000000/* Copyright (c) 2006-2017 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/io.h" #include "tig/apps.h" /* * general */ static bool app_oneline_buf(char *buf, size_t bufsize, struct app_external *app, const char *dir) { struct io io; return io_run(&io, IO_RD, dir, app->env, app->argv) \ && io_read_buf(&io, buf, bufsize, false); } /* * git */ static bool app_git_exec_path(char *path, size_t path_len) { static char exec_path[SIZEOF_STR] = ""; struct app_external app = { { "git", "--exec-path", NULL }, { "GIT_CONFIG=/dev/null", NULL }, }; if (!*exec_path) app_oneline_buf(exec_path, sizeof(exec_path), &app, NULL); if (!*exec_path) return false; string_ncopy_do(path, path_len, exec_path, sizeof(exec_path)); return true; } /* * diff-highlight */ static bool app_diff_highlight_path_search(char *dest, size_t destlen, const char *query) { if (!query || !*query) return false; if (strchr(query, '/')) { /* can only be interpreted as a fully qualified path */ string_ncopy_do(dest, destlen, query, strlen(query)); return true; } const char *env_path = getenv("PATH"); char env_path_plus[SIZEOF_MED_STR]; char exec_path[SIZEOF_STR]; if (!env_path || !*env_path) env_path = _PATH_DEFPATH; if (app_git_exec_path(exec_path, sizeof(exec_path))) string_format(env_path_plus, "%s:%s/%s:%s/%s:%s/%s:%s/%s", env_path, exec_path, "../../share/git-core/contrib/diff-highlight", exec_path, "../share/git-core/contrib/diff-highlight", exec_path, "../../share/git/contrib/diff-highlight", exec_path, "../share/git/contrib/diff-highlight"); else string_ncopy(env_path_plus, env_path, strlen(env_path)); if (!path_search(dest, destlen, query, env_path_plus, X_OK) && !strcmp(query, "diff-highlight") && !path_search(dest, destlen, "diff-highlight.perl", env_path_plus, R_OK)) return false; return true; } struct app_external *app_diff_highlight_load(const char *query) { static struct app_external dhlt_app = { { NULL }, { "GIT_CONFIG=/dev/null", NULL } }; static bool did_search = false; static char dhlt_path[SIZEOF_STR]; static char perl_path[SIZEOF_STR]; static char perl_include[SIZEOF_STR]; if (!did_search && app_diff_highlight_path_search(dhlt_path, sizeof(dhlt_path), query) && *dhlt_path) { if (suffixcmp(dhlt_path, strlen(dhlt_path), "/diff-highlight.perl")) { dhlt_app.argv[0] = dhlt_path; dhlt_app.argv[1] = NULL; } else if (path_search(perl_path, sizeof(perl_path), "perl", getenv("PATH"), X_OK)) { /* if the package manager failed to "make install" within the contrib dir, rescue via */ /* perl -MDiffHighlight -I/path/containing /path/containing/diff-highlight.perl */ string_format(perl_include, "-I%s", dirname(dhlt_path)); dhlt_app.argv[0] = perl_path; dhlt_app.argv[1] = "-MDiffHighlight"; dhlt_app.argv[2] = perl_include; dhlt_app.argv[3] = dhlt_path; dhlt_app.argv[4] = NULL; } } did_search = true; return &dhlt_app; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/argv.c000066400000000000000000000313541332650737300142120ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/argv.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/prompt.h" static bool concat_argv(const char *argv[], char *buf, size_t buflen, const char *sep, bool quoted) { size_t bufpos, argc; for (bufpos = 0, argc = 0; argv[argc]; argc++) { const char *arg_sep = argc ? sep : ""; const char *arg = argv[argc]; if (quoted && arg[strcspn(arg, " \t\"")]) { if (!string_nformat(buf, buflen, &bufpos, "%s\"", arg_sep)) return false; while (*arg) { int pos = strcspn(arg, "\""); const char *qesc = arg[pos] == '"' ? "\\\"" : ""; if (!string_nformat(buf, buflen, &bufpos, "%.*s%s", pos, arg, qesc)) return false; if (!arg[pos]) break; else arg += pos + 1; } if (!string_nformat(buf, buflen, &bufpos, "\"")) return false; continue; } if (!string_nformat(buf, buflen, &bufpos, "%s%s", arg_sep, arg)) return false; } return true; } char * argv_to_string_alloc(const char *argv[], const char *sep) { size_t i, size = 0; char *buf; for (i = 0; argv[i]; i++) size += strlen(argv[i]); buf = malloc(size + 1); if (buf && argv_to_string(argv, buf, size + 1, sep)) return buf; free(buf); return NULL; } bool argv_to_string_quoted(const char *argv[SIZEOF_ARG], char *buf, size_t buflen, const char *sep) { return concat_argv(argv, buf, buflen, sep, true); } bool argv_to_string(const char *argv[SIZEOF_ARG], char *buf, size_t buflen, const char *sep) { return concat_argv(argv, buf, buflen, sep, false); } static char * parse_arg(char **cmd, bool remove_quotes) { int quote = 0; char *arg = *cmd; char *next, *pos; for (pos = next = arg; *pos; pos++) { int c = *pos; if (c == '"' || c == '\'') { if (quote == c) { quote = 0; if (remove_quotes) { if (pos == arg) { arg++; next++; } continue; } } else if (!quote) { quote = c; if (remove_quotes) { if (pos == arg) { arg++; next++; } continue; } } } else if (quote && c == '\\') { if (remove_quotes) { if (pos == arg) { arg++; next++; } } else { *next++ = *pos; } pos++; if (!*pos) break; } if (!quote && isspace(c)) break; *next++ = *pos; } if (*pos) *cmd = pos + 1; else *cmd = pos; *next = 0; return (!remove_quotes || !quote) ? arg : NULL; } static bool split_argv_string(const char *argv[SIZEOF_ARG], int *argc, char *cmd, bool remove_quotes) { while (*cmd && *argc < SIZEOF_ARG) { char *arg = parse_arg(&cmd, remove_quotes); if (!arg) break; argv[(*argc)++] = arg; cmd = string_trim(cmd); } if (*argc < SIZEOF_ARG) argv[*argc] = NULL; return *argc < SIZEOF_ARG; } bool argv_from_string_no_quotes(const char *argv[SIZEOF_ARG], int *argc, char *cmd) { return split_argv_string(argv, argc, cmd, true); } bool argv_from_string(const char *argv[SIZEOF_ARG], int *argc, char *cmd) { return split_argv_string(argv, argc, cmd, false); } void argv_free(const char *argv[]) { int argc; if (!argv) return; for (argc = 0; argv[argc]; argc++) free((void *) argv[argc]); argv[0] = NULL; } size_t argv_size(const char **argv) { int argc = 0; while (argv && argv[argc]) argc++; return argc; } bool argv_contains(const char **argv, const char *arg) { int i; for (i = 0; argv && argv[i]; i++) if (!strcmp(argv[i], arg)) return true; return false; } DEFINE_ALLOCATOR(argv_realloc, const char *, SIZEOF_ARG) bool argv_appendn(const char ***argv, const char *arg, size_t arglen) { size_t argc = argv_size(*argv); char *alloc; if (!*arg && argc > 0) return true; if (!argv_realloc(argv, argc, 2)) return false; alloc = strndup(arg, arglen); (*argv)[argc++] = alloc; (*argv)[argc] = NULL; return alloc != NULL; } bool argv_append(const char ***argv, const char *arg) { return argv_appendn(argv, arg, strlen(arg)); } bool argv_append_array(const char ***dst_argv, const char *src_argv[]) { int i; for (i = 0; src_argv && src_argv[i]; i++) if (!argv_append(dst_argv, src_argv[i])) return false; return true; } bool argv_copy(const char ***dst, const char *src[]) { int argc; argv_free(*dst); for (argc = 0; src[argc]; argc++) if (!argv_append(dst, src[argc])) return false; return true; } /* * Argument formatting. */ struct format_context; struct format_var { const char *name; size_t namelen; bool (*formatter)(struct format_context *, struct format_var *); void *value_ref; const char *value_if_empty; }; struct format_context { struct format_var *vars; size_t vars_size; char buf[SIZEOF_MED_STR]; size_t bufpos; bool file_filter; }; #define ARGV_ENV_INIT(type, name, ifempty, initval) initval, struct argv_env argv_env = { ARGV_ENV_INFO(ARGV_ENV_INIT) }; static bool format_expand_arg(struct format_context *format, const char *name, const char *end) { struct format_var *vars = format->vars; int i; if (!prefixcmp(name, "%(prompt")) { const char *prompt = "Command argument: "; char msgbuf[SIZEOF_STR]; const char *value; const char *msgstart = name + STRING_SIZE("%(prompt"); const int msglen = end - msgstart - 1; if (end && msglen > 0 && string_format(msgbuf, "%.*s", msglen, msgstart)) { const char *msg = msgbuf; while (isspace(*msg)) msg++; if (*msg) prompt = msg; } value = read_prompt(prompt); if (value == NULL) return false; return string_format_from(format->buf, &format->bufpos, "%s", value); } for (i = 0; i < format->vars_size; i++) { if (string_enum_compare(name, vars[i].name, vars[i].namelen)) continue; if (vars[i].value_ref == &argv_env.file && !format->file_filter) return true; return vars[i].formatter(format, &vars[i]); } return false; } static bool format_append_arg(struct format_context *format, const char ***dst_argv, const char *arg) { memset(format->buf, 0, sizeof(format->buf)); format->bufpos = 0; while (arg) { const char *var = strstr(arg, "%("); const char *closing = var ? strchr(var, ')') : NULL; const char *next = closing ? closing + 1 : NULL; const int len = var ? var - arg : strlen(arg); if (var && !closing) return false; if (len && !string_format_from(format->buf, &format->bufpos, "%.*s", len, arg)) return false; if (var && !format_expand_arg(format, var, next)) return false; arg = next; } return argv_append(dst_argv, format->buf); } static bool format_append_argv(struct format_context *format, const char ***dst_argv, const char *src_argv[]) { int argc; if (!src_argv) return true; for (argc = 0; src_argv[argc]; argc++) if (!format_append_arg(format, dst_argv, src_argv[argc])) return false; return src_argv[argc] == NULL; } static bool argv_string_formatter(struct format_context *format, struct format_var *var) { argv_string *value_ref = var->value_ref; const char *value = *value_ref; if (!*value) value = var->value_if_empty; if (!*value) return true; return string_format_from(format->buf, &format->bufpos, "%s", value); } static bool argv_number_formatter(struct format_context *format, struct format_var *var) { unsigned long value = *(unsigned long *) var->value_ref; return string_format_from(format->buf, &format->bufpos, "%ld", value); } static bool bool_formatter(struct format_context *format, struct format_var *var) { bool value = *(bool *)var->value_ref; return string_format_from(format->buf, &format->bufpos, "%s", value ? "true" : "false"); } static bool repo_str_formatter(struct format_context *format, struct format_var *var) { return argv_string_formatter(format, var); } static bool repo_ref_formatter(struct format_context *format, struct format_var *var) { return argv_string_formatter(format, var); } static bool repo_rev_formatter(struct format_context *format, struct format_var *var) { return argv_string_formatter(format, var); } bool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], bool first, bool file_filter) { struct format_var vars[] = { #define FORMAT_VAR(type, name, ifempty, initval) \ { "%(" #name ")", STRING_SIZE("%(" #name ")"), type ## _formatter, &argv_env->name, ifempty }, ARGV_ENV_INFO(FORMAT_VAR) #define FORMAT_REPO_VAR(type, name) \ { "%(repo:" #name ")", STRING_SIZE("%(repo:" #name ")"), type ## _formatter, &repo.name, "" }, REPO_INFO(FORMAT_REPO_VAR) }; struct format_context format = { vars, ARRAY_SIZE(vars), "", 0, file_filter }; int argc; argv_free(*dst_argv); for (argc = 0; src_argv[argc]; argc++) { const char *arg = src_argv[argc]; if (!strcmp(arg, "%(fileargs)")) { if (file_filter && !argv_append_array(dst_argv, opt_file_args)) break; } else if (!strcmp(arg, DIFF_ARGS)) { if (!format_append_argv(&format, dst_argv, opt_diff_options)) break; } else if (!strcmp(arg, "%(blameargs)")) { if (!format_append_argv(&format, dst_argv, opt_blame_options)) break; } else if (!strcmp(arg, "%(logargs)")) { if (!format_append_argv(&format, dst_argv, opt_log_options)) break; } else if (!strcmp(arg, "%(mainargs)")) { if (!format_append_argv(&format, dst_argv, opt_main_options)) break; } else if (!strcmp(arg, "%(cmdlineargs)")) { if (!format_append_argv(&format, dst_argv, opt_cmdline_args)) break; } else if (!strcmp(arg, "%(revargs)") || (first && !strcmp(arg, "%(commit)"))) { if (!argv_append_array(dst_argv, opt_rev_args)) break; } else if (!format_append_arg(&format, dst_argv, arg)) { break; } } return src_argv[argc] == NULL; } static inline bool argv_find_rev_flag(const char *argv[], size_t argc, const char *arg, size_t arglen, size_t *search_offset, bool *with_graph, bool *with_reflog) { int i; for (i = 0; i < argc; i++) { const char *flag = argv[i]; size_t flaglen = strlen(flag); if (flaglen > arglen || strncmp(arg, flag, flaglen)) continue; if (search_offset) *search_offset = flaglen; else if (flaglen != arglen && flag[flaglen - 1] != '=') continue; if (with_graph) *with_graph = false; if (with_reflog) *with_reflog = true; return true; } return false; } bool argv_parse_rev_flag(const char *arg, struct rev_flags *rev_flags) { static const char *with_graph[] = { "--after=", "--all", "--all-match", "--ancestry-path", "--author-date-order", "--author=", "--basic-regexp", "--before=", "--boundary", "--branches", "--branches=", "--cherry", "--cherry-mark", "--cherry-pick", "--committer=", "--date-order", "--dense", "--exclude=", "--extended-regexp", "--first-parent", "--fixed-strings", "--full-history", "--graph", "--glob=", "--left-only", "--max-parents=", "--max-age=", "--merge", "--merges", "--min-parents=", "--no-max-parents", "--no-min-parents", "--no-walk", "--perl-regexp", "--pickaxe-all", "--pickaxe-regex", "--regexp-ignore-case", "--remotes", "--remotes=", "--remove-empty", "--reverse", "--right-only", "--simplify-by-decoration", "--simplify-merges", "--since=", "--skip=", "--sparse", "--stdin", "--tags", "--tags=", "--topo-order", "--until=", "-E", "-F", "-i", }; static const char *no_graph[] = { "--no-merges", "--follow", }; static const char *with_reflog[] = { "--walk-reflogs", "-g", }; static const char *search_no_graph[] = { "--grep-reflog=", "--grep=", "-G", "-S", }; size_t arglen = strlen(arg); bool graph = true; bool reflog = false; size_t search = 0; if (argv_find_rev_flag(with_graph, ARRAY_SIZE(with_graph), arg, arglen, NULL, NULL, NULL) || argv_find_rev_flag(no_graph, ARRAY_SIZE(no_graph), arg, arglen, NULL, &graph, NULL) || argv_find_rev_flag(with_reflog, ARRAY_SIZE(with_reflog), arg, arglen, NULL, NULL, &reflog) || argv_find_rev_flag(search_no_graph, ARRAY_SIZE(search_no_graph), arg, arglen, &search, &graph, NULL)) { if (rev_flags) { rev_flags->search_offset = search ? search : arglen; rev_flags->with_graph = graph; rev_flags->with_reflog = reflog; } return true; } return false; } char * argv_format_arg(struct argv_env *argv_env, const char *src_arg) { const char *src_argv[] = { src_arg, NULL }; const char **dst_argv = NULL; char *dst_arg = NULL; if (argv_format(argv_env, &dst_argv, src_argv, false, true)) dst_arg = (char *) dst_argv[0]; free(dst_argv); return dst_arg; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/blame.c000066400000000000000000000331571332650737300143360ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/io.h" #include "tig/refdb.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/display.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/git.h" #include "tig/diff.h" /* * Blame backend * * Loading the blame view is a two phase job: * * 1. File content is read either using argv_env.file from the * filesystem or using git-cat-file. * 2. Then blame information is incrementally added by * reading output from git-blame. */ struct blame_history_state { char id[SIZEOF_REV]; /* SHA1 ID. */ const char *filename; /* Name of file. */ }; static struct view_history blame_view_history = { sizeof(struct blame_history_state) }; struct blame { struct blame_commit *commit; unsigned long lineno; char text[1]; }; struct blame_state { struct blame_commit *commit; char author[SIZEOF_STR]; int blamed; bool done_reading; bool auto_filename_display; const char *filename; /* The history state for the current view is cached in the view * state so it always matches what was used to load the current blame * view. */ struct blame_history_state history_state; }; static void blame_update_file_name_visibility(struct view *view) { struct blame_state *state = view->private; struct view_column *column = get_view_column(view, VIEW_COLUMN_FILE_NAME); if (!column) return; column->hidden = column->opt.file_name.display == FILENAME_NO || (column->opt.file_name.display == FILENAME_AUTO && !state->auto_filename_display); } static enum status_code blame_open(struct view *view, enum open_flags flags) { struct blame_state *state = view->private; const char *file_argv[] = { repo.cdup, view->env->file , NULL }; char path[SIZEOF_STR]; size_t i; if (is_initial_view(view)) { /* Finish validating and setting up blame options */ if (!opt_file_args || opt_file_args[1]) usage("Invalid number of options to blame"); string_ncopy(view->env->file, opt_file_args[0], strlen(opt_file_args[0])); if (opt_cmdline_args) { opt_blame_options = opt_cmdline_args; opt_cmdline_args = NULL; } /* * flags (like "--max-age=123") and bottom limits (like "^foo") * will be passed as-is, and retained even if we re-blame from * a parent. * * Positive start points (like "HEAD") are placed only in * view->env->ref, which may be later overridden. We must * ensure there's only one of these. */ if (opt_rev_args) { for (i = 0; opt_rev_args[i]; i++) { const char *arg = opt_rev_args[i]; if (arg[0] == '-' || arg[0] == '^') argv_append(&opt_blame_options, arg); else if (!view->env->ref[0]) string_ncopy(view->env->ref, arg, strlen(arg)); else usage("Invalid number of options to blame"); } } } if (opt_blame_options) { for (i = 0; opt_blame_options[i]; i++) { if (prefixcmp(opt_blame_options[i], "-C")) continue; state->auto_filename_display = true; } } blame_update_file_name_visibility(view); if (!view->env->file[0]) return error("No file chosen, press %s to open tree view", get_view_key(view, REQ_VIEW_TREE)); if (!view->prev && *repo.prefix && !(flags & (OPEN_RELOAD | OPEN_REFRESH))) { string_copy(path, view->env->file); if (!string_format(view->env->file, "%s%s", repo.prefix, path)) return error("Failed to setup the blame view"); } if (*view->env->ref || begin_update(view, repo.cdup, file_argv, flags) != SUCCESS) { const char *blame_cat_file_argv[] = { "git", "cat-file", "blob", "%(ref):%(file)", NULL }; enum status_code code = begin_update(view, repo.cdup, blame_cat_file_argv, flags); if (code != SUCCESS) return code; } /* First pass: remove multiple references to the same commit. */ for (i = 0; i < view->lines; i++) { struct blame *blame = view->line[i].data; if (blame->commit && blame->commit->id[0]) blame->commit->id[0] = 0; else blame->commit = NULL; } /* Second pass: free existing references. */ for (i = 0; i < view->lines; i++) { struct blame *blame = view->line[i].data; if (blame->commit) free(blame->commit); } if (!(flags & OPEN_RELOAD)) reset_view_history(&blame_view_history); string_copy_rev(state->history_state.id, view->env->ref); state->history_state.filename = get_path(view->env->file); if (!state->history_state.filename) return ERROR_OUT_OF_MEMORY; string_format(view->vid, "%s", view->env->file); string_format(view->ref, "%s ...", view->env->file); return SUCCESS; } static struct blame_commit * get_blame_commit(struct view *view, const char *id) { size_t i; for (i = 0; i < view->lines; i++) { struct blame *blame = view->line[i].data; if (!blame->commit) continue; if (!strncmp(blame->commit->id, id, SIZEOF_REV - 1)) return blame->commit; } { struct blame_commit *commit = calloc(1, sizeof(*commit)); if (commit) string_ncopy(commit->id, id, SIZEOF_REV); return commit; } } static struct blame_commit * read_blame_commit(struct view *view, const char *text, struct blame_state *state) { struct blame_header header; struct blame_commit *commit; struct blame *blame; if (!parse_blame_header(&header, text, view->lines)) return NULL; commit = get_blame_commit(view, text); if (!commit) return NULL; state->blamed += header.group; while (header.group--) { struct line *line = &view->line[header.lineno + header.group - 1]; blame = line->data; blame->commit = commit; blame->lineno = header.orig_lineno + header.group - 1; line->dirty = 1; } return commit; } static bool blame_read_file(struct view *view, struct buffer *buf, struct blame_state *state) { if (!buf) { const char *blame_argv[] = { "git", "blame", encoding_arg, "%(blameargs)", "--incremental", *view->env->ref ? view->env->ref : "--incremental", "--", view->env->file, NULL }; if (failed_to_load_initial_view(view)) die("No blame exist for %s", view->vid); if (view->lines == 0 || begin_update(view, repo.cdup, blame_argv, OPEN_EXTRA) != SUCCESS) { report("Failed to load blame data"); return true; } if (view->env->goto_lineno > 0) { select_view_line(view, view->env->goto_lineno); view->env->goto_lineno = 0; } state->done_reading = true; return false; } else { struct blame *blame; if (!add_line_alloc(view, &blame, LINE_DEFAULT, buf->size, false)) return false; blame->commit = NULL; strncpy(blame->text, buf->data, buf->size); blame->text[buf->size] = 0; return true; } } static bool blame_read(struct view *view, struct buffer *buf, bool force_stop) { struct blame_state *state = view->private; if (!state->done_reading) return blame_read_file(view, buf, state); if (!buf) { string_format(view->ref, "%s", view->vid); if (view_is_displayed(view)) { update_view_title(view); redraw_view_from(view, 0); } return true; } if (!state->commit) { state->commit = read_blame_commit(view, buf->data, state); string_format(view->ref, "%s %2zd%%", view->vid, view->lines ? 5 * (size_t) (state->blamed * 20 / view->lines) : 0); } else if (parse_blame_info(state->commit, state->author, buf->data)) { bool update_view_columns = true; int i; if (!state->commit->filename) return false; if (!state->filename) { state->filename = state->commit->filename; } else if (strcmp(state->filename, state->commit->filename)) { state->auto_filename_display = true; view->force_redraw = true; blame_update_file_name_visibility(view); } for (i = 0; i < view->lines; i++) { struct line *line = &view->line[i]; struct blame *blame = line->data; if (blame && blame->commit == state->commit) { line->dirty = 1; if (update_view_columns) view_column_info_update(view, line); update_view_columns = false; } } state->commit = NULL; } return true; } bool blame_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { struct blame *blame = line->data; if (blame->commit) { column_data->id = blame->commit->id; column_data->author = blame->commit->author; column_data->file_name = blame->commit->filename; column_data->date = &blame->commit->time; column_data->commit_title = blame->commit->title; } column_data->text = blame->text; return true; } static bool check_blame_commit(struct blame *blame, bool check_null_id) { if (!blame->commit) report("Commit data not loaded yet"); else if (check_null_id && string_rev_is_null(blame->commit->id)) report("No commit exist for the selected line"); else return true; return false; } static void setup_blame_parent_line(struct view *view, struct blame *blame) { char from[SIZEOF_REF + SIZEOF_STR]; char to[SIZEOF_REF + SIZEOF_STR]; const char *diff_tree_argv[] = { "git", "diff", encoding_arg, "--no-textconv", "--no-ext-diff", "--no-color", "-U0", from, to, "--", NULL }; struct io io; int parent_lineno = -1; int blamed_lineno = -1; struct buffer buf; if (!string_format(from, "%s:%s", view->env->ref, view->env->file) || !string_format(to, "%s:%s", blame->commit->id, blame->commit->filename) || !io_run(&io, IO_RD, NULL, NULL, diff_tree_argv)) return; while (io_get(&io, &buf, '\n', true)) { char *line = buf.data; if (*line == '@') { char *pos = strchr(line, '+'); parent_lineno = atoi(line + 4); if (pos) blamed_lineno = atoi(pos + 1); } else if (*line == '+' && parent_lineno != -1) { if (blame->lineno == blamed_lineno - 1 && !strcmp(blame->text, line + 1)) { view->pos.lineno = parent_lineno ? parent_lineno - 1 : 0; break; } blamed_lineno++; } } io_done(&io); } static void blame_go_forward(struct view *view, struct blame *blame, bool parent) { struct blame_state *state = view->private; struct blame_history_state *history_state = &state->history_state; struct blame_commit *commit = blame->commit; const char *id = parent ? commit->parent_id : commit->id; const char *filename = parent ? commit->parent_filename : commit->filename; if (!*id && parent) { report("The selected commit has no parents"); return; } if (!strcmp(history_state->id, id) && !strcmp(history_state->filename, filename)) { report("The selected commit is already displayed"); return; } if (!push_view_history_state(&blame_view_history, &view->pos, history_state)) { report("Failed to save current view state"); return; } string_ncopy(view->env->ref, id, sizeof(commit->id)); string_ncopy(view->env->file, filename, strlen(filename)); if (parent) setup_blame_parent_line(view, blame); view->env->goto_lineno = blame->lineno; reload_view(view); } static void blame_go_back(struct view *view) { struct blame_history_state history_state; if (!pop_view_history_state(&blame_view_history, &view->pos, &history_state)) { report("Already at start of history"); return; } string_copy(view->env->ref, history_state.id); string_ncopy(view->env->file, history_state.filename, strlen(history_state.filename)); view->env->goto_lineno = view->pos.lineno; reload_view(view); } static enum request blame_request(struct view *view, enum request request, struct line *line) { enum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT; struct blame *blame = line->data; struct view *diff = &diff_view; switch (request) { case REQ_VIEW_BLAME: case REQ_PARENT: if (!check_blame_commit(blame, request == REQ_VIEW_BLAME)) break; blame_go_forward(view, blame, request == REQ_PARENT); break; case REQ_BACK: blame_go_back(view); break; case REQ_ENTER: if (!check_blame_commit(blame, false)) break; if (view_is_displayed(diff) && !strcmp(blame->commit->id, diff->ref)) break; if (string_rev_is_null(blame->commit->id)) { const char *diff_parent_argv[] = { GIT_DIFF_BLAME(encoding_arg, diff_context_arg(), ignore_space_arg(), blame->commit->filename) }; const char *diff_no_parent_argv[] = { GIT_DIFF_BLAME_NO_PARENT(encoding_arg, diff_context_arg(), ignore_space_arg(), blame->commit->filename) }; const char **diff_index_argv = *blame->commit->parent_id ? diff_parent_argv : diff_no_parent_argv; open_argv(view, diff, diff_index_argv, NULL, flags); if (diff->pipe) string_copy_rev(diff->ref, NULL_ID); } else { open_diff_view(view, flags); } break; default: return request; } return REQ_NONE; } static void blame_select(struct view *view, struct line *line) { struct blame *blame = line->data; struct blame_commit *commit = blame->commit; if (!commit) return; if (string_rev_is_null(commit->id)) string_ncopy(view->env->commit, "HEAD", 4); else string_copy_rev(view->env->commit, commit->id); if (commit->filename) string_format(view->env->file, "%s", commit->filename); view->env->lineno = view->pos.lineno + 1; } static struct view_ops blame_ops = { "line", argv_env.commit, VIEW_SEND_CHILD_ENTER | VIEW_BLAME_LIKE, sizeof(struct blame_state), blame_open, blame_read, view_column_draw, blame_request, view_column_grep, blame_select, NULL, view_column_bit(AUTHOR) | view_column_bit(DATE) | view_column_bit(FILE_NAME) | view_column_bit(ID) | view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), blame_get_column_data, }; DEFINE_VIEW(blame); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/blob.c000066400000000000000000000104541332650737300141670ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/refdb.h" #include "tig/parse.h" #include "tig/repo.h" #include "tig/display.h" #include "tig/draw.h" #include "tig/ui.h" #include "tig/pager.h" #include "tig/tree.h" #include "tig/blob.h" struct blob_state { char commit[SIZEOF_REF]; const char *file; }; void open_blob_view(struct view *prev, enum open_flags flags) { struct view *view = &blob_view; bool in_blob_view = prev == view; bool has_blob_selection = view->env->blob[0] || view->env->file[0]; if (!in_blob_view && (view->lines || has_blob_selection)) { open_view(prev, view, flags); } else { const char *file = open_file_finder(view->env->commit); if (file) { clear_position(&view->pos); string_ncopy(view->env->file, file, strlen(file)); view->env->blob[0] = 0; open_view(prev, view, OPEN_RELOAD); } } } static enum status_code blob_open(struct view *view, enum open_flags flags) { struct blob_state *state = view->private; static const char *blob_argv[] = { "git", "cat-file", "blob", "%(blob)", NULL }; const char **argv = (flags & (OPEN_PREPARED | OPEN_REFRESH)) ? view->argv : blob_argv; if (argv != blob_argv) { state->file = get_path(view->env->file); state->commit[0] = 0; } if (!state->file && !view->env->blob[0] && view->env->file[0]) { const char *commit = view->env->commit[0] && !string_rev_is_null(view->env->commit) ? view->env->commit : "HEAD"; char blob_spec[SIZEOF_STR]; const char *rev_parse_argv[] = { "git", "rev-parse", blob_spec, NULL }; if (!string_format(blob_spec, "%s:%s", commit, view->env->file) || !io_run_buf(rev_parse_argv, view->env->blob, sizeof(view->env->blob), NULL, false)) return error("Failed to resolve blob from file name"); string_ncopy(state->commit, commit, strlen(commit)); } if (!state->file && !view->env->blob[0]) return error("No file chosen, press %s to open tree view", get_view_key(view, REQ_VIEW_TREE)); view->encoding = get_path_encoding(view->env->file, default_encoding); if (*view->env->file) string_copy(view->ref, view->env->file); else string_copy_rev(view->ref, view->ops->id); return begin_update(view, NULL, argv, flags); } static bool blob_read(struct view *view, struct buffer *buf, bool force_stop) { if (!buf) { if (view->env->goto_lineno > 0) { select_view_line(view, view->env->goto_lineno); view->env->goto_lineno = 0; } return true; } return pager_common_read(view, buf->data, LINE_DEFAULT, NULL); } static void blob_select(struct view *view, struct line *line) { struct blob_state *state = view->private; if (state->file) string_format(view->env->file, "%s", state->file); view->env->lineno = view->pos.lineno + 1; } static enum request blob_request(struct view *view, enum request request, struct line *line) { struct blob_state *state = view->private; switch (request) { case REQ_REFRESH: if (!state->file) { report("Cannot reload immutable blob"); } else { string_ncopy(view->env->file, state->file, strlen(state->file)); refresh_view(view); } return REQ_NONE; case REQ_VIEW_BLAME: string_ncopy(view->env->ref, state->commit, strlen(state->commit)); view->env->goto_lineno = line - view->line; return request; case REQ_EDIT: if (state->file) open_editor(state->file, (line - view->line) + 1); else open_blob_editor(view->vid, NULL, (line - view->line) + 1); return REQ_NONE; default: return pager_request(view, request, line); } } static struct view_ops blob_ops = { "line", argv_env.blob, VIEW_NO_FLAGS | VIEW_REFRESH, sizeof(struct blob_state), blob_open, blob_read, view_column_draw, blob_request, view_column_grep, blob_select, NULL, view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), pager_get_column_data, }; DEFINE_VIEW(blob); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/diff.c000066400000000000000000000473541332650737300141720ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/argv.h" #include "tig/refdb.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/display.h" #include "tig/parse.h" #include "tig/pager.h" #include "tig/diff.h" #include "tig/draw.h" #include "tig/apps.h" static enum status_code diff_open(struct view *view, enum open_flags flags) { const char *diff_argv[] = { "git", "show", encoding_arg, "--pretty=fuller", "--root", "--patch-with-stat", use_mailmap_arg(), show_notes_arg(), diff_context_arg(), ignore_space_arg(), DIFF_ARGS, "%(cmdlineargs)", "--no-color", "%(commit)", "--", "%(fileargs)", NULL }; enum status_code code; diff_save_line(view, view->private, flags); code = begin_update(view, NULL, diff_argv, flags); if (code != SUCCESS) return code; return diff_init_highlight(view, view->private); } enum status_code diff_init_highlight(struct view *view, struct diff_state *state) { if (!opt_diff_highlight || !*opt_diff_highlight) return SUCCESS; struct app_external *app = app_diff_highlight_load(opt_diff_highlight); struct io io; /* XXX This empty string keeps valgrind happy while preserving earlier * behavior of test diff/diff-highlight-test:diff-highlight-misconfigured. * Simpler would be to return error when user misconfigured, though we * don't want tig to fail when diff-highlight isn't present. io_exec * below does not return error when app->argv[0] is empty or null as the * conditional might suggest. */ if (!*app->argv) app->argv[0] = ""; if (!io_exec(&io, IO_RP, view->dir, app->env, app->argv, view->io.pipe)) return error("Failed to run %s", opt_diff_highlight); state->view_io = view->io; view->io = io; state->highlight = true; return SUCCESS; } bool diff_done_highlight(struct diff_state *state) { if (!state->highlight) return true; io_kill(&state->view_io); return io_done(&state->view_io); } struct diff_stat_context { const char *text; enum line_type type; bool skip; size_t cells; const char **cell_text; struct box_cell cell[256]; }; static bool diff_common_add_cell(struct diff_stat_context *context, size_t length, bool allow_empty) { assert(ARRAY_SIZE(context->cell) > context->cells); if (!allow_empty && (length == 0)) return true; if (context->skip && !argv_appendn(&context->cell_text, context->text, length)) return false; context->cell[context->cells].length = length; context->cell[context->cells].type = context->type; context->cells++; return true; } static struct line * diff_common_add_line(struct view *view, const char *text, enum line_type type, struct diff_stat_context *context) { char *cell_text = context->cell_text ? argv_to_string_alloc(context->cell_text, "") : NULL; const char *line_text = cell_text ? cell_text : text; struct line *line = add_line_text_at(view, view->lines, line_text, type, context->cells); struct box *box; free(cell_text); argv_free(context->cell_text); if (!line) return NULL; box = line->data; if (context->cells) memcpy(box->cell, context->cell, sizeof(struct box_cell) * context->cells); box->cells = context->cells; return line; } static bool diff_common_add_cell_until(struct diff_stat_context *context, const char *s, enum line_type next_type) { const char *sep = strstr(context->text, s); if (sep == NULL) return false; if (!diff_common_add_cell(context, sep - context->text, false)) return false; context->text = sep + (context->skip ? strlen(s) : 0); context->type = next_type; return true; } static bool diff_common_read_diff_stat_part(struct diff_stat_context *context, char c, enum line_type next_type) { const char *sep = c == '|' ? strrchr(context->text, c) : strchr(context->text, c); if (sep == NULL) return false; diff_common_add_cell(context, sep - context->text, false); context->text = sep; context->type = next_type; return true; } static struct line * diff_common_read_diff_stat(struct view *view, const char *text) { struct diff_stat_context context = { text, LINE_DIFF_STAT }; diff_common_read_diff_stat_part(&context, '|', LINE_DEFAULT); if (diff_common_read_diff_stat_part(&context, 'B', LINE_DEFAULT)) { /* Handle binary diffstat: Bin -> bytes */ diff_common_read_diff_stat_part(&context, ' ', LINE_DIFF_DEL); diff_common_read_diff_stat_part(&context, '-', LINE_DEFAULT); diff_common_read_diff_stat_part(&context, ' ', LINE_DIFF_ADD); diff_common_read_diff_stat_part(&context, 'b', LINE_DEFAULT); } else { diff_common_read_diff_stat_part(&context, '+', LINE_DIFF_ADD); diff_common_read_diff_stat_part(&context, '-', LINE_DIFF_DEL); } diff_common_add_cell(&context, strlen(context.text), false); return diff_common_add_line(view, text, LINE_DIFF_STAT, &context); } struct line * diff_common_add_diff_stat(struct view *view, const char *text, size_t offset) { const char *start = text + offset; const char *data = start + strspn(start, " "); size_t len = strlen(data); char *pipe = strchr(data, '|'); /* Ensure that '|' is present and the file name part contains * non-space characters. */ if (!pipe || pipe == data) return NULL; /* Detect remaining part of a diff stat line: * * added | 40 +++++++++++ * remove | 124 -------------------------- * updated | 14 +---- * rename.from => rename.to | 0 * .../truncated file name | 11 ++--- * binary add | Bin 0 -> 1234 bytes * binary update | Bin 1234 -> 2345 bytes * binary copy | Bin * unmerged | Unmerged */ if ((data[len - 1] == '-' || data[len - 1] == '+') || strstr(pipe, " 0") || strstr(pipe, "Bin") || strstr(pipe, "Unmerged") || (data[len - 1] == '0' && (strstr(data, "=>") || !prefixcmp(data, "...")))) return diff_common_read_diff_stat(view, text); return NULL; } static bool diff_common_highlight(struct view *view, const char *text, enum line_type type) { struct diff_stat_context context = { text, type, true }; enum line_type hi_type = type == LINE_DIFF_ADD ? LINE_DIFF_ADD_HIGHLIGHT : LINE_DIFF_DEL_HIGHLIGHT; const char *codes[] = { "\x1b[7m", "\x1b[27m" }; const enum line_type types[] = { hi_type, type }; int i; for (i = 0; diff_common_add_cell_until(&context, codes[i], types[i]); i = (i + 1) % 2) ; diff_common_add_cell(&context, strlen(context.text), true); return diff_common_add_line(view, text, type, &context); } bool diff_common_read(struct view *view, const char *data, struct diff_state *state) { enum line_type type = get_line_type(data); if (!view->lines && type != LINE_COMMIT) state->reading_diff_stat = true; if (state->combined_diff && !state->after_diff && data[0] == ' ' && data[1] != ' ') state->reading_diff_stat = true; if (state->reading_diff_stat) { if (diff_common_add_diff_stat(view, data, 0)) return true; state->reading_diff_stat = false; } else if (!strcmp(data, "---")) { state->reading_diff_stat = true; } if (!state->after_commit_title && !prefixcmp(data, " ")) { struct line *line = add_line_text(view, data, LINE_DEFAULT); if (line) line->commit_title = 1; state->after_commit_title = true; return line != NULL; } if (type == LINE_DIFF_HEADER) { const int len = STRING_SIZE("diff --"); state->after_diff = true; if (!strncmp(data + len, "combined ", strlen("combined ")) || !strncmp(data + len, "cc ", strlen("cc "))) state->combined_diff = true; } else if (type == LINE_DIFF_CHUNK) { const char *context = strstr(data + STRING_SIZE("@@"), "@@"); struct line *line = context ? add_line_text_at(view, view->lines, data, LINE_DIFF_CHUNK, 2) : NULL; struct box *box; if (!line) return false; box = line->data; box->cell[0].length = (context + 2) - data; box->cell[1].length = strlen(context + 2); box->cell[box->cells++].type = LINE_DIFF_STAT; return true; } else if (state->highlight && strchr(data, 0x1b)) { return diff_common_highlight(view, data, type); } else if (type == LINE_PP_MERGE) { state->combined_diff = true; } /* ADD2 and DEL2 are only valid in combined diff hunks */ if (!state->combined_diff && (type == LINE_DIFF_ADD2 || type == LINE_DIFF_DEL2)) type = LINE_DEFAULT; return pager_common_read(view, data, type, NULL); } static bool diff_find_stat_entry(struct view *view, struct line *line, enum line_type type) { struct line *marker = find_next_line_by_type(view, line, type); return marker && line == find_prev_line_by_type(view, marker, LINE_DIFF_HEADER); } static struct line * diff_find_header_from_stat(struct view *view, struct line *line) { if (line->type == LINE_DIFF_STAT) { int file_number = 0; while (view_has_line(view, line) && line->type == LINE_DIFF_STAT) { file_number++; line--; } for (line = view->line; view_has_line(view, line); line++) { line = find_next_line_by_type(view, line, LINE_DIFF_HEADER); if (!line) break; if (diff_find_stat_entry(view, line, LINE_DIFF_INDEX) || diff_find_stat_entry(view, line, LINE_DIFF_SIMILARITY)) { if (file_number == 1) { break; } file_number--; } } return line; } return NULL; } enum request diff_common_enter(struct view *view, enum request request, struct line *line) { if (line->type == LINE_DIFF_STAT) { line = diff_find_header_from_stat(view, line); if (!line) { report("Failed to find file diff"); return REQ_NONE; } select_view_line(view, line - view->line); report_clear(); return REQ_NONE; } else { return pager_request(view, request, line); } } void diff_save_line(struct view *view, struct diff_state *state, enum open_flags flags) { if (flags & OPEN_RELOAD) { struct line *line = &view->line[view->pos.lineno]; const char *file = view_has_line(view, line) ? diff_get_pathname(view, line) : NULL; if (file) { state->file = get_path(file); state->lineno = diff_get_lineno(view, line); state->pos = view->pos; } } } void diff_restore_line(struct view *view, struct diff_state *state) { struct line *line = &view->line[view->lines - 1]; if (!state->file) return; while ((line = find_prev_line_by_type(view, line, LINE_DIFF_HEADER))) { const char *file = diff_get_pathname(view, line); if (file && !strcmp(file, state->file)) break; line--; } state->file = NULL; if (!line) return; while ((line = find_next_line_by_type(view, line, LINE_DIFF_CHUNK))) { unsigned int lineno = diff_get_lineno(view, line); for (line++; view_has_line(view, line) && line->type != LINE_DIFF_CHUNK; line++) { if (lineno == state->lineno) { unsigned long lineno = line - view->line; unsigned long offset = lineno - (state->pos.lineno - state->pos.offset); goto_view_line(view, offset, lineno); redraw_view(view); return; } if (line->type != LINE_DIFF_DEL && line->type != LINE_DIFF_DEL2) lineno++; } } } static bool diff_read_describe(struct view *view, struct buffer *buffer, struct diff_state *state) { struct line *line = find_next_line_by_type(view, view->line, LINE_PP_REFS); if (line && buffer) { const char *ref = string_trim(buffer->data); const char *sep = !strcmp("Refs: ", box_text(line)) ? "" : ", "; if (*ref && !append_line_format(view, line, "%s%s", sep, ref)) return false; } return true; } static bool diff_read(struct view *view, struct buffer *buf, bool force_stop) { struct diff_state *state = view->private; if (state->adding_describe_ref) return diff_read_describe(view, buf, state); if (!buf) { if (!diff_done_highlight(state)) { report("Failed run the diff-highlight program: %s", opt_diff_highlight); return false; } /* Fall back to retry if no diff will be shown. */ if (view->lines == 0 && opt_file_args) { int pos = argv_size(view->argv) - argv_size(opt_file_args) - 1; if (pos > 0 && !strcmp(view->argv[pos], "--")) { for (; view->argv[pos]; pos++) { free((void *) view->argv[pos]); view->argv[pos] = NULL; } if (view->pipe) io_done(view->pipe); if (view_exec(view, 0)) return false; } } diff_restore_line(view, state); if (!state->adding_describe_ref && !ref_list_contains_tag(view->vid)) { const char *describe_argv[] = { "git", "describe", view->vid, NULL }; enum status_code code = begin_update(view, NULL, describe_argv, OPEN_EXTRA); if (code != SUCCESS) { report("Failed to load describe data: %s", get_status_message(code)); return true; } state->adding_describe_ref = true; return false; } return true; } return diff_common_read(view, buf->data, state); } static bool diff_blame_line(const char *ref, const char *file, unsigned long lineno, struct blame_header *header, struct blame_commit *commit) { char author[SIZEOF_STR] = ""; char line_arg[SIZEOF_STR]; const char *blame_argv[] = { "git", "blame", encoding_arg, "-p", line_arg, ref, "--", file, NULL }; struct io io; bool ok = false; struct buffer buf; if (!string_format(line_arg, "-L%ld,+1", lineno)) return false; if (!io_run(&io, IO_RD, repo.cdup, NULL, blame_argv)) return false; while (io_get(&io, &buf, '\n', true)) { if (header) { if (!parse_blame_header(header, buf.data, 9999999)) break; header = NULL; } else if (parse_blame_info(commit, author, buf.data)) { ok = commit->filename != NULL; break; } } if (io_error(&io)) ok = false; io_done(&io); return ok; } unsigned int diff_get_lineno(struct view *view, struct line *line) { const struct line *header, *chunk; unsigned int lineno; struct chunk_header chunk_header; /* Verify that we are after a diff header and one of its chunks */ header = find_prev_line_by_type(view, line, LINE_DIFF_HEADER); chunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK); if (!header || !chunk || chunk < header) return 0; /* * In a chunk header, the number after the '+' sign is the number of its * following line, in the new version of the file. We increment this * number for each non-deletion line, until the given line position. */ if (!parse_chunk_header(&chunk_header, box_text(chunk))) return 0; lineno = chunk_header.new.position; for (chunk++; chunk < line; chunk++) if (chunk->type != LINE_DIFF_DEL && chunk->type != LINE_DIFF_DEL2) lineno++; return lineno; } static enum request diff_trace_origin(struct view *view, struct line *line) { struct line *diff = find_prev_line_by_type(view, line, LINE_DIFF_HEADER); struct line *chunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK); const char *chunk_data; int chunk_marker = line->type == LINE_DIFF_DEL ? '-' : '+'; unsigned long lineno = 0; const char *file = NULL; char ref[SIZEOF_REF]; struct blame_header header; struct blame_commit commit; if (!diff || !chunk || chunk == line) { report("The line to trace must be inside a diff chunk"); return REQ_NONE; } for (; diff < line && !file; diff++) { const char *data = box_text(diff); if (!prefixcmp(data, "--- a/")) { file = data + STRING_SIZE("--- a/"); break; } } if (diff == line || !file) { report("Failed to read the file name"); return REQ_NONE; } chunk_data = box_text(chunk); if (!parse_chunk_lineno(&lineno, chunk_data, chunk_marker)) { report("Failed to read the line number"); return REQ_NONE; } if (lineno == 0) { report("This is the origin of the line"); return REQ_NONE; } for (chunk += 1; chunk < line; chunk++) { if (chunk->type == LINE_DIFF_ADD) { lineno += chunk_marker == '+'; } else if (chunk->type == LINE_DIFF_DEL) { lineno += chunk_marker == '-'; } else { lineno++; } } if (chunk_marker == '+') string_copy(ref, view->vid); else string_format(ref, "%s^", view->vid); if (string_rev_is_null(ref)) { string_ncopy(view->env->file, file, strlen(file)); string_copy(view->env->ref, ""); view->env->goto_lineno = lineno - 1; } else { if (!diff_blame_line(ref, file, lineno, &header, &commit)) { report("Failed to read blame data"); return REQ_NONE; } string_ncopy(view->env->file, commit.filename, strlen(commit.filename)); string_copy(view->env->ref, header.id); view->env->goto_lineno = header.orig_lineno - 1; } return REQ_VIEW_BLAME; } const char * diff_get_pathname(struct view *view, struct line *line) { struct line *header; const char *dst; const char *prefixes[] = { "diff --cc ", "diff --combined " }; const char *name; int i; header = find_prev_line_by_type(view, line, LINE_DIFF_HEADER); if (!header) return NULL; for (i = 0; i < ARRAY_SIZE(prefixes); i++) { dst = strstr(box_text(header), prefixes[i]); if (dst) return dst + strlen(prefixes[i]); } header = find_next_line_by_type(view, header, LINE_DIFF_ADD_FILE); if (!header) return NULL; name = box_text(header); if (!prefixcmp(name, "+++ ")) name += STRING_SIZE("+++ "); if (opt_diff_noprefix) return name; /* Handle mnemonic prefixes, such as "b/" and "w/". */ if (!prefixcmp(name, "b/") || !prefixcmp(name, "w/")) name += STRING_SIZE("b/"); return name; } enum request diff_common_edit(struct view *view, enum request request, struct line *line) { const char *file; char path[SIZEOF_STR]; unsigned int lineno; if (line->type == LINE_DIFF_STAT) { file = view->env->file; lineno = view->env->lineno; } else { file = diff_get_pathname(view, line); lineno = diff_get_lineno(view, line); } if (file && string_format(path, "%s%s", repo.cdup, file) && access(path, R_OK)) { report("Failed to open file: %s", file); return REQ_NONE; } open_editor(file, lineno); return REQ_NONE; } static enum request diff_request(struct view *view, enum request request, struct line *line) { switch (request) { case REQ_VIEW_BLAME: return diff_trace_origin(view, line); case REQ_EDIT: return diff_common_edit(view, request, line); case REQ_ENTER: return diff_common_enter(view, request, line); case REQ_REFRESH: if (string_rev_is_null(view->vid)) refresh_view(view); else reload_view(view); return REQ_NONE; default: return pager_request(view, request, line); } } void diff_common_select(struct view *view, struct line *line, const char *changes_msg) { if (line->type == LINE_DIFF_STAT) { struct line *header = diff_find_header_from_stat(view, line); if (header) { const char *file = diff_get_pathname(view, header); if (file) { string_format(view->env->file, "%s", file); view->env->lineno = view->env->goto_lineno = 0; view->env->blob[0] = 0; } } string_format(view->ref, "Press '%s' to jump to file diff", get_view_key(view, REQ_ENTER)); } else { const char *file = diff_get_pathname(view, line); if (file) { if (changes_msg) string_format(view->ref, "%s to '%s'", changes_msg, file); string_format(view->env->file, "%s", file); view->env->lineno = view->env->goto_lineno = diff_get_lineno(view, line); view->env->blob[0] = 0; } else { string_ncopy(view->ref, view->ops->id, strlen(view->ops->id)); pager_select(view, line); } } } static void diff_select(struct view *view, struct line *line) { diff_common_select(view, line, "Changes"); } static struct view_ops diff_ops = { "line", argv_env.commit, VIEW_DIFF_LIKE | VIEW_ADD_DESCRIBE_REF | VIEW_ADD_PAGER_REFS | VIEW_FILE_FILTER | VIEW_REFRESH | VIEW_FLEX_WIDTH, sizeof(struct diff_state), diff_open, diff_read, view_column_draw, diff_request, view_column_grep, diff_select, NULL, view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), pager_get_column_data, }; DEFINE_VIEW(diff); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/display.c000066400000000000000000000500741332650737300147200ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/argv.h" #include "tig/io.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/display.h" #include "tig/watch.h" static void set_terminal_modes(void); struct view *display[2]; unsigned int current_view; static WINDOW *display_win[2]; static WINDOW *display_title[2]; static WINDOW *display_sep; struct display_tty { FILE *file; int fd; struct termios *attr; pid_t opgrp; }; static struct display_tty opt_tty = { NULL, -1, NULL, -1 }; static struct io script_io = { -1 }; bool is_script_executing(void) { return script_io.pipe != -1; } enum status_code open_script(const char *path) { if (is_script_executing()) return error("Scripts cannot be run from scripts"); char buf[SIZEOF_STR]; if (!path_expand(buf, sizeof(buf), path)) return error("Failed to expand path: %s", path); return io_open(&script_io, "%s", buf) ? SUCCESS : error("Failed to open %s", buf); } bool open_external_viewer(const char *argv[], const char *dir, bool silent, bool confirm, bool echo, bool quick, bool do_refresh, const char *notice) { bool ok; if (echo) { char buf[SIZEOF_STR] = ""; io_run_buf(argv, buf, sizeof(buf), dir, false); if (*buf) { report("%s", buf); return true; } else { report("No output"); return false; } } else if (silent || is_script_executing()) { ok = io_run_bg(argv, dir); } else { clear(); refresh(); endwin(); /* restore original tty modes */ tcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr); ok = io_run_fg(argv, dir); if (confirm || !ok) { if (!ok && *notice) fprintf(stderr, "%s", notice); if (!ok || !quick) { fprintf(stderr, "Press Enter to continue"); getc(opt_tty.file); } } fseek(opt_tty.file, 0, SEEK_END); tcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr); set_terminal_modes(); } if (watch_update(WATCH_EVENT_AFTER_COMMAND) && do_refresh) { struct view *view; int i; foreach_displayed_view (view, i) { if (watch_dirty(&view->watch)) refresh_view(view); } } redraw_display(true); return ok; } #define EDITOR_LINENO_MSG \ "*** Your editor reported an error while opening the file.\n" \ "*** This is probably because it doesn't support the line\n" \ "*** number argument added automatically. The line number\n" \ "*** has been disabled for now. You can permanently disable\n" \ "*** it by adding the following line to ~/.tigrc\n" \ "*** set editor-line-number = no\n" void open_editor(const char *file, unsigned int lineno) { const char *editor_argv[SIZEOF_ARG + 3] = { "vi", file, NULL }; char editor_cmd[SIZEOF_STR]; char lineno_cmd[SIZEOF_STR]; const char *editor; int argc = 0; editor = getenv("GIT_EDITOR"); if (!editor && *opt_editor) editor = opt_editor; if (!editor) editor = getenv("VISUAL"); if (!editor) editor = getenv("EDITOR"); if (!editor) editor = "vi"; string_ncopy(editor_cmd, editor, strlen(editor)); if (!argv_from_string_no_quotes(editor_argv, &argc, editor_cmd)) { report("Failed to read editor command"); return; } if (lineno && opt_editor_line_number && string_format(lineno_cmd, "+%u", lineno)) editor_argv[argc++] = lineno_cmd; editor_argv[argc] = file; if (!open_external_viewer(editor_argv, repo.cdup, false, false, false, false, true, EDITOR_LINENO_MSG)) opt_editor_line_number = false; } static void apply_horizontal_split(struct view *base, struct view *view) { view->width = base->width; view->height = apply_step(opt_split_view_height, base->height); view->height = MAX(view->height, MIN_VIEW_HEIGHT); view->height = MIN(view->height, base->height - MIN_VIEW_HEIGHT); base->height -= view->height; } int apply_vertical_split(int base_width) { int width = apply_step(opt_split_view_width, base_width); width = MAX(width, MIN_VIEW_WIDTH); width = MIN(width, base_width - MIN_VIEW_WIDTH); return width; } bool vertical_split_is_enabled(enum vertical_split vsplit, int height, int width) { if (vsplit == VERTICAL_SPLIT_AUTO) return width > 160 || width * VSPLIT_SCALE > (height - 1) * 2; return vsplit == VERTICAL_SPLIT_VERTICAL; } static void redraw_display_separator(bool clear) { if (display_sep) { chtype separator = opt_line_graphics ? ACS_VLINE : '|'; if (clear) wclear(display_sep); wbkgd(display_sep, separator + get_line_attr(NULL, LINE_TITLE_BLUR)); wnoutrefresh(display_sep); } } static void create_or_move_display_separator(int height, int x) { if (!display_sep) { display_sep = newwin(height, 1, 0, x); if (!display_sep) die("Failed to create separator window"); } else { wresize(display_sep, height, 1); mvwin(display_sep, 0, x); } } static void remove_display_separator(void) { if (display_sep) { delwin(display_sep); display_sep = NULL; } } void resize_display(void) { int x, y, i; int height, width; struct view *base = display[0]; struct view *view = display[1] ? display[1] : display[0]; bool vsplit; /* Setup window dimensions */ getmaxyx(stdscr, height, width); /* Make room for the status window. */ base->height = height - 1; base->width = width; vsplit = vertical_split_is_enabled(opt_vertical_split, height, width); if (view != base) { if (vsplit) { view->height = base->height; view->width = apply_vertical_split(base->width); base->width -= view->width; /* Make room for the separator bar. */ view->width -= 1; create_or_move_display_separator(base->height, base->width); redraw_display_separator(false); } else { remove_display_separator(); apply_horizontal_split(base, view); } /* Make room for the title bar. */ view->height -= 1; } else { remove_display_separator(); } /* Make room for the title bar. */ base->height -= 1; x = y = 0; foreach_displayed_view (view, i) { if (!display_win[i]) { display_win[i] = newwin(view->height, view->width, y, x); if (!display_win[i]) die("Failed to create %s view", view->name); scrollok(display_win[i], false); display_title[i] = newwin(1, view->width, y + view->height, x); if (!display_title[i]) die("Failed to create title window"); } else { wresize(display_win[i], view->height, view->width); mvwin(display_win[i], y, x); wresize(display_title[i], 1, view->width); mvwin(display_title[i], y + view->height, x); } view->win = display_win[i]; view->title = display_title[i]; if (vsplit) x += view->width + 1; else y += view->height + 1; } redraw_display_separator(false); } void redraw_display(bool clear) { struct view *view; int i; foreach_displayed_view (view, i) { if (clear) wclear(view->win); redraw_view(view); update_view_title(view); } redraw_display_separator(clear); } static bool save_window_line(FILE *file, WINDOW *win, int y, char *buf, size_t bufsize) { int read = mvwinnstr(win, y, 0, buf, bufsize); const char *out = read == ERR ? "" : string_trim_end(buf); return read == ERR ? false : fprintf(file, "%s\n", out) == strlen(out) + 1; } static bool save_window_vline(FILE *file, WINDOW *left, WINDOW *right, int y, char *buf, size_t bufsize) { int read1 = mvwinnstr(left, y, 0, buf, bufsize); int read2 = read1 == ERR ? ERR : mvwinnstr(right, y, 0, buf + read1 + 1, bufsize - read1 - 1); if (read2 == ERR) return false; buf[read1] = '|'; buf = string_trim_end(buf); return fprintf(file, "%s\n", string_trim_end(buf)) == strlen(buf) + 1; } bool save_display(const char *path) { int i, width; size_t linelen; char *line; FILE *file = fopen(path, "w"); bool ok = true; struct view *view = display[0]; if (!file) return false; getmaxyx(stdscr, i, width); linelen = width * 4; line = malloc(linelen + 1); if (!line) { fclose(file); return false; } if (view->width < width && display[1]) { struct view *left = display[0], *right = display[1]; for (i = 0; ok && i < left->height; i++) ok = save_window_vline(file, left->win, right->win, i, line, linelen); if (ok) ok = save_window_vline(file, left->title, right->title, 0, line, linelen); } else { int j; foreach_displayed_view (view, j) { for (i = 0; ok && i < view->height; i++) ok = save_window_line(file, view->win, i, line, linelen); if (ok) ok = save_window_line(file, view->title, 0, line, linelen); } } free(line); fclose(file); return ok; } /* * Dump view data to file. * * FIXME: Add support for more line state and column data. */ bool save_view(struct view *view, const char *path) { struct view_column_data column_data = {0}; FILE *file = fopen(path, "w"); size_t i; if (!file) return false; fprintf(file, "View: %s\n", view->name); if (view->parent && view->parent != view) fprintf(file, "Parent: %s\n", view->parent->name); fprintf(file, "Ref: %s\n", view->ref); fprintf(file, "Dimensions: height=%d width=%d\n", view->height, view->width); fprintf(file, "Position: offset=%ld column=%ld lineno=%ld\n", view->pos.offset, view->pos.col, view->pos.lineno); for (i = 0; i < view->lines; i++) { struct line *line = &view->line[i]; fprintf(file, "line[%3zu] type=%s selected=%d\n", i, enum_name(get_line_type_name(line->type)), line->selected); if (!view->ops->get_column_data(view, line, &column_data)) { fclose(file); return true; } if (column_data.box) { const struct box *box = column_data.box; size_t j; size_t offset; fprintf(file, "line[%3zu] cells=%zu text=", i, box->cells); for (j = 0, offset = 0; j < box->cells; j++) { const struct box_cell *cell = &box->cell[j]; fprintf(file, "[%.*s]", (int) cell->length, box->text + offset); offset += cell->length; } fprintf(file, "\n"); } } fclose(file); return true; } /* * Status management */ /* Whether or not the curses interface has been initialized. */ static bool cursed = false; /* Terminal hacks and workarounds. */ static bool use_scroll_redrawwin; static bool use_scroll_status_wclear; /* The status window is used for polling keystrokes. */ WINDOW *status_win; /* Reading from the prompt? */ static bool input_mode = false; static bool status_empty = false; /* Update status and title window. */ static bool update_status_window(struct view *view, const char *context, const char *msg, va_list args) { if (input_mode) return false; if (!status_empty || *msg) { wmove(status_win, 0, 0); if (view && view->has_scrolled && use_scroll_status_wclear) wclear(status_win); if (*msg) { vwprintw(status_win, msg, args); status_empty = false; } else { status_empty = true; } wclrtoeol(status_win); if (context && *context) { size_t contextlen = strlen(context); int x, y, width, ___; getyx(status_win, y, x); getmaxyx(status_win, ___, width); (void) ___; if (contextlen < width - x) { mvwprintw(status_win, 0, width - contextlen, "%s", context); wmove(status_win, y, x); } } return true; } return false; } void update_status(const char *msg, ...) { va_list args; va_start(args, msg); update_status_window(display[current_view], "", msg, args); va_end(args); } void update_status_with_context(const char *context, const char *msg, ...) { va_list args; va_start(args, msg); update_status_window(display[current_view], context, msg, args); va_end(args); } void report(const char *msg, ...) { struct view *view = display[current_view]; va_list args; if (!view) { char buf[SIZEOF_STR]; int retval; FORMAT_BUFFER(buf, sizeof(buf), msg, retval, true); die("%s", buf); } va_start(args, msg); if (update_status_window(view, "", msg, args)) wnoutrefresh(status_win); va_end(args); update_view_title(view); } void report_clear(void) { struct view *view = display[current_view]; if (!view) return; if (!input_mode && !status_empty) { werase(status_win); doupdate(); } status_empty = true; update_view_title(view); } static void done_display(void) { if (cursed) { if (status_win) { werase(status_win); doupdate(); } curs_set(1); endwin(); } cursed = false; if (opt_tty.attr) { tcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr); free(opt_tty.attr); opt_tty.attr = NULL; } signal(SIGTTOU, SIG_IGN); tcsetpgrp(opt_tty.fd, opt_tty.opgrp); signal(SIGTTOU, SIG_DFL); } static void set_terminal_modes(void) { nonl(); /* Disable conversion and detect newlines from input. */ raw(); /* Take input chars one at a time, no wait for \n */ noecho(); /* Don't echo input */ curs_set(0); leaveok(stdscr, false); } void init_tty(void) { /* open */ opt_tty.file = fopen("/dev/tty", "r+"); if (!opt_tty.file) die("Failed to open tty for input"); opt_tty.fd = fileno(opt_tty.file); /* attributes */ opt_tty.attr = calloc(1, sizeof(struct termios)); if (!opt_tty.attr) die("Failed allocation for tty attributes"); tcgetattr(opt_tty.fd, opt_tty.attr); /* process-group leader */ signal(SIGTTOU, SIG_IGN); setpgid(getpid(), getpid()); opt_tty.opgrp = tcgetpgrp(opt_tty.fd); tcsetpgrp(opt_tty.fd, getpid()); signal(SIGTTOU, SIG_DFL); } void init_display(void) { bool no_display = !!getenv("TIG_NO_DISPLAY"); const char *term; int x, y; if (!opt_tty.file) die("Can't initialize display without tty"); die_callback = done_display; if (atexit(done_display)) die("Failed to register done_display"); /* Initialize the curses library */ if (!no_display && isatty(STDIN_FILENO)) { /* Needed for ncurses 5.4 compatibility. */ cursed = !!initscr(); } else { /* Leave stdin and stdout alone when acting as a pager. */ FILE *out_tty; out_tty = no_display ? fopen("/dev/null", "w+") : opt_tty.file; if (!out_tty) die("Failed to open tty for output"); cursed = !!newterm(NULL, out_tty, opt_tty.file); } if (!cursed) die("Failed to initialize curses"); set_terminal_modes(); init_colors(); getmaxyx(stdscr, y, x); status_win = newwin(1, x, y - 1, 0); if (!status_win) die("Failed to create status window"); /* Enable keyboard mapping */ keypad(status_win, true); wbkgdset(status_win, get_line_attr(NULL, LINE_STATUS)); enable_mouse(opt_mouse); #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH >= 20080119) set_tabsize(opt_tab_size); #else TABSIZE = opt_tab_size; #endif term = getenv("XTERM_VERSION") ? NULL : (getenv("TERM_PROGRAM") ? getenv("TERM_PROGRAM") : getenv("COLORTERM")); if (term && !strcmp(term, "gnome-terminal")) { /* In the gnome-terminal-emulator, the warning message * shown when scrolling up one line while the cursor is * on the first line followed by scrolling down one line * corrupts the status line. This is fixed by calling * wclear. */ use_scroll_status_wclear = true; use_scroll_redrawwin = false; } else if (term && (!strcmp(term, "xrvt-xpm") || !strcmp(term, "Apple_Terminal") || !strcmp(term, "iTerm.app"))) { /* No problems with full optimizations in * xrvt-(unicode) * aterm * Terminal.app * iTerm2 */ use_scroll_status_wclear = use_scroll_redrawwin = false; } else { /* When scrolling in (u)xterm the last line in the * scrolling direction will update slowly. This is * the conservative default. */ use_scroll_redrawwin = true; use_scroll_status_wclear = false; } } static bool read_script(struct key *key) { static struct buffer input_buffer; static const char *line = ""; enum status_code code; while (!line || !*line) { if (input_buffer.data && *input_buffer.data == ':') { line = ""; memset(&input_buffer, 0, sizeof(input_buffer)); } else if (!io_get(&script_io, &input_buffer, '\n', true)) { io_done(&script_io); return false; } else if (input_buffer.data[strspn(input_buffer.data, " \t")] == '#') { continue; } else { line = input_buffer.data; } } code = get_key_value(&line, key); if (code != SUCCESS) die("Error reading script: %s", get_status_message(code)); return true; } int get_input_char(void) { if (is_script_executing()) { static struct key key; static int bytes_pos; if (!key.modifiers.multibytes || bytes_pos >= strlen(key.data.bytes)) { if (!read_script(&key)) return 0; bytes_pos = 0; } if (!key.modifiers.multibytes) { if (key.data.value < 128) return key.data.value; die("Only ASCII control characters can be used in prompts: %d", key.data.value); } return key.data.bytes[bytes_pos++]; } return getc(opt_tty.file); } static bool update_views(void) { struct view *view; int i; bool is_loading = false; foreach_view (view, i) { update_view(view); if (view_is_displayed(view) && view->has_scrolled && use_scroll_redrawwin) redrawwin(view->win); view->has_scrolled = false; if (view->pipe) is_loading = true; } return is_loading; } int get_input(int prompt_position, struct key *key) { struct view *view; int i, key_value, cursor_y, cursor_x; if (prompt_position > 0) input_mode = true; memset(key, 0, sizeof(*key)); while (true) { int delay = -1; if (opt_refresh_mode == REFRESH_MODE_PERIODIC) { bool refs_refreshed = false; delay = watch_periodic(opt_refresh_interval); foreach_displayed_view (view, i) { if (view_can_refresh(view) && watch_dirty(&view->watch)) { if (!refs_refreshed) { load_refs(true); refs_refreshed = true; } refresh_view(view); } } } if (update_views()) delay = 0; /* Update the cursor position. */ if (prompt_position) { getbegyx(status_win, cursor_y, cursor_x); cursor_x = prompt_position; } else { view = display[current_view]; getbegyx(view->win, cursor_y, cursor_x); cursor_x += view->width - 1; cursor_y += view->pos.lineno - view->pos.offset; } set_cursor_pos(cursor_y, cursor_x); if (is_script_executing()) { /* Wait for the current command to complete. */ if (delay == 0 || !read_script(key)) continue; return key->modifiers.multibytes ? OK : key->data.value; } else { /* Refresh, accept single keystroke of input */ doupdate(); wtimeout(status_win, delay); key_value = wgetch(status_win); } /* wgetch() with nodelay() enabled returns ERR when * there's no input. */ if (key_value == ERR) { } else if (key_value == KEY_RESIZE) { int height, width; getmaxyx(stdscr, height, width); wresize(status_win, 1, width); mvwin(status_win, height - 1, 0); wnoutrefresh(status_win); resize_display(); redraw_display(true); } else if (key_value == KEY_CTL('z')) { raise(SIGTSTP); } else { int pos, key_length; input_mode = false; if (key_value == erasechar()) key_value = KEY_BACKSPACE; /* * Ctrl- values are represented using a 0x1F * bitmask on the key value. To 'unmap' we assume that: * * - Ctrl-Z is handled separately for job control. * - Ctrl-m is the same as Return/Enter. * - Ctrl-i is the same as Tab. * * For all other key values in the range the Ctrl flag * is set and the key value is updated to the proper * ASCII value. */ if (KEY_CTL('@') <= key_value && key_value <= KEY_CTL('y') && key_value != KEY_RETURN && key_value != KEY_TAB) { key->modifiers.control = 1; key_value = key_value | 0x40; } if ((key_value >= KEY_MIN && key_value < KEY_MAX) || key_value < 0x1F) { key->data.value = key_value; return key->data.value; } key->modifiers.multibytes = 1; key->data.bytes[0] = key_value; key_length = utf8_char_length(key->data.bytes); for (pos = 1; pos < key_length && pos < sizeof(key->data.bytes) - 1; pos++) { key->data.bytes[pos] = wgetch(status_win); } return OK; } } } void enable_mouse(bool enable) { #ifdef NCURSES_MOUSE_VERSION static bool enabled = false; if (enable != enabled) { mmask_t mask = enable ? ALL_MOUSE_EVENTS : 0; if (mousemask(mask, NULL)) mouseinterval(0); enabled = enable; } #endif } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/draw.c000066400000000000000000000424131332650737300142060ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/graph.h" #include "tig/draw.h" #include "tig/options.h" #include "compat/hashtab.h" static const enum line_type palette_colors[] = { LINE_PALETTE_0, LINE_PALETTE_1, LINE_PALETTE_2, LINE_PALETTE_3, LINE_PALETTE_4, LINE_PALETTE_5, LINE_PALETTE_6, LINE_PALETTE_7, LINE_PALETTE_8, LINE_PALETTE_9, LINE_PALETTE_10, LINE_PALETTE_11, LINE_PALETTE_12, LINE_PALETTE_13, }; /* * View drawing. */ static inline void set_view_attr(struct view *view, enum line_type type) { if (!view->curline->selected && view->curtype != type) { (void) wattrset(view->win, get_view_attr(view, type)); wchgat(view->win, -1, 0, get_view_color(view, type), NULL); view->curtype = type; } } #define VIEW_MAX_LEN(view) ((view)->width + (view)->pos.col - (view)->col) static bool draw_chars(struct view *view, enum line_type type, const char *string, int length, int max_width, bool use_tilde) { int len = 0; int col = 0; int trimmed = false; size_t skip = view->pos.col > view->col ? view->pos.col - view->col : 0; if (max_width <= 0) return VIEW_MAX_LEN(view) <= 0; len = utf8_length(&string, length, skip, &col, max_width, &trimmed, use_tilde, opt_tab_size); if (opt_iconv_out != ICONV_NONE) { string = encoding_iconv(opt_iconv_out, string, len); if (!string) return VIEW_MAX_LEN(view) <= 0; } set_view_attr(view, type); if (len > 0) waddnstr(view->win, string, len); if (trimmed && use_tilde) { set_view_attr(view, LINE_DELIMITER); waddstr(view->win, opt_truncation_delimiter ? opt_truncation_delimiter : "~"); col++; } view->col += col; return VIEW_MAX_LEN(view) <= 0; } static bool draw_space(struct view *view, enum line_type type, int max, int spaces) { static char space[] = " "; spaces = MIN(max, spaces); while (spaces > 0) { int len = MIN(spaces, sizeof(space) - 1); if (draw_chars(view, type, space, -1, len, false)) return true; spaces -= len; } return VIEW_MAX_LEN(view) <= 0; } static bool draw_text_expanded(struct view *view, enum line_type type, const char *string, int length, int max_width, bool use_tilde) { static char text[SIZEOF_STR]; if (length == -1) length = strlen(string); do { size_t pos = string_expand(text, sizeof(text), string, length, opt_tab_size); size_t col = view->col; if (draw_chars(view, type, text, -1, max_width, use_tilde)) return true; string += pos; length -= pos; max_width -= view->col - col; } while (*string && length > 0); return VIEW_MAX_LEN(view) <= 0; } static inline bool draw_textn(struct view *view, enum line_type type, const char *string, int length) { return draw_text_expanded(view, type, string, length, VIEW_MAX_LEN(view), false); } bool draw_text(struct view *view, enum line_type type, const char *string) { return draw_textn(view, type, string, -1); } static bool draw_text_overflow(struct view *view, const char *text, enum line_type type, int overflow_length, int offset) { bool on = overflow_length > 0; if (on) { int overflow = overflow_length + offset; int max = MIN(VIEW_MAX_LEN(view), overflow); const char *tmp = text; int text_width = 0; int trimmed = false; size_t len = utf8_length(&tmp, -1, 0, &text_width, max, &trimmed, false, 1); if (draw_text_expanded(view, type, text, -1, text_width, max < overflow)) return true; text += len; type = LINE_OVERFLOW; } if (*text && draw_text(view, type, text)) return true; return VIEW_MAX_LEN(view) <= 0; } bool PRINTF_LIKE(3, 4) draw_formatted(struct view *view, enum line_type type, const char *format, ...) { char text[SIZEOF_STR]; int retval; FORMAT_BUFFER(text, sizeof(text), format, retval, true); return retval >= 0 ? draw_text(view, type, text) : VIEW_MAX_LEN(view) <= 0; } bool draw_graphic(struct view *view, enum line_type type, const chtype graphic[], size_t size, bool separator) { size_t skip = view->pos.col > view->col ? view->pos.col - view->col : 0; int max = VIEW_MAX_LEN(view); int i; if (max < size) size = max; set_view_attr(view, type); /* Using waddch() instead of waddnstr() ensures that * they'll be rendered correctly for the cursor line. */ for (i = skip; i < size; i++) waddch(view->win, graphic[i]); view->col += size; if (separator) { if (size < max && skip <= size) waddch(view->win, ' '); view->col++; } return VIEW_MAX_LEN(view) <= 0; } bool draw_field(struct view *view, enum line_type type, const char *text, int width, enum align align, bool trim) { int max = MIN(VIEW_MAX_LEN(view), width + 1); int col = view->col; if (!text) return draw_space(view, type, max, max); if (align == ALIGN_RIGHT) { int textlen = utf8_width_max(text, max); int leftpad = max - textlen - 1; if (leftpad > 0) { if (draw_space(view, type, leftpad, leftpad)) return true; max -= leftpad; col += leftpad;; } } return draw_chars(view, type, text, -1, max - 1, trim) || draw_space(view, type, max - (view->col - col), max); } static bool draw_date(struct view *view, struct view_column *column, const struct time *time) { struct date_options *opt = &column->opt.date; enum date date = opt->display; const char *text = mkdate(time, date, opt->local, opt->format); enum align align = date == DATE_RELATIVE ? ALIGN_RIGHT : ALIGN_LEFT; if (date == DATE_NO) return false; return draw_field(view, LINE_DATE, text, column->width, align, false); } static bool draw_author(struct view *view, struct view_column *column, const struct ident *author) { bool trim = author_trim(column->width); const char *text = mkauthor(author, MAX(column->opt.author.width, column->opt.author.maxwidth), column->opt.author.display); if (column->opt.author.display == AUTHOR_NO) return false; return draw_field(view, LINE_AUTHOR, text, column->width, ALIGN_LEFT, trim); } static bool draw_id(struct view *view, struct view_column *column, const char *id) { enum line_type type = LINE_ID; if (!column->opt.id.display) return false; if (column->opt.id.color && id) { hashval_t color = iterative_hash(id, SIZEOF_REV - 1, 0); type = palette_colors[color % ARRAY_SIZE(palette_colors)]; } return draw_field(view, type, id, column->width, ALIGN_LEFT, false); } static bool draw_filename(struct view *view, struct view_column *column, const char *filename, mode_t mode) { size_t width = filename ? utf8_width(filename) : 0; bool trim = width >= column->width; enum line_type type = S_ISDIR(mode) ? LINE_DIRECTORY : LINE_FILE; int column_width = column->width ? column->width : width; if (column->opt.file_name.display == FILENAME_NO) return false; return draw_field(view, type, filename, column_width, ALIGN_LEFT, trim); } static bool draw_file_size(struct view *view, struct view_column *column, unsigned long size, mode_t mode) { const char *str = S_ISDIR(mode) ? NULL : mkfilesize(size, column->opt.file_size.display); if (!column->width || column->opt.file_size.display == FILE_SIZE_NO) return false; return draw_field(view, LINE_FILE_SIZE, str, column->width, ALIGN_RIGHT, false); } static bool draw_mode(struct view *view, struct view_column *column, mode_t mode) { const char *str = mkmode(mode); if (!column->width || !column->opt.mode.display) return false; return draw_field(view, LINE_MODE, str, column->width, ALIGN_LEFT, false); } static bool draw_lineno_custom(struct view *view, struct view_column *column, unsigned int lineno) { char number[10]; unsigned long digits3 = MIN(9,MAX(3,column->width)); int max = MIN(VIEW_MAX_LEN(view), digits3); char *text = NULL; chtype separator = opt_line_graphics ? ACS_VLINE : '|'; struct line_number_options *opts = &column->opt.line_number; int interval = opts->interval > 0 ? opts->interval : 5; if (!column->opt.line_number.display) return false; if (lineno == 1 || (lineno % interval) == 0) { static char fmt[] = "%ld"; fmt[1] = '0' + digits3; if (string_format(number, fmt, lineno)) text = number; } if (text) draw_chars(view, LINE_LINE_NUMBER, text, -1, max, true); else draw_space(view, LINE_LINE_NUMBER, max, digits3); return draw_graphic(view, LINE_DEFAULT, &separator, 1, true); } bool draw_lineno(struct view *view, struct view_column *column, unsigned int lineno, bool add_offset) { lineno += 1; if (add_offset) lineno += view->pos.offset; return draw_lineno_custom(view, column, lineno); } static bool draw_ref(struct view *view, struct view_column *column, const struct ref *ref) { enum line_type type = !ref || !ref->valid ? LINE_DEFAULT : get_line_type_from_ref(ref); const char *name = ref ? ref->name : NULL; return draw_field(view, type, name, column->width, ALIGN_LEFT, false); } static bool draw_refs(struct view *view, struct view_column *column, const struct ref *refs) { if (!column->opt.commit_title.refs || !refs) return false; for (; refs; refs = refs->next) { const struct ref *ref = refs; enum line_type type = get_line_type_from_ref(ref); const struct ref_format *format = get_ref_format(opt_reference_format, ref); if (!strcmp(format->start, "hide:") && !*format->end) continue; if (draw_formatted(view, type, "%s%s%s", format->start, ref->name, format->end)) return true; if (draw_text(view, LINE_DEFAULT, " ")) return true; } return false; } static bool draw_status(struct view *view, struct view_column *column, enum line_type type, const char *status) { const char *label = mkstatus(status ? *status : 0, column->opt.status.display); return draw_field(view, type, label, column->width, ALIGN_LEFT, false); } /* * Revision graph */ static inline enum line_type get_graph_color(int color_id) { if (color_id == GRAPH_COMMIT_COLOR) return LINE_GRAPH_COMMIT; assert(color_id < ARRAY_SIZE(palette_colors)); return palette_colors[color_id]; } static bool draw_graph_utf8(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first) { const char *chars = graph->symbol_to_utf8(symbol); return draw_text(view, get_graph_color(color_id), chars + !!first); } static bool draw_graph_ascii(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first) { const char *chars = graph->symbol_to_ascii(symbol); return draw_text(view, get_graph_color(color_id), chars + !!first); } static bool draw_graph_chtype(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first) { const chtype *chars = graph->symbol_to_chtype(symbol); return draw_graphic(view, get_graph_color(color_id), chars + !!first, 2 - !!first, false); } static bool draw_graph(struct view *view, const struct graph *graph, const struct graph_canvas *canvas) { static const graph_symbol_iterator_fn fns[] = { draw_graph_ascii, draw_graph_chtype, draw_graph_utf8 }; graph->foreach_symbol(graph, canvas, fns[opt_line_graphics], view); return draw_text(view, LINE_DEFAULT, " "); } static bool draw_commit_title(struct view *view, struct view_column *column, const struct graph *graph, const struct graph_canvas *graph_canvas, const struct ref *refs, const char *commit_title) { if (graph && graph_canvas && column->opt.commit_title.graph && draw_graph(view, graph, graph_canvas)) return true; if (draw_refs(view, column, refs)) return true; return draw_text_overflow(view, commit_title, LINE_DEFAULT, column->opt.commit_title.overflow, 0); } bool view_column_draw(struct view *view, struct line *line, unsigned int lineno) { struct view_column *column = view->columns; struct view_column_data column_data = {0}; if (!view->ops->get_column_data(view, line, &column_data)) return true; if (column_data.section) column = column_data.section; for (; column; column = column->next) { mode_t mode = column_data.mode ? *column_data.mode : 0; if (column->hidden) continue; switch (column->type) { case VIEW_COLUMN_DATE: if (draw_date(view, column, column_data.date)) return true; continue; case VIEW_COLUMN_AUTHOR: if (draw_author(view, column, column_data.author)) return true; continue; case VIEW_COLUMN_REF: if (draw_ref(view, column, column_data.ref)) return true; continue; case VIEW_COLUMN_ID: if (draw_id(view, column, column_data.reflog ? column_data.reflog : column_data.id)) return true; continue; case VIEW_COLUMN_LINE_NUMBER: /* Avoid corrupting line numbers (which actually are search results) * in grep mode by special-treating that view. */ if (draw_lineno(view, column, column_data.line_number ? *column_data.line_number : lineno, !view_has_flags(view, VIEW_GREP_LIKE))) return true; continue; case VIEW_COLUMN_MODE: if (draw_mode(view, column, mode)) return true; continue; case VIEW_COLUMN_FILE_SIZE: if (draw_file_size(view, column, column_data.file_size ? *column_data.file_size : 0, mode)) return true; continue; case VIEW_COLUMN_COMMIT_TITLE: if (draw_commit_title(view, column, column_data.graph, column_data.graph_canvas, column_data.refs, column_data.commit_title)) return true; continue; case VIEW_COLUMN_FILE_NAME: if (draw_filename(view, column, column_data.file_name, mode)) return true; continue; case VIEW_COLUMN_SECTION: if (draw_text(view, column->opt.section.type, column->opt.section.text)) return true; continue; case VIEW_COLUMN_STATUS: if (draw_status(view, column, line->type, column_data.status)) return true; continue; case VIEW_COLUMN_TEXT: { enum line_type type = line->type; const char *text = column_data.text; if (line->wrapped && draw_text(view, LINE_DELIMITER, "+")) return true; if (line->graph_indent) { size_t indent = get_graph_indent(text); if (draw_text_expanded(view, LINE_DEFAULT, text, -1, indent, false)) return true; text += indent; } if (line->commit_title) { if (draw_text_overflow(view, text, LINE_DEFAULT, column->opt.text.commit_title_overflow, 4)) return true; } else if (column_data.box) { const struct box *box = column_data.box; const char *text = box->text; size_t i; for (i = 0; i < box->cells; i++) { const struct box_cell *cell = &box->cell[i]; if (draw_textn(view, cell->type, text, cell->length)) return true; text += cell->length; } } else if (draw_text(view, type, text)) { return true; } } continue; } } return true; } static void draw_view_line_search_result(struct view *view, unsigned int lineno) { size_t bufsize = view->width * 4; char *buf = malloc(bufsize + 1); regmatch_t pmatch[1]; regoff_t bufpos = 0; if (!buf || mvwinnstr(view->win, lineno, 0, buf, bufsize) == ERR) { free(buf); return; } while (bufpos < bufsize && !regexec(view->regex, buf + bufpos, ARRAY_SIZE(pmatch), pmatch, 0)) { regoff_t start = pmatch[0].rm_so; regoff_t end = pmatch[0].rm_eo; if (start == -1 || end <= 0 || end <= start) continue; mvwchgat(view->win, lineno, utf8_width_of(buf, bufpos + start, -1), utf8_width_of(buf + bufpos + start, end - start, -1), get_view_attr(view, LINE_SEARCH_RESULT), get_view_color(view, LINE_SEARCH_RESULT), NULL); bufpos += end; } free(buf); } bool draw_view_line(struct view *view, unsigned int lineno) { struct line *line; bool selected = (view->pos.offset + lineno == view->pos.lineno); bool ok; /* FIXME: Disabled during code split. assert(view_is_displayed(view)); */ if (view->pos.offset + lineno >= view->lines) return false; line = &view->line[view->pos.offset + lineno]; wmove(view->win, lineno, 0); if (line->cleareol) wclrtoeol(view->win); view->col = 0; view->curline = line; view->curtype = LINE_NONE; line->selected = false; line->dirty = line->cleareol = 0; if (selected) { set_view_attr(view, LINE_CURSOR); line->selected = true; view->ops->select(view, line); } ok = view->ops->draw(view, line, lineno); if (ok && line->search_result && view->regex) draw_view_line_search_result(view, lineno); return ok; } void redraw_view_dirty(struct view *view) { bool dirty = false; int lineno; for (lineno = 0; lineno < view->height; lineno++) { if (view->pos.offset + lineno >= view->lines) break; if (!view->line[view->pos.offset + lineno].dirty) continue; dirty = true; if (!draw_view_line(view, lineno)) break; } if (!dirty) return; wnoutrefresh(view->win); } void redraw_view_from(struct view *view, int lineno) { assert(0 <= lineno && lineno < view->height); if (view->columns && view_column_info_changed(view, false)) { int i; view_column_reset(view); for (i = 0; i < view->lines; i++) { view_column_info_update(view, &view->line[i]); } } for (; lineno < view->height; lineno++) { if (!draw_view_line(view, lineno)) break; } wnoutrefresh(view->win); } void redraw_view(struct view *view) { werase(view->win); redraw_view_from(view, 0); } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/graph-v1.c000066400000000000000000000255711332650737300147040ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/util.h" #include "tig/graph.h" struct graph_symbol { unsigned int color:8; unsigned int bold:1; unsigned int commit:1; unsigned int branch:1; unsigned int boundary:1; unsigned int initial:1; unsigned int merge:1; unsigned int vbranch:1; unsigned int branched:1; }; struct graph_column { struct graph_symbol symbol; char id[SIZEOF_REV]; /* Parent SHA1 ID. */ }; struct graph_row { size_t size; struct graph_column *columns; }; struct graph_v1 { struct graph api; struct graph_row row; struct graph_row parents; size_t position; size_t expanded; const char *id; struct graph_canvas *canvas; size_t colors[GRAPH_COLORS]; bool has_parents; bool is_boundary; }; DEFINE_ALLOCATOR(realloc_graph_columns, struct graph_column, 32) DEFINE_ALLOCATOR(realloc_graph_symbols, struct graph_symbol, 1) static size_t get_free_graph_color(struct graph_v1 *graph) { size_t i, free_color; for (free_color = i = 0; i < ARRAY_SIZE(graph->colors); i++) { if (graph->colors[i] < graph->colors[free_color]) free_color = i; } graph->colors[free_color]++; return free_color; } static void done_graph(struct graph *graph_) { struct graph_v1 *graph = graph_->private; free(graph); } static void done_graph_rendering(struct graph *graph_) { struct graph_v1 *graph = graph_->private; free(graph->row.columns); free(graph->parents.columns); } #define graph_column_has_commit(col) ((col)->id[0]) static size_t graph_find_column_by_id(struct graph_row *row, const char *id) { size_t free_column = row->size; size_t i; for (i = 0; i < row->size; i++) { if (!graph_column_has_commit(&row->columns[i])) free_column = i; else if (!strcmp(row->columns[i].id, id)) return i; } return free_column; } static struct graph_column * graph_insert_column(struct graph_v1 *graph, struct graph_row *row, size_t pos, const char *id) { struct graph_column *column; if (!realloc_graph_columns(&row->columns, row->size, 1)) return NULL; column = &row->columns[pos]; if (pos < row->size) { memmove(column + 1, column, sizeof(*column) * (row->size - pos)); } row->size++; memset(column, 0, sizeof(*column)); string_copy_rev(column->id, id); column->symbol.boundary = !!graph->is_boundary; return column; } bool graph_add_parent(struct graph *graph_, const char *parent) { struct graph_v1 *graph = graph_->private; if (graph->has_parents) return true; return graph_insert_column(graph, &graph->parents, graph->parents.size, parent) != NULL; } static bool graph_needs_expansion(struct graph_v1 *graph) { return graph->position + graph->parents.size > graph->row.size; #if 0 return graph->parents.size > 1 && graph->expanded < graph->parents.size; #endif } static bool graph_expand(struct graph_v1 *graph) { while (graph_needs_expansion(graph)) { if (!graph_insert_column(graph, &graph->row, graph->position + graph->expanded, "")) return false; graph->expanded++; } return true; } static bool graph_needs_collapsing(struct graph_v1 *graph) { return graph->row.size > 1 && !graph_column_has_commit(&graph->row.columns[graph->row.size - 1]); } static bool graph_collapse(struct graph_v1 *graph) { while (graph_needs_collapsing(graph)) { graph->row.size--; } return true; } static void graph_reorder_parents(struct graph_v1 *graph) { struct graph_row *row = &graph->row; struct graph_row *parents = &graph->parents; int i; if (parents->size == 1) return; for (i = 0; i < parents->size; i++) { struct graph_column *column = &parents->columns[i]; size_t match = graph_find_column_by_id(row, column->id); if (match < graph->position && graph_column_has_commit(&row->columns[match])) { //die("Reorder: %s -> %s", graph->commit->id, column->id); // row->columns[match].symbol.initial = 1; } } } static void graph_canvas_append_symbol(struct graph_v1 *graph, struct graph_symbol *symbol) { struct graph_canvas *canvas = graph->canvas; if (realloc_graph_symbols(&canvas->symbols, canvas->size, 1)) canvas->symbols[canvas->size++] = *symbol; } static bool graph_insert_parents(struct graph_v1 *graph) { struct graph_row *row = &graph->row; struct graph_row *parents = &graph->parents; size_t orig_size = row->size; bool branched = false; bool merge = parents->size > 1; int pos; assert(!graph_needs_expansion(graph)); for (pos = 0; pos < graph->position; pos++) { struct graph_column *column = &row->columns[pos]; struct graph_symbol symbol = column->symbol; if (graph_column_has_commit(column)) { size_t match = graph_find_column_by_id(parents, column->id); if (match < parents->size) { column->symbol.initial = 1; } symbol.branch = 1; } symbol.vbranch = !!branched; if (!strcmp(column->id, graph->id)) { branched = true; column->id[0] = 0; } graph_canvas_append_symbol(graph, &symbol); } for (; pos < graph->position + parents->size; pos++) { struct graph_column *old = &row->columns[pos]; struct graph_column *new = &parents->columns[pos - graph->position]; struct graph_symbol symbol = old->symbol; symbol.merge = !!merge; if (pos == graph->position) { symbol.commit = 1; if (new->symbol.boundary) { symbol.boundary = 1; } else if (!graph_column_has_commit(new)) { symbol.initial = 1; } } else if (!strcmp(old->id, new->id) && orig_size == row->size) { symbol.vbranch = 1; symbol.branch = 1; //symbol.merge = 1; } else if (parents->size > 1) { symbol.merge = 1; symbol.vbranch = !(pos == graph->position + parents->size - 1); } else if (graph_column_has_commit(old)) { symbol.branch = 1; } graph_canvas_append_symbol(graph, &symbol); if (!graph_column_has_commit(old)) new->symbol.color = get_free_graph_color(graph); *old = *new; } for (; pos < row->size; pos++) { bool too = !strcmp(row->columns[row->size - 1].id, graph->id); struct graph_symbol symbol = row->columns[pos].symbol; symbol.vbranch = !!too; if (row->columns[pos].id[0]) { symbol.branch = 1; if (!strcmp(row->columns[pos].id, graph->id)) { symbol.branched = 1; if (too && pos != row->size - 1) { symbol.vbranch = 1; } else { symbol.vbranch = 0; } row->columns[pos].id[0] = 0; } } graph_canvas_append_symbol(graph, &symbol); } graph->parents.size = graph->expanded = graph->position = 0; return true; } static bool graph_render_parents(struct graph *graph_, struct graph_canvas *canvas) { struct graph_v1 *graph = graph_->private; if (!graph_expand(graph)) return false; graph_reorder_parents(graph); graph_insert_parents(graph); if (!graph_collapse(graph)) return false; return true; } static bool graph_is_merge(struct graph_canvas *canvas) { return !!canvas->symbols->merge; } static bool graph_add_commit(struct graph *graph_, struct graph_canvas *canvas, const char *id, const char *parents, bool is_boundary) { struct graph_v1 *graph = graph_->private; int has_parents = 0; graph->position = graph_find_column_by_id(&graph->row, id); graph->id = id; graph->canvas = canvas; graph->is_boundary = is_boundary; graph->has_parents = false; while ((parents = strchr(parents, ' '))) { parents++; if (!graph_add_parent(graph_, parents)) return false; has_parents++; } if (graph->parents.size == 0 && !graph_add_parent(graph_, "")) return false; graph->has_parents = has_parents > 0; return true; } static const char * graph_symbol_to_utf8(const struct graph_symbol *symbol) { if (symbol->commit) { if (symbol->boundary) return " â—¯"; else if (symbol->initial) return " â—Ž"; else if (symbol->merge) return " â—"; return " ∙"; } if (symbol->merge) { if (symbol->branch) { return "â”┪"; } if (symbol->vbranch) return "â”┯"; return "â”┑"; } if (symbol->branch) { if (symbol->branched) { if (symbol->vbranch) return "─┴"; return "─┘"; } if (symbol->vbranch) return "─│"; return " │"; } if (symbol->vbranch) return "──"; return " "; } static const chtype * graph_symbol_to_chtype(const struct graph_symbol *symbol) { static chtype graphics[2]; if (symbol->commit) { graphics[0] = ' '; if (symbol->boundary) graphics[1] = 'o'; else if (symbol->initial) graphics[1] = 'I'; else if (symbol->merge) graphics[1] = 'M'; else graphics[1] = 'o'; //ACS_DIAMOND; //'*'; return graphics; } if (symbol->merge) { graphics[0] = ACS_HLINE; if (symbol->branch) graphics[1] = ACS_RTEE; else graphics[1] = ACS_URCORNER; return graphics; } if (symbol->branch) { graphics[0] = ACS_HLINE; if (symbol->branched) { if (symbol->vbranch) graphics[1] = ACS_BTEE; else graphics[1] = ACS_LRCORNER; return graphics; } if (!symbol->vbranch) graphics[0] = ' '; graphics[1] = ACS_VLINE; return graphics; } if (symbol->vbranch) { graphics[0] = graphics[1] = ACS_HLINE; } else graphics[0] = graphics[1] = ' '; return graphics; } static const char * graph_symbol_to_ascii(const struct graph_symbol *symbol) { if (symbol->commit) { if (symbol->boundary) return " o"; else if (symbol->initial) return " I"; else if (symbol->merge) return " M"; return " *"; } if (symbol->merge) { if (symbol->branch) return "-+"; return "-."; } if (symbol->branch) { if (symbol->branched) { if (symbol->vbranch) return "-+"; return "-'"; } if (symbol->vbranch) return "-|"; return " |"; } if (symbol->vbranch) return "--"; return " "; } static void graph_foreach_symbol(const struct graph *graph, const struct graph_canvas *canvas, graph_symbol_iterator_fn fn, void *data) { int i; for (i = 0; i < canvas->size; i++) { struct graph_symbol *symbol = &canvas->symbols[i]; int color_id = symbol->commit ? GRAPH_COMMIT_COLOR : symbol->color; if (fn(data, graph, symbol, color_id, i == 0)) break; } } struct graph * init_graph_v1(void) { struct graph_v1 *graph = calloc(1, sizeof(*graph)); struct graph *api = &graph->api; api->private = graph; api->done = done_graph; api->done_rendering = done_graph_rendering; api->add_commit = graph_add_commit; api->add_parent = graph_add_parent; api->render_parents = graph_render_parents; api->is_merge = graph_is_merge; api->foreach_symbol = graph_foreach_symbol; api->symbol_to_ascii = graph_symbol_to_ascii; api->symbol_to_utf8 = graph_symbol_to_utf8; api->symbol_to_chtype = graph_symbol_to_chtype; return api; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/graph-v2.c000066400000000000000000000634231332650737300147030ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/util.h" #include "tig/graph.h" #include "compat/hashtab.h" struct graph_symbol { unsigned int color:8; unsigned int commit:1; unsigned int boundary:1; unsigned int initial:1; unsigned int merge:1; unsigned int continued_down:1; unsigned int continued_up:1; unsigned int continued_right:1; unsigned int continued_left:1; unsigned int continued_up_left:1; unsigned int parent_down:1; unsigned int parent_right:1; unsigned int below_commit:1; unsigned int flanked:1; unsigned int next_right:1; unsigned int matches_commit:1; unsigned int shift_left:1; unsigned int continue_shift:1; unsigned int below_shift:1; unsigned int new_column:1; unsigned int empty:1; }; struct graph_column { struct graph_symbol symbol; const char *id; /* Parent SHA1 ID. */ }; struct graph_row { size_t size; struct graph_column *columns; }; struct colors { htab_t id_map; size_t count[GRAPH_COLORS]; }; struct graph_v2 { struct graph api; struct graph_row row; struct graph_row parents; struct graph_row prev_row; struct graph_row next_row; size_t position; size_t prev_position; size_t expanded; const char *id; struct colors colors; bool has_parents; bool is_boundary; }; DEFINE_ALLOCATOR(realloc_graph_columns, struct graph_column, 32) DEFINE_ALLOCATOR(realloc_graph_symbols, struct graph_symbol, 1) static htab_t intern_string_htab; static int intern_string_eq(const void *entry, const void *element) { return strcmp((const char *) entry, (const char *) element) == 0; } static hashval_t intern_string_hash(const void *node) { return htab_hash_string((const char *) node); } static const char *intern_string(const char *str) { void **result; if (!str) return NULL; if (!intern_string_htab) intern_string_htab = htab_create_alloc(500, intern_string_hash, intern_string_eq, free, calloc, free); result = htab_find_slot(intern_string_htab, str, INSERT); if (!*result) *result = strdup(str); return *result; } struct id_color { char *id; size_t color; }; struct id_color * id_color_new(const char *id, size_t color) { struct id_color *node = malloc(sizeof(struct id_color)); node->id = (char *) malloc(strlen(id) + 1); strcpy(node->id, id); node->color = color; return node; } static void id_color_delete(struct id_color *node) { free(node->id); free(node); } static int id_color_eq(const void *entry, const void *element) { return strcmp(((const struct id_color *) entry)->id, ((const struct id_color *) element)->id) == 0; } static void key_del(void *key) { id_color_delete((struct id_color *) key); } static hashval_t id_color_hash(const void *node) { return htab_hash_string(((const struct id_color*) node)->id); } static void colors_add_id(struct colors *colors, const char *id, const size_t color) { struct id_color *node = id_color_new(id, color); void **slot = htab_find_slot(colors->id_map, node, INSERT); if (slot != NULL && *slot == NULL) { *slot = node; colors->count[color]++; } else { id_color_delete(node); } } static void colors_remove_id(struct colors *colors, const char *id) { struct id_color *node = id_color_new(id, 0); void **slot = htab_find_slot(colors->id_map, node, NO_INSERT); if (slot != NULL && *slot != NULL) { colors->count[((struct id_color *) *slot)->color]--; htab_clear_slot(colors->id_map, slot); } id_color_delete(node); } static size_t colors_get_color(struct colors *colors, const char *id) { struct id_color *key = id_color_new(id, 0); struct id_color *node = (struct id_color *) htab_find(colors->id_map, key); id_color_delete(key); if (node == NULL) { return (size_t) -1; // Max value of size_t. ID not found. } return node->color; } static size_t colors_get_free_color(struct colors *colors) { size_t free_color = 0; size_t lowest = (size_t) -1; // Max value of size_t int i; for (i = 0; i < ARRAY_SIZE(colors->count); i++) { if (colors->count[i] < lowest) { lowest = colors->count[i]; free_color = i; } } return free_color; } static void colors_init(struct colors *colors) { if (colors->id_map == NULL) { uint size = 500; colors->id_map = htab_create_alloc(size, id_color_hash, id_color_eq, key_del, calloc, free); } } static size_t get_color(struct graph_v2 *graph, const char *new_id) { size_t color; if (!new_id) new_id = ""; colors_init(&graph->colors); color = colors_get_color(&graph->colors, new_id); if (color < (size_t) -1) { return color; } color = colors_get_free_color(&graph->colors); colors_add_id(&graph->colors, new_id, color); return color; } static void done_graph_rendering(struct graph *graph_ref) { struct graph_v2 *graph = graph_ref->private; free(graph->prev_row.columns); free(graph->row.columns); free(graph->next_row.columns); free(graph->parents.columns); } static void done_graph(struct graph *graph_ref) { struct graph_v2 *graph = graph_ref->private; free(graph); if (intern_string_htab) htab_empty(intern_string_htab); } #define graph_column_has_commit(col) ((col)->id) static size_t graph_find_column_by_id(struct graph_row *row, const char *id) { size_t free_column = row->size; size_t i; for (i = 0; i < row->size; i++) { if (!graph_column_has_commit(&row->columns[i]) && free_column == row->size) free_column = i; else if (row->columns[i].id == id) return i; } return free_column; } static size_t graph_find_free_column(struct graph_row *row) { size_t i; for (i = 0; i < row->size; i++) { if (!graph_column_has_commit(&row->columns[i])) return i; } return row->size; } static struct graph_column * graph_insert_column(struct graph_v2 *graph, struct graph_row *row, size_t pos, const char *id) { struct graph_column *column; if (!realloc_graph_columns(&row->columns, row->size, 1)) return NULL; column = &row->columns[pos]; if (pos < row->size) { memmove(column + 1, column, sizeof(*column) * (row->size - pos)); } id = intern_string(id); row->size++; memset(column, 0, sizeof(*column)); column->id = id; column->symbol.boundary = !!graph->is_boundary; return column; } static bool graph_add_parent(struct graph *graph_ref, const char *parent) { struct graph_v2 *graph = graph_ref->private; if (graph->has_parents) return true; return graph_insert_column(graph, &graph->parents, graph->parents.size, parent) != NULL; } static bool graph_needs_expansion(struct graph_v2 *graph) { return graph->position + graph->parents.size > graph->row.size; } static bool graph_expand(struct graph_v2 *graph) { while (graph_needs_expansion(graph)) { if (!graph_insert_column(graph, &graph->prev_row, graph->prev_row.size, NULL)) return false; if (!graph_insert_column(graph, &graph->row, graph->row.size, NULL)) return false; if (!graph_insert_column(graph, &graph->next_row, graph->next_row.size, NULL)) return false; } return true; } static bool graph_needs_collapsing(struct graph_v2 *graph) { return graph->row.size > 1 && !graph_column_has_commit(&graph->row.columns[graph->row.size - 1]); } static bool graph_collapse(struct graph_v2 *graph) { while (graph_needs_collapsing(graph)) { graph->prev_row.size--; graph->row.size--; graph->next_row.size--; } return true; } static void graph_canvas_append_symbol(struct graph_v2 *graph, struct graph_canvas *canvas, struct graph_symbol *symbol) { if (realloc_graph_symbols(&canvas->symbols, canvas->size, 1)) canvas->symbols[canvas->size++] = *symbol; } static void graph_row_clear_commit(struct graph_row *row, const char *id) { int i; for (i = 0; i < row->size; i++) { if (row->columns[i].id == id) { row->columns[i].id = NULL; } } } static void graph_insert_parents(struct graph_v2 *graph) { struct graph_row *prev_row = &graph->prev_row; struct graph_row *row = &graph->row; struct graph_row *next_row = &graph->next_row; struct graph_row *parents = &graph->parents; int i; for (i = 0; i < parents->size; i++) { struct graph_column *new = &parents->columns[i]; if (graph_column_has_commit(new)) { size_t match = graph_find_free_column(next_row); if (match == next_row->size && graph_column_has_commit(&next_row->columns[next_row->size - 1])) { graph_insert_column(graph, next_row, next_row->size, new->id); graph_insert_column(graph, row, row->size, NULL); graph_insert_column(graph, prev_row, prev_row->size, NULL); } else { next_row->columns[match] = *new; } } } } static bool commit_is_in_row(const char *id, struct graph_row *row) { int i; for (i = 0; i < row->size; i++) { if (!graph_column_has_commit(&row->columns[i])) continue; if (id == row->columns[i].id) return true; } return false; } static void graph_remove_collapsed_columns(struct graph_v2 *graph) { struct graph_row *row = &graph->next_row; int i; for (i = row->size - 1; i > 0; i--) { if (i == graph->position) continue; if (i == graph->position + 1) continue; if (row->columns[i].id == graph->id) continue; if (row->columns[i].id != row->columns[i - 1].id) continue; if (commit_is_in_row(row->columns[i].id, &graph->parents) && !graph_column_has_commit(&graph->prev_row.columns[i])) continue; if (row->columns[i - 1].id != graph->prev_row.columns[i - 1].id || graph->prev_row.columns[i - 1].symbol.shift_left) { if (i + 1 >= row->size) memset(&row->columns[i], 0, sizeof(row->columns[i])); else row->columns[i] = row->columns[i + 1]; } } } static void graph_fill_empty_columns(struct graph_v2 *graph) { struct graph_row *row = &graph->next_row; int i; for (i = row->size - 2; i >= 0; i--) { if (!graph_column_has_commit(&row->columns[i])) { row->columns[i] = row->columns[i + 1]; } } } static void graph_generate_next_row(struct graph_v2 *graph) { graph_row_clear_commit(&graph->next_row, graph->id); graph_insert_parents(graph); graph_remove_collapsed_columns(graph); graph_fill_empty_columns(graph); } static int commits_in_row(struct graph_row *row) { int count = 0; int i; for (i = 0; i < row->size;i++) { if (graph_column_has_commit(&row->columns[i])) count++; } return count; } static void graph_commit_next_row(struct graph_v2 *graph) { int i; for (i = 0; i < graph->row.size; i++) { graph->prev_row.columns[i] = graph->row.columns[i]; if (i == graph->position && commits_in_row(&graph->parents) > 0) graph->prev_row.columns[i] = graph->next_row.columns[i]; if (!graph_column_has_commit(&graph->prev_row.columns[i])) graph->prev_row.columns[i] = graph->next_row.columns[i]; graph->row.columns[i] = graph->next_row.columns[i]; } graph->prev_position = graph->position; } static bool continued_down(struct graph_row *row, struct graph_row *next_row, int pos) { if (row->columns[pos].id != next_row->columns[pos].id) return false; if (row->columns[pos].symbol.shift_left) return false; return true; } static bool shift_left(struct graph_row *row, struct graph_row *prev_row, int pos) { int i; if (!graph_column_has_commit(&row->columns[pos])) return false; for (i = pos - 1; i >= 0; i--) { if (!graph_column_has_commit(&row->columns[i])) continue; if (row->columns[i].id != row->columns[pos].id) continue; if (!continued_down(prev_row, row, i)) return true; break; } return false; } static bool new_column(struct graph_row *row, struct graph_row *prev_row, int pos) { int i; if (!graph_column_has_commit(&prev_row->columns[pos])) return true; for (i = pos; i < row->size; i++) { if (row->columns[pos].id == prev_row->columns[i].id) return false; } return true; } static bool continued_right(struct graph_row *row, int pos, int commit_pos) { int i, end; if (pos < commit_pos) end = commit_pos; else end = row->size; for (i = pos + 1; i < end; i++) { if (row->columns[pos].id == row->columns[i].id) return true; } return false; } static bool continued_left(struct graph_row *row, int pos, int commit_pos) { int i, start; if (pos < commit_pos) start = 0; else start = commit_pos; for (i = start; i < pos; i++) { if (!graph_column_has_commit(&row->columns[i])) continue; if (row->columns[pos].id == row->columns[i].id) return true; } return false; } static bool parent_down(struct graph_row *parents, struct graph_row *next_row, int pos) { int parent; for (parent = 0; parent < parents->size; parent++) { if (!graph_column_has_commit(&parents->columns[parent])) continue; if (parents->columns[parent].id == next_row->columns[pos].id) return true; } return false; } static bool parent_right(struct graph_row *parents, struct graph_row *row, struct graph_row *next_row, int pos) { int parent, i; for (parent = 0; parent < parents->size; parent++) { if (!graph_column_has_commit(&parents->columns[parent])) continue; for (i = pos + 1; i < next_row->size; i++) { if (parents->columns[parent].id != next_row->columns[i].id) continue; if (parents->columns[parent].id != row->columns[i].id) return true; } } return false; } static bool flanked(struct graph_row *row, int pos, int commit_pos, const char *commit_id) { int i, start, end; if (pos < commit_pos) { start = 0; end = pos; } else { start = pos + 1; end = row->size; } for (i = start; i < end; i++) { if (row->columns[i].id == commit_id) return true; } return false; } static bool below_commit(int pos, struct graph_v2 *graph) { if (pos != graph->prev_position) return false; if (graph->row.columns[pos].id != graph->prev_row.columns[pos].id) return false; return true; } static void graph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas) { struct graph_row *prev_row = &graph->prev_row; struct graph_row *row = &graph->row; struct graph_row *next_row = &graph->next_row; struct graph_row *parents = &graph->parents; int commits = commits_in_row(parents); int initial = commits < 1; int merge = commits > 1; int pos; for (pos = 0; pos < row->size; pos++) { struct graph_column *column = &row->columns[pos]; struct graph_symbol *symbol = &column->symbol; const char *id = next_row->columns[pos].id; symbol->commit = (pos == graph->position); symbol->boundary = (pos == graph->position && next_row->columns[pos].symbol.boundary); symbol->initial = initial; symbol->merge = merge; symbol->continued_down = continued_down(row, next_row, pos); symbol->continued_up = continued_down(prev_row, row, pos); symbol->continued_right = continued_right(row, pos, graph->position); symbol->continued_left = continued_left(row, pos, graph->position); symbol->continued_up_left = continued_left(prev_row, pos, prev_row->size); symbol->parent_down = parent_down(parents, next_row, pos); symbol->parent_right = (pos > graph->position && parent_right(parents, row, next_row, pos)); symbol->below_commit = below_commit(pos, graph); symbol->flanked = flanked(row, pos, graph->position, graph->id); symbol->next_right = continued_right(next_row, pos, 0); symbol->matches_commit = column->id == graph->id; symbol->shift_left = shift_left(row, prev_row, pos); symbol->continue_shift = (pos + 1 < row->size) ? shift_left(row, prev_row, pos + 1) : 0; symbol->below_shift = prev_row->columns[pos].symbol.shift_left; symbol->new_column = new_column(row, prev_row, pos); symbol->empty = (!graph_column_has_commit(&row->columns[pos])); if (graph_column_has_commit(column)) { id = column->id; } symbol->color = get_color(graph, id); graph_canvas_append_symbol(graph, canvas, symbol); } colors_remove_id(&graph->colors, graph->id); } static bool graph_render_parents(struct graph *graph_ref, struct graph_canvas *canvas) { struct graph_v2 *graph = graph_ref->private; if (graph->parents.size == 0 && !graph_add_parent(graph_ref, NULL)) return false; if (!graph_expand(graph)) return false; graph_generate_next_row(graph); graph_generate_symbols(graph, canvas); graph_commit_next_row(graph); graph->parents.size = graph->position = 0; if (!graph_collapse(graph)) return false; return true; } static bool graph_is_merge(struct graph_canvas *canvas) { return !!canvas->symbols->merge; } static bool graph_add_commit(struct graph *graph_ref, struct graph_canvas *canvas, const char *id, const char *parents, bool is_boundary) { struct graph_v2 *graph = graph_ref->private; int has_parents = 0; id = intern_string(id); graph->position = graph_find_column_by_id(&graph->row, id); graph->id = id; graph->is_boundary = is_boundary; graph->has_parents = false; while ((parents = strchr(parents, ' '))) { char parent[SIZEOF_REV] = {0}; parents++; string_copy_rev(parent, parents); if (!graph_add_parent(graph_ref, *parent ? parent : NULL)) return false; has_parents++; } graph->has_parents = has_parents > 0; return true; } static bool graph_symbol_forks(const struct graph_symbol *symbol) { if (!symbol->continued_down) return false; if (!symbol->continued_right) return false; if (!symbol->continued_up) return false; return true; } static bool graph_symbol_cross_merge(const struct graph_symbol *symbol) { if (symbol->empty) return false; if (!symbol->continued_up && !symbol->new_column && !symbol->below_commit) return false; if (symbol->shift_left && symbol->continued_up_left) return false; if (symbol->next_right) return false; if (symbol->merge && symbol->continued_up && symbol->continued_right && symbol->continued_left && symbol->parent_down && !symbol->next_right) return true; return false; } static bool graph_symbol_vertical_merge(const struct graph_symbol *symbol) { if (symbol->empty) return false; if (!symbol->continued_up && !symbol->new_column && !symbol->below_commit) return false; if (symbol->shift_left && symbol->continued_up_left) return false; if (symbol->next_right) return false; if (!symbol->matches_commit) return false; if (symbol->merge && symbol->continued_up && symbol->continued_left && symbol->parent_down && !symbol->continued_right) return true; return false; } static bool graph_symbol_cross_over(const struct graph_symbol *symbol) { if (symbol->empty) return false; if (!symbol->continued_down) return false; if (!symbol->continued_up && !symbol->new_column && !symbol->below_commit) return false; if (symbol->shift_left) return false; if (symbol->parent_right && symbol->merge) return true; if (symbol->flanked) return true; return false; } static bool graph_symbol_turn_left(const struct graph_symbol *symbol) { if (symbol->matches_commit && symbol->continued_right && !symbol->continued_down) return false; if (symbol->continue_shift) return false; if (symbol->continued_up || symbol->new_column || symbol->below_commit) { if (symbol->matches_commit) return true; if (symbol->shift_left) return true; } return false; } static bool graph_symbol_turn_down_cross_over(const struct graph_symbol *symbol) { if (!symbol->continued_down) return false; if (!symbol->continued_right) return false; if (!symbol->parent_right && !symbol->flanked) return false; if (symbol->flanked) return true; if (symbol->merge) return true; return false; } static bool graph_symbol_turn_down(const struct graph_symbol *symbol) { if (!symbol->continued_down) return false; if (!symbol->continued_right) return false; return true; } static bool graph_symbol_merge(const struct graph_symbol *symbol) { if (symbol->continued_down) return false; if (!symbol->parent_down) return false; if (symbol->parent_right) return false; if (symbol->continued_right) return false; return true; } static bool graph_symbol_multi_merge(const struct graph_symbol *symbol) { if (!symbol->parent_down) return false; if (!symbol->parent_right && !symbol->continued_right) return false; return true; } static bool graph_symbol_vertical_bar(const struct graph_symbol *symbol) { if (symbol->empty) return false; if (symbol->shift_left) return false; if (!symbol->continued_down) return false; if (symbol->continued_up) return true; if (symbol->parent_right) return false; if (symbol->flanked) return false; if (symbol->continued_right) return false; return true; } static bool graph_symbol_horizontal_bar(const struct graph_symbol *symbol) { if (!symbol->next_right) return false; if (symbol->shift_left) return true; if (symbol->continued_down) return false; if (!symbol->parent_right && !symbol->continued_right) return false; if ((symbol->continued_up && !symbol->continued_up_left)) return false; if (!symbol->below_commit) return true; return false; } static bool graph_symbol_multi_branch(const struct graph_symbol *symbol) { if (symbol->continued_down) return false; if (!symbol->continued_right) return false; if (symbol->below_shift) return false; if (symbol->continued_up || symbol->new_column || symbol->below_commit) { if (symbol->matches_commit) return true; if (symbol->shift_left) return true; } return false; } static const char * graph_symbol_to_utf8(const struct graph_symbol *symbol) { if (symbol->commit) { if (symbol->boundary) return " â—¯"; else if (symbol->initial) return " â—Ž"; else if (symbol->merge) return " â—"; return " ∙"; } if (graph_symbol_cross_merge(symbol)) return "─┼"; if (graph_symbol_vertical_merge(symbol)) return "─┤"; if (graph_symbol_cross_over(symbol)) return "─│"; if (graph_symbol_vertical_bar(symbol)) return " │"; if (graph_symbol_turn_left(symbol)) return "─╯"; if (graph_symbol_multi_branch(symbol)) return "─┴"; if (graph_symbol_horizontal_bar(symbol)) return "──"; if (graph_symbol_forks(symbol)) return " ├"; if (graph_symbol_turn_down_cross_over(symbol)) return "─╭"; if (graph_symbol_turn_down(symbol)) return " â•­"; if (graph_symbol_merge(symbol)) return "─╮"; if (graph_symbol_multi_merge(symbol)) return "─┬"; return " "; } static const chtype * graph_symbol_to_chtype(const struct graph_symbol *symbol) { static chtype graphics[2]; if (symbol->commit) { graphics[0] = ' '; if (symbol->boundary) graphics[1] = 'o'; else if (symbol->initial) graphics[1] = 'I'; else if (symbol->merge) graphics[1] = 'M'; else graphics[1] = 'o'; //ACS_DIAMOND; //'*'; return graphics; } else if (graph_symbol_cross_merge(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_PLUS; } else if (graph_symbol_vertical_merge(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_RTEE; } else if (graph_symbol_cross_over(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_VLINE; } else if (graph_symbol_vertical_bar(symbol)) { graphics[0] = ' '; graphics[1] = ACS_VLINE; } else if (graph_symbol_turn_left(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_LRCORNER; } else if (graph_symbol_multi_branch(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_BTEE; } else if (graph_symbol_horizontal_bar(symbol)) { graphics[0] = graphics[1] = ACS_HLINE; } else if (graph_symbol_forks(symbol)) { graphics[0] = ' '; graphics[1] = ACS_LTEE; } else if (graph_symbol_turn_down_cross_over(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_ULCORNER; } else if (graph_symbol_turn_down(symbol)) { graphics[0] = ' '; graphics[1] = ACS_ULCORNER; } else if (graph_symbol_merge(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_URCORNER; } else if (graph_symbol_multi_merge(symbol)) { graphics[0] = ACS_HLINE; graphics[1] = ACS_TTEE; } else { graphics[0] = graphics[1] = ' '; } return graphics; } static const char * graph_symbol_to_ascii(const struct graph_symbol *symbol) { if (symbol->commit) { if (symbol->boundary) return " o"; else if (symbol->initial) return " I"; else if (symbol->merge) return " M"; return " *"; } if (graph_symbol_cross_merge(symbol)) return "-+"; if (graph_symbol_vertical_merge(symbol)) return "-|"; if (graph_symbol_cross_over(symbol)) return "-|"; if (graph_symbol_vertical_bar(symbol)) return " |"; if (graph_symbol_turn_left(symbol)) return "-'"; if (graph_symbol_multi_branch(symbol)) return "-+"; if (graph_symbol_horizontal_bar(symbol)) return "--"; if (graph_symbol_forks(symbol)) return " +"; if (graph_symbol_turn_down_cross_over(symbol)) return "-."; if (graph_symbol_turn_down(symbol)) return " ."; if (graph_symbol_merge(symbol)) return "-."; if (graph_symbol_multi_merge(symbol)) return "-+"; return " "; } static void graph_foreach_symbol(const struct graph *graph, const struct graph_canvas *canvas, graph_symbol_iterator_fn fn, void *data) { int i; for (i = 0; i < canvas->size; i++) { struct graph_symbol *symbol = &canvas->symbols[i]; int color_id = symbol->commit ? GRAPH_COMMIT_COLOR : symbol->color; if (fn(data, graph, symbol, color_id, i == 0)) break; } } struct graph * init_graph_v2(void) { struct graph_v2 *graph = calloc(1, sizeof(*graph)); struct graph *api; if (!graph) return NULL; api = &graph->api; api->private = graph; api->done = done_graph; api->done_rendering = done_graph_rendering; api->add_commit = graph_add_commit; api->add_parent = graph_add_parent; api->is_merge = graph_is_merge; api->render_parents = graph_render_parents; api->foreach_symbol = graph_foreach_symbol; api->symbol_to_ascii = graph_symbol_to_ascii; api->symbol_to_utf8 = graph_symbol_to_utf8; api->symbol_to_chtype = graph_symbol_to_chtype; return api; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/graph.c000066400000000000000000000016331332650737300143510ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/graph.h" struct graph *init_graph_v1(void); struct graph *init_graph_v2(void); struct graph * init_graph(enum graph_display display) { if (display == GRAPH_DISPLAY_V1) return init_graph_v1(); if (display == GRAPH_DISPLAY_V2) return init_graph_v2(); return NULL; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/grep.c000066400000000000000000000145471332650737300142150ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/refdb.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/repo.h" #include "tig/display.h" #include "tig/prompt.h" #include "tig/draw.h" #include "tig/blob.h" #include "tig/grep.h" struct grep_line { const char *file; unsigned long lineno; char text[1]; }; struct grep_state { const char *last_file; bool no_file_group; }; static struct grep_line * grep_get_line(const struct line *line) { static struct grep_line grep_line; if (line->type == LINE_DEFAULT) return line->data; grep_line.file = line->type == LINE_DELIMITER ? "" : get_path(box_text(line)); return &grep_line; } static bool grep_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { struct grep_line *grep = grep_get_line(line); if (line->type == LINE_DELIMITER) { static struct view_column separator_column; separator_column.type = VIEW_COLUMN_TEXT; column_data->section = &separator_column; column_data->text = "--"; return true; } if (*grep->file && !*grep->text) { static struct view_column file_name_column; file_name_column.type = VIEW_COLUMN_FILE_NAME; file_name_column.opt.file_name.display = FILENAME_ALWAYS; column_data->section = &file_name_column; } column_data->line_number = &grep->lineno; column_data->file_name = grep->file; column_data->text = grep->text; return true; } static void grep_select(struct view *view, struct line *line) { struct grep_line *grep = grep_get_line(line); if (!*grep->file) return; view->env->ref[0] = 0; string_ncopy(view->env->file, grep->file, strlen(grep->file)); string_ncopy(view->ref, grep->file, strlen(grep->file)); view->env->lineno = grep->lineno + 1; } static const char *grep_args[] = { "git", "grep", "--no-color", "-n", "-z", "--full-name", NULL }; static const char **grep_argv; static bool grep_prompt(void) { const char *argv[SIZEOF_ARG]; int argc = 0; char *grep = read_prompt("grep: "); report_clear(); if (!grep || !*grep || !argv_from_string_no_quotes(argv, &argc, grep)) return false; if (grep_argv) argv_free(grep_argv); return argv_append_array(&grep_argv, argv); } void open_grep_view(struct view *prev) { struct view *view = &grep_view; bool in_grep_view = prev == view; if ((!prev && is_initial_view(view)) || (view->lines && !in_grep_view)) { open_view(prev, view, OPEN_DEFAULT); } else { if (grep_prompt()) { clear_position(&view->pos); open_view(prev, view, OPEN_RELOAD); } } } static enum status_code grep_open(struct view *view, enum open_flags flags) { struct grep_state *state = view->private; const char **argv = NULL; if (is_initial_view(view)) { grep_argv = opt_cmdline_args; opt_cmdline_args = NULL; } if (!argv_append_array(&argv, grep_args) || !argv_append_array(&argv, grep_argv)) return ERROR_OUT_OF_MEMORY; { struct view_column *column = get_view_column(view, VIEW_COLUMN_FILE_NAME); state->no_file_group = !column || column->opt.file_name.display != FILENAME_NO; } return begin_update(view, NULL, argv, flags); } static enum request grep_request(struct view *view, enum request request, struct line *line) { struct grep_state *state = view->private; struct grep_line *grep = grep_get_line(line); struct view *file_view = &blob_view; switch (request) { case REQ_REFRESH: refresh_view(view); return REQ_NONE; case REQ_ENTER: if (!*grep->file) return REQ_NONE; if (file_view->parent == view && file_view->prev == view && state->last_file == grep->file && view_is_displayed(file_view)) { if (*grep->text) { select_view_line(file_view, grep->lineno); update_view_title(file_view); } } else { const char *file_argv[] = { repo.cdup, grep->file, NULL }; clear_position(&file_view->pos); view->env->goto_lineno = grep->lineno; view->env->blob[0] = 0; open_argv(view, file_view, file_argv, repo.cdup, OPEN_SPLIT | OPEN_RELOAD); } state->last_file = grep->file; return REQ_NONE; case REQ_EDIT: if (!*grep->file) return request; open_editor(grep->file, grep->lineno + 1); return REQ_NONE; case REQ_VIEW_BLAME: view->env->ref[0] = 0; view->env->goto_lineno = grep->lineno; return request; default: return request; } } static bool grep_read(struct view *view, struct buffer *buf, bool force_stop) { struct grep_state *state = view->private; struct grep_line *grep; char *lineno, *text; struct line *line; const char *file; size_t textlen; if (!buf) { state->last_file = NULL; if (!view->lines) { view->ref[0] = 0; report("No matches found"); } return true; } if (!strcmp(buf->data, "--")) return add_line_nodata(view, LINE_DELIMITER) != NULL; lineno = io_memchr(buf, buf->data, 0); text = io_memchr(buf, lineno, 0); /* * No data indicates binary file matches, e.g.: * > git grep vertical- -- test * test/graph/20-tig-all-long-test:◠│ Add "auto" vertical-split * Binary file test/graph/20-tig-all-long-test.in matches */ if (!lineno || !text) return true; textlen = strlen(text); file = get_path(buf->data); if (!file) return false; if (!state->no_file_group && file != state->last_file && !add_line_text(view, file, LINE_FILE)) return false; line = add_line_alloc(view, &grep, LINE_DEFAULT, textlen, false); if (!line) return false; grep->file = file; grep->lineno = atoi(lineno); if (grep->lineno > 0) grep->lineno -= 1; strncpy(grep->text, text, textlen + 1); view_column_info_update(view, line); state->last_file = file; return true; } static struct view_ops grep_ops = { "line", "", VIEW_REFRESH | VIEW_GREP_LIKE, sizeof(struct grep_state), grep_open, grep_read, view_column_draw, grep_request, view_column_grep, grep_select, NULL, view_column_bit(FILE_NAME) | view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), grep_get_column_data, }; DEFINE_VIEW(grep); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/help.c000066400000000000000000000133421332650737300142000ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/argv.h" #include "tig/view.h" #include "tig/search.h" #include "tig/draw.h" /* * Help backend */ struct help_state { int keys_width; int name_width; }; struct help { struct keymap *keymap; enum request request; union { const char *text; const struct request_info *req_info; } data; }; static bool help_draw(struct view *view, struct line *line, unsigned int lineno) { struct help *help = line->data; const struct keymap *keymap = help->keymap; struct help_state *state = view->private; if (line->type == LINE_SECTION) { draw_formatted(view, line->type, "[%c] %s bindings", keymap->hidden ? '+' : '-', keymap->name); } else if (line->type == LINE_HELP_GROUP || !keymap) { draw_text(view, line->type, help->data.text); } else if (help->request > REQ_RUN_REQUESTS) { struct run_request *req = get_run_request(help->request); const char *key = get_keys(keymap, help->request, true); const char *sep = format_run_request_flags(req); int i; if (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, false)) return true; for (i = 0; req->argv[i]; i++) { if (draw_formatted(view, LINE_HELP_ACTION, "%s%s", sep, req->argv[i])) return true; sep = " "; } } else { const struct request_info *req_info = help->data.req_info; const char *key = get_keys(keymap, req_info->request, true); if (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, false)) return true; if (draw_field(view, LINE_HELP_ACTION, enum_name(req_info->name), state->name_width, ALIGN_LEFT, false)) return true; draw_text(view, LINE_DEFAULT, req_info->help); } return true; } bool help_grep(struct view *view, struct line *line) { struct help *help = line->data; const struct keymap *keymap = help->keymap; if (line->type == LINE_SECTION) { const char *text[] = { keymap->name, NULL }; return grep_text(view, text); } else if (line->type == LINE_HELP_GROUP || !keymap) { const char *text[] = { help->data.text, NULL }; return grep_text(view, text); } else if (help->request > REQ_RUN_REQUESTS) { struct run_request *req = get_run_request(help->request); const char *key = get_keys(keymap, help->request, true); char buf[SIZEOF_STR] = ""; const char *text[] = { key, buf, NULL }; if (!argv_to_string(req->argv, buf, sizeof(buf), " ")) return false; return grep_text(view, text); } else { const struct request_info *req_info = help->data.req_info; const char *key = get_keys(keymap, req_info->request, true); const char *text[] = { key, enum_name(req_info->name), req_info->help, NULL }; return grep_text(view, text); } } struct help_request_iterator { struct view *view; struct keymap *keymap; }; static bool add_help_line(struct view *view, struct help **help_ptr, struct keymap *keymap, enum line_type type) { struct help *help; if (!add_line_alloc(view, &help, type, 0, false)) return false; help->keymap = keymap; if (help_ptr) *help_ptr = help; return true; } static bool help_keys_visitor(void *data, const char *group, struct keymap *keymap, enum request request, const char *key, const struct request_info *req_info, const struct run_request *run_req) { struct help_request_iterator *iterator = data; struct view *view = iterator->view; struct help_state *state = view->private; struct help *help; if (iterator->keymap != keymap) { iterator->keymap = keymap; if (!add_help_line(iterator->view, &help, keymap, LINE_SECTION)) return false; } if (keymap->hidden) return true; if (group) { if (!add_help_line(iterator->view, &help, keymap, LINE_HELP_GROUP)) return false; help->data.text = group; } if (!add_help_line(view, &help, keymap, LINE_DEFAULT)) return false; state->keys_width = MAX(state->keys_width, strlen(key)); help->request = request; if (req_info) { state->name_width = MAX(state->name_width, strlen(enum_name(req_info->name))); help->data.req_info = req_info; } return true; } static enum status_code help_open(struct view *view, enum open_flags flags) { struct help_request_iterator iterator = { view }; struct help *help; reset_view(view); if (!add_help_line(view, &help, NULL, LINE_HEADER)) return ERROR_OUT_OF_MEMORY; help->data.text = "Quick reference for tig keybindings:"; if (!add_help_line(view, &help, NULL, LINE_DEFAULT)) return ERROR_OUT_OF_MEMORY; help->data.text = ""; return foreach_key(help_keys_visitor, &iterator, true) ? SUCCESS : error("Failed to render key bindings"); } static enum request help_request(struct view *view, enum request request, struct line *line) { struct help *help = line->data; switch (request) { case REQ_ENTER: if (line->type == LINE_SECTION) { struct keymap *keymap = help->keymap; keymap->hidden = !keymap->hidden; refresh_view(view); } return REQ_NONE; case REQ_REFRESH: refresh_view(view); return REQ_NONE; default: return request; } } void help_select(struct view *view, struct line *line) { } static struct view_ops help_ops = { "line", "", VIEW_NO_GIT_DIR | VIEW_REFRESH, sizeof(struct help_state), help_open, NULL, help_draw, help_request, help_grep, help_select, NULL, }; DEFINE_VIEW(help); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/io.c000066400000000000000000000362371332650737300136670ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/util.h" #include "tig/io.h" /* * Encoding conversion. */ #define ENCODING_SEP ": encoding: " #define ENCODING_ARG "--encoding=" ENCODING_UTF8 #define CHARSET_SEP "; charset=" struct encoding { struct encoding *next; iconv_t cd; char fromcode[1]; }; char encoding_arg[] = ENCODING_ARG; struct encoding *default_encoding; static struct encoding *encodings; struct encoding * encoding_open(const char *fromcode) { struct encoding *encoding; size_t len = strlen(fromcode); if (!*fromcode) return NULL; for (encoding = encodings; encoding; encoding = encoding->next) { if (!strcasecmp(encoding->fromcode, fromcode)) return encoding; } encoding = calloc(1, sizeof(*encoding) + len); strncpy(encoding->fromcode, fromcode, len); encoding->cd = iconv_open(ENCODING_UTF8, fromcode); if (encoding->cd == ICONV_NONE) { free(encoding); return NULL; } encoding->next = encodings; encodings = encoding; return encoding; } static bool encoding_convert_string(iconv_t iconv_cd, struct buffer *buf) { static char out_buffer[BUFSIZ * 2]; ICONV_CONST char *inbuf = buf->data; size_t inlen = buf->size + 1; char *outbuf = out_buffer; size_t outlen = sizeof(out_buffer); size_t ret = iconv(iconv_cd, &inbuf, &inlen, &outbuf, &outlen); if (ret != (size_t) -1) { buf->data = out_buffer; buf->size = sizeof(out_buffer) - outlen; } return (ret != (size_t) -1); } bool encoding_convert(struct encoding *encoding, struct buffer *buf) { return encoding_convert_string(encoding->cd, buf); } const char * encoding_iconv(iconv_t iconv_cd, const char *string, size_t length) { char *instr = strndup(string, length); struct buffer buf = { instr, length }; const char *ret = buf.data && encoding_convert_string(iconv_cd, &buf) ? buf.data : string; free(instr); return ret == instr ? string : ret; } struct encoding * get_path_encoding(const char *path, struct encoding *default_encoding) { const char *check_attr_argv[] = { "git", "check-attr", "encoding", "--", path, NULL }; char buf[SIZEOF_STR]; char *encoding; /* : encoding: */ if (!*path || !io_run_buf(check_attr_argv, buf, sizeof(buf), NULL, false) || !(encoding = strstr(buf, ENCODING_SEP))) return default_encoding; encoding += STRING_SIZE(ENCODING_SEP); if (!strcmp(encoding, ENCODING_UTF8) || !strcmp(encoding, "unspecified") || !strcmp(encoding, "set")) { const char *file_argv[] = { "file", "--mime", "--", path, NULL }; if (!*path || !io_run_buf(file_argv, buf, sizeof(buf), NULL, false) || !(encoding = strstr(buf, CHARSET_SEP))) return default_encoding; encoding += STRING_SIZE(CHARSET_SEP); } return encoding_open(encoding); } /* * Path manipulation. */ bool path_expand(char *dst, size_t dstlen, const char *src) { if (!src) return false; if (src[0] == '~') { /* constrain wordexp to tilde expansion only */ const char *ifs = getenv("IFS") ? getenv("IFS") : " \t\n"; wordexp_t we_result; size_t metachar_pos; char metachars[SIZEOF_STR]; char leading[SIZEOF_STR]; string_format(metachars, "%s%s", "/$|&;<>(){}`", ifs); metachar_pos = strcspn(src, metachars); if (src[metachar_pos] == '/' || src[metachar_pos] == 0) { string_nformat(leading, metachar_pos + 1, NULL, "%s", src); if (wordexp(leading, &we_result, WRDE_NOCMD)) return false; string_nformat(dst, dstlen, NULL, "%s%s", we_result.we_wordv[0], src + metachar_pos); wordfree(&we_result); return true; } } /* else */ string_ncopy_do(dst, dstlen, src, strlen(src)); return true; } bool path_search(char *dst, size_t dstlen, const char *query, const char *colon_path, int access_flags) { const char *_colon_path = _PATH_DEFPATH; /* emulate execlp() */ char test[SIZEOF_STR]; char elt[SIZEOF_STR]; size_t elt_len; if (!query || !*query) return false; if (strchr(query, '/')) { if (access(query, access_flags)) return false; string_ncopy_do(dst, dstlen, query, strlen(query)); return true; } if (colon_path && *colon_path) _colon_path = colon_path; while (_colon_path && *_colon_path) { elt_len = strcspn(_colon_path, ":"); if (elt_len) string_ncopy(elt, _colon_path, elt_len); else string_ncopy(elt, ".", 1); _colon_path += elt_len; if (*_colon_path) _colon_path += 1; string_format(test, "%s/%s", elt, query); if (!access(test, access_flags)) { string_ncopy_do(dst, dstlen, test, strlen(test)); return true; } } return false; } /* * Executing external commands. */ static void io_init(struct io *io) { memset(io, 0, sizeof(*io)); io->pipe = -1; } bool io_open(struct io *io, const char *fmt, ...) { char name[SIZEOF_STR] = ""; int retval; io_init(io); FORMAT_BUFFER(name, sizeof(name), fmt, retval, false); if (retval < 0) { io->error = ENAMETOOLONG; return false; } io->pipe = *name ? open(name, O_RDONLY) : dup(STDIN_FILENO); if (io->pipe == -1) io->error = errno; return io->pipe != -1; } bool io_kill(struct io *io) { return io->pid == 0 || kill(io->pid, SIGKILL) != -1; } bool io_done(struct io *io) { pid_t pid = io->pid; if (io->pipe != -1) close(io->pipe); free(io->buf); io_init(io); while (pid > 0) { int status = 0; pid_t waiting = waitpid(pid, &status, 0); if (waiting < 0) { if (errno == EINTR) continue; io->error = errno; return false; } io->status = WIFEXITED(status) ? WEXITSTATUS(status) : 0; return waiting == pid && !WIFSIGNALED(status) && !io->status; } return true; } static int open_trace(int devnull, const char *argv[]) { static const char *trace_file; if (!trace_file) { trace_file = getenv("TIG_TRACE"); if (!trace_file) trace_file = ""; } if (*trace_file) { int fd = open(trace_file, O_RDWR | O_CREAT | O_APPEND, 0666); int i; flock(fd, LOCK_EX); for (i = 0; argv[i]; i++) { if (write(fd, argv[i], strlen(argv[i])) == -1 || write(fd, " ", 1) == -1) break; } if (argv[i] || write(fd, "\n", 1) == -1) { flock(fd, LOCK_UN); close(fd); return devnull; } flock(fd, LOCK_UN); return fd; } return devnull; } bool io_trace(const char *fmt, ...) { static FILE *trace_out; /* Intensionally leaked. */ va_list args; int retval; if (!trace_out) { const char *trace_file = getenv("TIG_TRACE"); if (trace_file) trace_out = fopen(trace_file, "a"); if (!trace_out) return false; } va_start(args, fmt); retval = vfprintf(trace_out, fmt, args); va_end(args); fflush(trace_out); return retval != -1; } bool io_exec(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[], int custom) { int pipefds[2] = { -1, -1 }; bool read_from_stdin = type == IO_RD && (custom & IO_RD_FORWARD_STDIN); bool read_with_stderr = type == IO_RD && (custom & IO_RD_WITH_STDERR); io_init(io); if (dir && !strcmp(dir, argv[0])) return io_open(io, "%s%s", dir, argv[1]); if ((type == IO_RD || type == IO_RP || type == IO_WR) && pipe(pipefds) < 0) { io->error = errno; return false; } else if (type == IO_AP) { pipefds[1] = custom; } if ((io->pid = fork())) { if (io->pid == -1) io->error = errno; if (pipefds[!(type == IO_WR)] != -1) close(pipefds[!(type == IO_WR)]); if (io->pid != -1) { io->pipe = pipefds[!!(type == IO_WR)]; return true; } } else { if (type != IO_FG) { int devnull = open("/dev/null", O_RDWR); int readfd = type == IO_WR ? pipefds[0] : type == IO_RP ? custom : devnull; int writefd = (type == IO_RD || type == IO_RP || type == IO_AP) ? pipefds[1] : devnull; int errorfd = open_trace(devnull, argv); /* Inject stdin given on the command line. */ if (read_from_stdin) readfd = dup(STDIN_FILENO); dup2(readfd, STDIN_FILENO); dup2(writefd, STDOUT_FILENO); if (read_with_stderr) dup2(writefd, STDERR_FILENO); else dup2(errorfd, STDERR_FILENO); if (devnull != errorfd) close(errorfd); close(devnull); if (pipefds[0] != -1) close(pipefds[0]); if (pipefds[1] != -1) close(pipefds[1]); } if (dir && *dir && chdir(dir) == -1) _exit(errno); if (env) { int i; for (i = 0; env[i]; i++) if (*env[i]) putenv(env[i]); } execvp(argv[0], (char *const*) argv); close(STDOUT_FILENO); _exit(errno); } if (pipefds[!!(type == IO_WR)] != -1) close(pipefds[!!(type == IO_WR)]); return false; } bool io_run(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[]) { return io_exec(io, type, dir, env, argv, 0); } bool io_complete(enum io_type type, const char **argv, const char *dir, int fd) { struct io io; return io_exec(&io, type, dir, NULL, argv, fd) && io_done(&io); } bool io_run_bg(const char **argv, const char *dir) { return io_complete(IO_BG, argv, dir, -1); } bool io_run_fg(const char **argv, const char *dir) { return io_complete(IO_FG, argv, dir, -1); } bool io_run_append(const char **argv, int fd) { return io_complete(IO_AP, argv, NULL, fd); } bool io_eof(struct io *io) { return io->eof; } int io_error(struct io *io) { return io->error; } char * io_strerror(struct io *io) { return strerror(io->error); } bool io_can_read(struct io *io, bool can_block) { struct timeval tv = { 0, 500 }; fd_set fds; FD_ZERO(&fds); FD_SET(io->pipe, &fds); return select(io->pipe + 1, &fds, NULL, NULL, can_block ? NULL : &tv) > 0; } ssize_t io_read(struct io *io, void *buf, size_t bufsize) { do { ssize_t readsize = read(io->pipe, buf, bufsize); if (readsize < 0 && (errno == EAGAIN || errno == EINTR)) continue; else if (readsize == -1) io->error = errno; else if (readsize == 0) io->eof = 1; return readsize; } while (1); } char * io_memchr(struct buffer *buf, char *data, int c) { char *pos; if (!buf || data < buf->data || buf->data + buf->size <= data) return NULL; pos = memchr(data, c, buf->size - (data - buf->data)); return pos ? pos + 1 : NULL; } DEFINE_ALLOCATOR(io_realloc_buf, char, BUFSIZ) static bool io_get_line(struct io *io, struct buffer *buf, int c, size_t *lineno, bool can_read, char eol_char) { char *eol; ssize_t readsize; while (true) { if (io->bufsize > 0) { eol = memchr(io->bufpos, c, io->bufsize); while (eol_char && io->bufpos < eol && eol[-1] == eol_char) { if (lineno) (*lineno)++; eol[-1] = eol[0] = ' '; eol = memchr(io->bufpos, c, io->bufsize); } if (eol) { buf->data = io->bufpos; buf->size = eol - buf->data; *eol = 0; io->bufpos = eol + 1; io->bufsize -= io->bufpos - buf->data; if (lineno) (*lineno)++; return true; } } if (io_eof(io)) { if (io->bufsize) { buf->data = io->bufpos; buf->size = io->bufsize; io->bufpos[io->bufsize] = 0; io->bufpos += io->bufsize; io->bufsize = 0; if (lineno) (*lineno)++; return true; } return false; } if (!can_read) return false; if (io->bufsize > 0 && io->bufpos > io->buf) memmove(io->buf, io->bufpos, io->bufsize); if (io->bufalloc == io->bufsize) { if (!io_realloc_buf(&io->buf, io->bufalloc, BUFSIZ)) return false; io->bufalloc += BUFSIZ; } io->bufpos = io->buf; readsize = io_read(io, io->buf + io->bufsize, io->bufalloc - io->bufsize); if (io_error(io)) return NULL; io->bufsize += readsize; } } bool io_get(struct io *io, struct buffer *buf, int c, bool can_read) { return io_get_line(io, buf, c, NULL, can_read, 0); } bool io_write(struct io *io, const void *buf, size_t bufsize) { const char *bytes = buf; size_t written = 0; while (!io_error(io) && written < bufsize) { ssize_t size; size = write(io->pipe, bytes + written, bufsize - written); if (size < 0 && (errno == EAGAIN || errno == EINTR)) continue; else if (size == -1) io->error = errno; else written += size; } return written == bufsize; } bool io_printf(struct io *io, const char *fmt, ...) { char buf[SIZEOF_STR] = ""; int retval; FORMAT_BUFFER(buf, sizeof(buf), fmt, retval, false); if (retval < 0) { io->error = ENAMETOOLONG; return false; } return io_write(io, buf, retval); } bool io_read_buf(struct io *io, char buf[], size_t bufsize, bool allow_empty) { struct buffer result = {0}; if (io_get(io, &result, '\n', true)) { result.data = string_trim(result.data); string_ncopy_do(buf, bufsize, result.data, strlen(result.data)); } return io_done(io) && (result.data || allow_empty); } bool io_run_buf(const char **argv, char buf[], size_t bufsize, const char *dir, bool allow_empty) { struct io io; return io_run(&io, IO_RD, dir, NULL, argv) && io_read_buf(&io, buf, bufsize, allow_empty); } bool io_from_string(struct io *io, const char *str) { size_t len = strlen(str); io_init(io); if (!io_realloc_buf(&io->buf, io->bufalloc, len)) return false; io->bufsize = io->bufalloc = len; io->bufpos = io->buf; io->eof = true; strncpy(io->buf, str, len); return true; } static enum status_code io_load_file(struct io *io, const char *separators, size_t *lineno, io_read_fn read_property, void *data) { struct buffer buf; enum status_code state = SUCCESS; while (state == SUCCESS && io_get_line(io, &buf, '\n', lineno, true, '\\')) { char *name; char *value; size_t namelen; size_t valuelen; name = string_trim(buf.data); namelen = strcspn(name, separators); if (name[namelen]) { name[namelen] = 0; value = string_trim(name + namelen + 1); valuelen = strlen(value); } else { value = ""; valuelen = 0; } state = read_property(name, namelen, value, valuelen, data); } if (state == SUCCESS && io_error(io)) state = error("%s", io_strerror(io)); io_done(io); return state; } enum status_code io_load_span(struct io *io, const char *separators, size_t *lineno, io_read_fn read_property, void *data) { return io_load_file(io, separators, lineno, read_property, data); } enum status_code io_load(struct io *io, const char *separators, io_read_fn read_property, void *data) { return io_load_file(io, separators, NULL, read_property, data); } enum status_code io_run_load(const char **argv, const char *separators, io_read_fn read_property, void *data) { struct io io; if (!io_run(&io, IO_RD, NULL, NULL, argv)) return error("Failed to open IO"); return io_load(&io, separators, read_property, data); } bool io_fprintf(FILE *file, const char *fmt, ...) { va_list args; int fmtlen, retval; va_start(args, fmt); fmtlen = vsnprintf(NULL, 0, fmt, args); va_end(args); va_start(args, fmt); retval = vfprintf(file, fmt, args); va_end(args); return fmtlen == retval; } const char * get_temp_dir(void) { static const char *tmp; if (tmp) return tmp; if (!tmp) tmp = getenv("TMPDIR"); if (!tmp) tmp = getenv("TEMP"); if (!tmp) tmp = getenv("TMP"); if (!tmp) tmp = "/tmp"; return tmp; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/keys.c000066400000000000000000000402251332650737300142230ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/types.h" #include "tig/argv.h" #include "tig/io.h" #include "tig/keys.h" struct keybinding { enum request request; size_t keys; struct key key[1]; }; static struct keymap keymaps[] = { { "generic" }, { "search" }, #define VIEW_KEYMAP(id, name) { #name } VIEW_INFO(VIEW_KEYMAP) }; static struct keymap *generic_keymap = keymaps; #define is_generic_keymap(keymap) ((keymap) == generic_keymap) static struct keymap *search_keymap = keymaps + 1; #define is_search_keymap(keymap) ((keymap) == search_keymap) struct keymap * get_keymap(const char *name, size_t namelen) { int i; for (i = 0; i < ARRAY_SIZE(keymaps); i++) if (!strncasecmp(keymaps[i].name, name, namelen)) return &keymaps[i]; return NULL; } static bool keybinding_matches(const struct keybinding *keybinding, const struct key key[], size_t keys, bool *conflict_ptr) { bool conflict = false; int i; if (keybinding->keys < keys) return false; for (i = 0; i < keys; i++) { const struct key *key1 = &keybinding->key[i]; const struct key *key2 = &key[i]; if (key1->modifiers.control && key1->modifiers.multibytes && !memcmp(&key1->modifiers, &key2->modifiers, sizeof(key1->modifiers)) && strlen(key1->data.bytes) == 1 && strlen(key2->data.bytes) == 1) { int c1 = key1->data.bytes[0]; int c2 = key2->data.bytes[0]; if (ascii_toupper(c1) != ascii_toupper(c2)) return false; if (c1 != c2) conflict = true; } else { if (memcmp(key1, key2, sizeof(*key1))) return false; } } if (conflict_ptr && keybinding->request != REQ_NONE) *conflict_ptr = conflict; return true; } static bool keybinding_equals(const struct keybinding *keybinding, const struct key key[], size_t keys, bool *conflict_ptr) { if (keybinding->keys != keys) return false; return keybinding_matches(keybinding, key, keys, conflict_ptr); } enum status_code add_keybinding(struct keymap *table, enum request request, const struct key key[], size_t keys) { struct keybinding *keybinding; char buf[SIZEOF_STR]; bool conflict = false; size_t i; for (i = 0; i < table->size; i++) { if (keybinding_equals(table->data[i], key, keys, &conflict)) { enum request old_request = table->data[i]->request; const char *old_name; table->data[i]->request = request; if (!conflict) return SUCCESS; old_name = get_request_name(old_request); string_ncopy(buf, old_name, strlen(old_name)); return error("Key binding for %s and %s conflict; " "keys using Ctrl are case insensitive", buf, get_request_name(request)); } } table->data = realloc(table->data, (table->size + 1) * sizeof(*table->data)); keybinding = calloc(1, sizeof(*keybinding) + (sizeof(*key) * (keys - 1))); if (!table->data || !keybinding) die("Failed to allocate keybinding"); memcpy(keybinding->key, key, sizeof(*key) * keys); keybinding->keys = keys; keybinding->request = request; table->data[table->size++] = keybinding; return SUCCESS; } static enum request get_keybinding_in_keymap(const struct keymap *keymap, const struct key key[], size_t keys, int *matches) { enum request request = REQ_UNKNOWN; size_t i; for (i = 0; i < keymap->size; i++) if (keybinding_matches(keymap->data[i], key, keys, NULL)) { if (matches && keymap->data[i]->request != REQ_NONE) (*matches)++; /* Overriding keybindings, might have been added * at the end of the keymap so we need to * iterate all keybindings. */ if (keymap->data[i]->keys == keys) request = keymap->data[i]->request; } return request; } /* Looks for a key binding first in the given keymap, then in the generic keymap. */ enum request get_keybinding(const struct keymap *keymap, const struct key key[], size_t keys, int *matches) { enum request request = get_keybinding_in_keymap(keymap, key, keys, matches); if (!is_search_keymap(keymap)) { int generic_matches = 0; enum request generic_request = get_keybinding_in_keymap(generic_keymap, key, keys, &generic_matches); /* Include generic matches iff there are more than one * so unbound keys in the current keymap still override * generic keys while still ensuring that the key combo * handler continues to wait for more keys if there is * another possible match. E.g. while in `main` view: * * bind generic q quit # 'q' will quit * bind main q none # 'q' will do nothing * bind generic qa quit # 'qa' will quit * bind main qn next # 'qn' will move to next entry */ if (matches && (request == REQ_UNKNOWN || generic_matches > 1)) (*matches) += generic_matches; if (request == REQ_UNKNOWN) request = generic_request; } return request == REQ_NONE ? REQ_UNKNOWN : request; } struct key_mapping { const char *name; int value; }; static const struct key_mapping key_mappings[] = { { "Enter", KEY_RETURN }, { "Space", ' ' }, { "Backspace", KEY_BACKSPACE }, { "Tab", KEY_TAB }, { "Escape", KEY_ESC }, { "Esc", KEY_ESC }, { "Left", KEY_LEFT }, { "Right", KEY_RIGHT }, { "Up", KEY_UP }, { "Down", KEY_DOWN }, { "Insert", KEY_IC }, { "Ins", KEY_IC }, { "Delete", KEY_DC }, { "Del", KEY_DC }, { "Hash", '#' }, { "Home", KEY_HOME }, { "End", KEY_END }, { "PageUp", KEY_PPAGE }, { "PgUp", KEY_PPAGE }, { "PageDown", KEY_NPAGE }, { "PgDown", KEY_NPAGE }, { "LessThan", '<' }, { "LT", '<' }, { "F1", KEY_F(1) }, { "F2", KEY_F(2) }, { "F3", KEY_F(3) }, { "F4", KEY_F(4) }, { "F5", KEY_F(5) }, { "F6", KEY_F(6) }, { "F7", KEY_F(7) }, { "F8", KEY_F(8) }, { "F9", KEY_F(9) }, { "F10", KEY_F(10) }, { "F11", KEY_F(11) }, { "F12", KEY_F(12) }, { "F13", KEY_F(13) }, { "F14", KEY_F(14) }, { "F15", KEY_F(15) }, { "F16", KEY_F(16) }, { "F17", KEY_F(17) }, { "F18", KEY_F(18) }, { "F19", KEY_F(19) }, { "ScrollBack", KEY_SR }, { "SBack", KEY_SR }, { "ScrollFwd", KEY_SF }, { "SFwd", KEY_SF }, { "BackTab", KEY_BTAB }, { "ShiftTab", KEY_BTAB }, { "ShiftLeft", KEY_SLEFT }, { "ShiftRight", KEY_SRIGHT }, { "ShiftDelete", KEY_SDC }, { "ShiftDel", KEY_SDC }, { "ShiftHome", KEY_SHOME }, { "ShiftEnd", KEY_SEND }, { "SingleQuote", '\'' }, { "DoubleQuote", '"' }, }; static const struct key_mapping * get_key_mapping(const char *name, size_t namelen) { int i; for (i = 0; i < ARRAY_SIZE(key_mappings); i++) { if (namelen == strlen(key_mappings[i].name) && !strncasecmp(key_mappings[i].name, name, namelen)) return &key_mappings[i]; } return NULL; } static enum status_code parse_key_value(struct key *key, const char **name_ptr, size_t offset, const char *replacement, const char *end) { const char *name = replacement ? replacement : *name_ptr + offset; size_t namelen = utf8_char_length(name); const char *nameend = name + namelen; if (strlen(name) < namelen || utf8_to_unicode(name, namelen) == 0) return error("Error parsing UTF-8 bytes: %s", name); strncpy(key->data.bytes, name, namelen); key->modifiers.multibytes = 1; if (end) { *name_ptr = end + 1; if (!replacement && nameend + 1 < end) return success("Ignoring text after key mapping: %.*s", (int) (end - nameend), nameend); } else { *name_ptr = nameend; } return SUCCESS; } enum status_code get_key_value(const char **name_ptr, struct key *key) { const char *name = *name_ptr; const char *end = NULL; memset(key, 0, sizeof(*key)); if (*name == '<') { end = strchr(name + 1, '>'); if (!end) return error("Missing '>' from key mapping: %s", name); if (!prefixcmp(name, "modifiers.control = 1; return parse_key_value(key, name_ptr, 6, NULL, end); } else if (!prefixcmp(name, "modifiers.control = 1; return parse_key_value(key, name_ptr, 3, NULL, end); } else { const struct key_mapping *mapping; const char *start = name + 1; int len = end - start; mapping = get_key_mapping(start, len); if (!mapping) return error("Unknown key mapping: %.*s", len, start); if (strchr(" #<'\"", mapping->value)) { const char replacement[] = { mapping->value, 0 }; return parse_key_value(key, name_ptr, 0, replacement, end); } *name_ptr = end + 1; key->data.value = mapping->value; return SUCCESS; } } if (name[0] == '^' && name[1] == '[') { return error("Escape key combo must now use '%s' " "instead of '%s'", name + 2, name); } else if (name[0] == '^' && name[1] != '\0') { return error("Control key mapping must now use '' " "instead of '%s'", name + 1, name); } return parse_key_value(key, name_ptr, 0, NULL, end); } const char * get_key_name(const struct key key[], size_t keys, bool quote_comma) { static char buf[SIZEOF_STR]; size_t pos = 0; int i; for (i = 0; i < keys; i++) { bool multibytes = key[i].modifiers.multibytes; const char *name = multibytes ? key[i].data.bytes : ""; const char *start = ""; const char *end = ""; bool use_symbolic; if (key[i].modifiers.control) { start = " 0 ? ", " : ""; const char *keyname = get_key_name(keybinding->key, keybinding->keys, all); return string_nformat(buf, BUFSIZ, pos, "%s%s", sep, keyname); } static bool append_keymap_request_keys(char *buf, size_t *pos, enum request request, const struct keymap *keymap, bool all) { int i; for (i = 0; i < keymap->size; i++) { if (keymap->data[i]->request == request) { if (!append_key(buf, pos, keymap->data[i], all)) return false; if (!all) break; } } return true; } const char * get_keys(const struct keymap *keymap, enum request request, bool all) { static char buf[BUFSIZ]; size_t pos = 0; buf[pos] = 0; if (!append_keymap_request_keys(buf, &pos, request, keymap, all)) return "Too many keybindings!"; if (pos > 0 && !all) return buf; if (!is_generic_keymap(keymap)) { /* Only the generic keymap includes the default keybindings when * listing all keys. */ if (all) return buf; if (!append_keymap_request_keys(buf, &pos, request, generic_keymap, all)) return "Too many keybindings!"; if (pos) return buf; } return buf; } static struct run_request *run_request; static size_t run_requests; DEFINE_ALLOCATOR(realloc_run_requests, struct run_request, 8) #define COMMAND_FLAGS ":!?@<+>" enum status_code parse_run_request_flags(struct run_request_flags *flags, const char **argv) { if (!argv[0]) return error("No arguments"); if (!strchr(COMMAND_FLAGS, *argv[0])) return error("Unknown command flag '%c'; expected one of %s", argv[0][0], COMMAND_FLAGS); while (*argv[0]) { if (*argv[0] == ':') { flags->internal = 1; argv[0]++; break; } else if (*argv[0] == '@') { flags->silent = 1; } else if (*argv[0] == '?') { flags->confirm = 1; } else if (*argv[0] == '<') { flags->exit = 1; } else if (*argv[0] == '+') { flags->echo = 1; } else if (*argv[0] == '>') { flags->quick = 1; } else if (*argv[0] != '!') { break; } argv[0]++; } return SUCCESS; } enum status_code add_run_request(struct keymap *keymap, const struct key key[], size_t keys, const char **argv) { struct run_request *req; struct run_request_flags flags = {0}; enum status_code code = parse_run_request_flags(&flags, argv); if (code != SUCCESS) return code; if (!realloc_run_requests(&run_request, run_requests, 1)) return ERROR_OUT_OF_MEMORY; if (!argv_copy(&run_request[run_requests].argv, argv)) return ERROR_OUT_OF_MEMORY; req = &run_request[run_requests++]; req->flags = flags; req->keymap = keymap; return add_keybinding(keymap, REQ_RUN_REQUESTS + run_requests, key, keys); } struct run_request * get_run_request(enum request request) { if (request <= REQ_RUN_REQUESTS || request > REQ_RUN_REQUESTS + run_requests) return NULL; return &run_request[request - REQ_RUN_REQUESTS - 1]; } const char * format_run_request_flags(const struct run_request *req) { static char flags[8]; int flagspos = 0; memset(flags, 0, sizeof(flags)); if (req->flags.internal) flags[flagspos++] = ':'; else flags[flagspos] = '!'; /* Optional, if other flags are defined */ if (req->flags.silent) flags[flagspos++] = '@'; if (req->flags.confirm) flags[flagspos++] = '?'; if (req->flags.exit) flags[flagspos++] = '<'; if (req->flags.echo) flags[flagspos++] = '+'; if (req->flags.quick) flags[flagspos++] = '>'; if (flagspos > 1) flags[flagspos++] = 0; return flags; } struct key_visitor_state { key_visitor_fn visitor; void *data; struct keymap *keymap; bool combine_keys; const char *group; }; static bool foreach_key_visit(struct key_visitor_state *state, const char *group, enum request request, const struct request_info *req_info, const struct run_request *run_req) { struct keymap *keymap = state->keymap; int i; if (state->group == group) group = NULL; if (state->combine_keys) { const char *key = get_keys(keymap, request, true); if (!key || !*key) return true; if (group) state->group = group; return state->visitor(state->data, group, keymap, request, key, req_info, run_req); } for (i = 0; i < keymap->size; i++) { if (keymap->data[i]->request == request) { struct keybinding *keybinding = keymap->data[i]; const char *key = get_key_name(keybinding->key, keybinding->keys, false); if (!key || !*key) continue; if (!state->visitor(state->data, group, keymap, request, key, req_info, run_req)) return false; if (group) state->group = group; group = NULL; } } return true; } static bool foreach_key_request(void *data, const struct request_info *req_info, const char *group) { struct key_visitor_state *state = data; if (req_info->request == REQ_NONE) return true; return foreach_key_visit(state, group, req_info->request, req_info, NULL); } static bool foreach_key_run_request(struct key_visitor_state *state, bool internal, bool toggles) { struct keymap *keymap = state->keymap; const char *group = !internal ? "External commands:" : toggles ? "Option toggling:" : "Internal commands:"; enum request request = REQ_RUN_REQUESTS + 1; for (; true; request++) { struct run_request *req = get_run_request(request); const char *key; if (!req) break; if (req->flags.internal != !!internal || req->keymap != keymap || !*(key = get_keys(keymap, request, true))) continue; if (toggles != !strcmp(req->argv[0], "toggle")) continue; if (!foreach_key_visit(state, group, request, NULL, req)) return false; } return true; } bool foreach_key(key_visitor_fn visitor, void *data, bool combine_keys) { int i; for (i = 0; i < ARRAY_SIZE(keymaps); i++) { struct key_visitor_state state = { visitor, data, &keymaps[i], combine_keys }; if (!foreach_request(foreach_key_request, &state) || !foreach_key_run_request(&state, true, true) || !foreach_key_run_request(&state, true, false) || !foreach_key_run_request(&state, false, false)) return false; } return true; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/line.c000066400000000000000000000133541332650737300142020ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/types.h" #include "tig/refdb.h" #include "tig/line.h" #include "tig/util.h" static struct line_rule *line_rule; static size_t line_rules; static struct line_info **color_pair; static size_t color_pairs; DEFINE_ALLOCATOR(realloc_line_rule, struct line_rule, 8) DEFINE_ALLOCATOR(realloc_color_pair, struct line_info *, 8) enum line_type get_line_type(const char *line) { int linelen = strlen(line); enum line_type type; for (type = 0; type < line_rules; type++) { struct line_rule *rule = &line_rule[type]; /* Case insensitive search matches Signed-off-by lines better. */ if (rule->linelen && linelen >= rule->linelen && !strncasecmp(rule->line, line, rule->linelen)) return type; } return LINE_DEFAULT; } enum line_type get_line_type_from_ref(const struct ref *ref) { if (ref->type == REFERENCE_HEAD) return LINE_MAIN_HEAD; else if (ref->type == REFERENCE_LOCAL_TAG) return LINE_MAIN_LOCAL_TAG; else if (ref->type == REFERENCE_TAG) return LINE_MAIN_TAG; else if (ref->type == REFERENCE_TRACKED_REMOTE) return LINE_MAIN_TRACKED; else if (ref->type == REFERENCE_REMOTE) return LINE_MAIN_REMOTE; else if (ref->type == REFERENCE_REPLACE) return LINE_MAIN_REPLACE; return LINE_MAIN_REF; } const char * get_line_type_name(enum line_type type) { assert(0 <= type && type < line_rules); return line_rule[type].name; } struct line_info * get_line_info(const char *prefix, enum line_type type) { struct line_info *info; struct line_rule *rule; assert(0 <= type && type < line_rules); rule = &line_rule[type]; for (info = &rule->info; info; info = info->next) { if (prefix && info->prefix == prefix) return info; if (!prefix && !info->prefix) return info; } return &rule->info; } static struct line_info * init_line_info(const char *prefix, const char *name, size_t namelen, const char *line, size_t linelen) { struct line_rule *rule; if (!realloc_line_rule(&line_rule, line_rules, 1)) die("Failed to allocate line info"); rule = &line_rule[line_rules++]; rule->name = name; rule->namelen = namelen; rule->line = line; rule->linelen = linelen; rule->info.prefix = prefix; rule->info.fg = COLOR_DEFAULT; rule->info.bg = COLOR_DEFAULT; return &rule->info; } #define INIT_BUILTIN_LINE_INFO(type, line) \ init_line_info(NULL, #type, STRING_SIZE(#type), (line), STRING_SIZE(line)) static struct line_rule * find_line_rule(struct line_rule *query) { enum line_type type; if (!line_rules) { LINE_INFO(INIT_BUILTIN_LINE_INFO); } for (type = 0; type < line_rules; type++) { struct line_rule *rule = &line_rule[type]; if (query->namelen && enum_equals(*rule, query->name, query->namelen)) return rule; if (query->linelen && query->linelen == rule->linelen && !strncasecmp(rule->line, query->line, rule->linelen)) return rule; } return NULL; } struct line_info * add_line_rule(const char *prefix, struct line_rule *query) { struct line_rule *rule = find_line_rule(query); struct line_info *info, *last; if (!rule) { if (query->name) return NULL; /* Quoted line. */ query->line = strndup(query->line, query->linelen); if (!query->line) return NULL; return init_line_info(prefix, "", 0, query->line, query->linelen); } for (info = &rule->info; info; last = info, info = info->next) if (info->prefix == prefix) return info; info = calloc(1, sizeof(*info)); if (info) info->prefix = prefix; last->next = info; return info; } bool foreach_line_rule(line_rule_visitor_fn visitor, void *data) { enum line_type type; for (type = 0; type < line_rules; type++) { struct line_rule *rule = &line_rule[type]; if (!visitor(data, rule)) return false; } return true; } static void init_line_info_color_pair(struct line_info *info, enum line_type type, int default_bg, int default_fg) { int bg = info->bg == COLOR_DEFAULT ? default_bg : info->bg; int fg = info->fg == COLOR_DEFAULT ? default_fg : info->fg; int i; for (i = 0; i < color_pairs; i++) { if (color_pair[i]->fg == info->fg && color_pair[i]->bg == info->bg) { info->color_pair = i; return; } } if (!realloc_color_pair(&color_pair, color_pairs, 1)) die("Failed to alloc color pair"); color_pair[color_pairs] = info; info->color_pair = color_pairs++; init_pair(COLOR_ID(info->color_pair), fg, bg); } void init_colors(void) { struct line_rule query = { "default", STRING_SIZE("default") }; struct line_rule *rule = find_line_rule(&query); int default_bg = rule ? rule->info.bg : COLOR_BLACK; int default_fg = rule ? rule->info.fg : COLOR_WHITE; enum line_type type; /* XXX: Even if the terminal does not support colors (e.g. * TERM=dumb) init_colors() must ensure that the built-in rules * have been initialized. This is done by the above call to * find_line_rule(). */ if (!has_colors()) return; start_color(); if (assume_default_colors(default_fg, default_bg) == ERR) { default_bg = COLOR_BLACK; default_fg = COLOR_WHITE; } for (type = 0; type < line_rules; type++) { struct line_rule *rule = &line_rule[type]; struct line_info *info; for (info = &rule->info; info; info = info->next) { init_line_info_color_pair(info, type, default_bg, default_fg); } } } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/log.c000066400000000000000000000101221332650737300140220ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/refdb.h" #include "tig/display.h" #include "tig/draw.h" #include "tig/log.h" #include "tig/diff.h" #include "tig/pager.h" struct log_state { /* Used for tracking when we need to recalculate the previous * commit, for example when the user scrolls up or uses the page * up/down in the log view. */ int last_lineno; size_t graph_indent; enum line_type last_type; bool commit_title_read; bool after_commit_header; bool reading_diff_stat; }; static inline void log_copy_rev(struct view *view, struct line *line) { const char *text = box_text(line); size_t offset = get_graph_indent(text); string_copy_rev_from_commit_line(view->ref, text + offset); } static void log_select(struct view *view, struct line *line) { struct log_state *state = view->private; int last_lineno = state->last_lineno; if (!last_lineno || abs(last_lineno - line->lineno) > 1 || (state->last_type == LINE_COMMIT && last_lineno > line->lineno)) { struct line *commit_line = find_prev_line_by_type(view, line, LINE_COMMIT); if (commit_line) log_copy_rev(view, commit_line); } if (line->type == LINE_COMMIT && !view_has_flags(view, VIEW_NO_REF)) log_copy_rev(view, line); string_copy_rev(view->env->commit, view->ref); state->last_lineno = line->lineno; state->last_type = line->type; } static enum status_code log_open(struct view *view, enum open_flags flags) { const char *log_argv[] = { "git", "log", encoding_arg, commit_order_arg(), "--cc", "--stat", "%(logargs)", "%(cmdlineargs)", "%(revargs)", "--no-color", "--", "%(fileargs)", NULL }; return begin_update(view, NULL, log_argv, flags); } static enum request log_request(struct view *view, enum request request, struct line *line) { switch (request) { case REQ_REFRESH: load_refs(true); refresh_view(view); return REQ_NONE; case REQ_ENTER: if (!display[1] || strcmp(display[1]->vid, view->ref)) open_diff_view(view, OPEN_SPLIT); return REQ_NONE; default: return request; } } static bool log_read(struct view *view, struct buffer *buf, bool force_stop) { struct line *line = NULL; enum line_type type; struct log_state *state = view->private; size_t len; char *commit; char *data; if (!buf) return true; data = buf->data; commit = strstr(data, "commit "); if (commit && get_graph_indent(data) == commit - data) state->graph_indent = commit - data; type = get_line_type(data + state->graph_indent); len = strlen(data + state->graph_indent); if (type == LINE_COMMIT) state->commit_title_read = true; else if (state->commit_title_read && len < 1) { state->commit_title_read = false; state->after_commit_header = true; } else if (state->after_commit_header && len < 1) { state->after_commit_header = false; state->reading_diff_stat = true; } else if (state->reading_diff_stat) { line = diff_common_add_diff_stat(view, data, state->graph_indent); if (line) { if (state->graph_indent) line->graph_indent = 1; return true; } state->reading_diff_stat = false; } if (!pager_common_read(view, data, type, &line)) return false; if (line && state->graph_indent) line->graph_indent = 1; return true; } static struct view_ops log_ops = { "line", argv_env.head, VIEW_ADD_PAGER_REFS | VIEW_OPEN_DIFF | VIEW_SEND_CHILD_ENTER | VIEW_LOG_LIKE | VIEW_REFRESH | VIEW_FLEX_WIDTH, sizeof(struct log_state), log_open, log_read, view_column_draw, log_request, view_column_grep, log_select, NULL, view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), pager_get_column_data, }; DEFINE_VIEW(log); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/main.c000066400000000000000000000351451332650737300142010ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/repo.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/watch.h" #include "tig/graph.h" #include "tig/display.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/git.h" #include "tig/status.h" #include "tig/stage.h" #include "tig/main.h" #include "tig/diff.h" #include "tig/search.h" /* * Main view backend */ DEFINE_ALLOCATOR(realloc_reflogs, char *, 32) bool main_status_exists(struct view *view, enum line_type type) { struct main_state *state; refresh_view(view); state = view->private; state->goto_line_type = type; if (type == LINE_STAT_STAGED && state->add_changes_staged) return true; if (type == LINE_STAT_UNSTAGED && state->add_changes_unstaged) return true; return false; } static bool main_add_changes(struct view *view, struct main_state *state, const char *parent); static void main_register_commit(struct view *view, struct commit *commit, const char *ids, bool is_boundary) { struct main_state *state = view->private; struct graph *graph = state->graph; string_copy_rev(commit->id, ids); /* FIXME: lazily check index state here instead of in main_open. */ if ((state->add_changes_unstaged || state->add_changes_staged) && is_head_commit(commit->id)) { main_add_changes(view, state, ids); state->add_changes_unstaged = state->add_changes_staged = false; } if (state->with_graph) graph->add_commit(graph, &commit->graph, commit->id, ids, is_boundary); } static struct commit * main_add_commit(struct view *view, enum line_type type, struct commit *template, const char *title, bool custom) { struct main_state *state = view->private; size_t titlelen; struct commit *commit; char buf[SIZEOF_STR / 2]; struct line *line; /* FIXME: More graceful handling of titles; append "..." to * shortened titles, etc. */ string_expand(buf, sizeof(buf), title, strlen(title), 1); title = buf; titlelen = strlen(title); line = add_line_alloc(view, &commit, type, titlelen, custom); if (!line) return NULL; *commit = *template; strncpy(commit->title, title, titlelen); memset(template, 0, sizeof(*template)); state->reflogmsg[0] = 0; view_column_info_update(view, line); return commit; } static inline void main_flush_commit(struct view *view, struct commit *commit) { if (*commit->id) main_add_commit(view, LINE_MAIN_COMMIT, commit, "", false); } static bool main_add_changes_commit(struct view *view, enum line_type type, const char *parent, const char *title) { char ids[SIZEOF_STR] = NULL_ID " "; struct main_state *state = view->private; struct graph *graph = state->graph; struct commit commit = {{0}}; struct timeval now; struct timezone tz; if (!parent) return true; if (*parent) string_copy_rev(ids + STRING_SIZE(NULL_ID " "), parent); else ids[STRING_SIZE(NULL_ID)] = 0; if (!time_now(&now, &tz)) { commit.time.tz = tz.tz_minuteswest * 60; commit.time.sec = now.tv_sec - commit.time.tz; } commit.author = &unknown_ident; main_register_commit(view, &commit, ids, false); if (state->with_graph && *parent) graph->render_parents(graph, &commit.graph); if (!main_add_commit(view, type, &commit, title, true)) return false; if (state->goto_line_type == type) select_view_line(view, view->lines - 1); return true; } static bool main_check_index(struct view *view, struct main_state *state) { struct index_diff diff; if (!index_diff(&diff, false, false)) return false; if (!diff.unstaged) { watch_apply(&view->watch, WATCH_INDEX_UNSTAGED_NO); } else { watch_apply(&view->watch, WATCH_INDEX_UNSTAGED_YES); state->add_changes_unstaged = true; } if (!diff.staged) { watch_apply(&view->watch, WATCH_INDEX_STAGED_NO); } else { watch_apply(&view->watch, WATCH_INDEX_STAGED_YES); state->add_changes_staged = true; } return true; } static bool main_add_changes(struct view *view, struct main_state *state, const char *parent) { const char *staged_parent = parent; const char *unstaged_parent = NULL_ID; if (!state->add_changes_staged) { staged_parent = NULL; unstaged_parent = parent; } if (!state->add_changes_unstaged) { unstaged_parent = NULL; } return main_add_changes_commit(view, LINE_STAT_UNSTAGED, unstaged_parent, "Unstaged changes") && main_add_changes_commit(view, LINE_STAT_STAGED, staged_parent, "Staged changes"); } static bool main_check_argv(struct view *view, const char *argv[]) { struct main_state *state = view->private; bool with_reflog = false; int i; for (i = 0; argv[i]; i++) { const char *arg = argv[i]; struct rev_flags rev_flags = {0}; if (!strcmp(arg, "--graph")) { struct view_column *column = get_view_column(view, VIEW_COLUMN_COMMIT_TITLE); if (column) { column->opt.commit_title.graph = true; if (opt_commit_order != COMMIT_ORDER_REVERSE) state->with_graph = true; } argv[i] = ""; continue; } if (!strcmp(arg, "--merge")) { argv_append(&opt_rev_args, "--boundary"); continue; } if (!strcmp(arg, "--first-parent")) state->first_parent = true; if (!argv_parse_rev_flag(arg, &rev_flags)) continue; if (rev_flags.with_reflog) with_reflog = true; if (!rev_flags.with_graph) state->with_graph = false; arg += rev_flags.search_offset; if (*arg && !*view->env->search) string_ncopy(view->env->search, arg, strlen(arg)); } return with_reflog; } static enum graph_display main_with_graph(struct view *view, struct view_column *column, enum open_flags flags) { return column && opt_commit_order != COMMIT_ORDER_REVERSE && !open_in_pager_mode(flags) ? column->opt.commit_title.graph : GRAPH_DISPLAY_NO; } static enum status_code main_open(struct view *view, enum open_flags flags) { struct view_column *commit_title_column = get_view_column(view, VIEW_COLUMN_COMMIT_TITLE); enum graph_display graph_display = main_with_graph(view, commit_title_column, flags); const char *pretty_custom_argv[] = { GIT_MAIN_LOG(encoding_arg, commit_order_arg_with_graph(graph_display), "%(mainargs)", "%(cmdlineargs)", "%(revargs)", "%(fileargs)", log_custom_pretty_arg()) }; const char *pretty_raw_argv[] = { GIT_MAIN_LOG_RAW(encoding_arg, commit_order_arg_with_graph(graph_display), "%(mainargs)", "%(cmdlineargs)", "%(revargs)", "%(fileargs)") }; struct main_state *state = view->private; const char **main_argv = pretty_custom_argv; enum watch_trigger changes_triggers = WATCH_NONE; if (opt_show_changes && repo.is_inside_work_tree) changes_triggers |= WATCH_INDEX; state->with_graph = graph_display != GRAPH_DISPLAY_NO; if (opt_rev_args && main_check_argv(view, opt_rev_args)) main_argv = pretty_raw_argv; if (state->with_graph) { state->graph = init_graph(commit_title_column->opt.commit_title.graph); if (!state->graph) return ERROR_OUT_OF_MEMORY; } if (open_in_pager_mode(flags)) { changes_triggers = WATCH_NONE; } { /* This calls reset_view() so must be before adding changes commits. */ enum status_code code = begin_update(view, NULL, main_argv, flags); if (code != SUCCESS) return code; } /* Register watch before changes commits are added to record the * start. */ if (view_can_refresh(view)) watch_register(&view->watch, WATCH_HEAD | WATCH_REFS | changes_triggers); if (changes_triggers) main_check_index(view, state); return SUCCESS; } void main_done(struct view *view) { struct main_state *state = view->private; int i; for (i = 0; i < view->lines; i++) { struct commit *commit = view->line[i].data; free(commit->graph.symbols); } if (state->graph) state->graph->done(state->graph); for (i = 0; i < state->reflogs; i++) free(state->reflog[i]); free(state->reflog); } #define main_check_commit_refs(line) !((line)->no_commit_refs) #define main_mark_no_commit_refs(line) (((struct line *) (line))->no_commit_refs = 1) static inline const struct ref * main_get_commit_refs(const struct line *line, struct commit *commit) { const struct ref *refs = NULL; if (main_check_commit_refs(line) && !(refs = get_ref_list(commit->id))) main_mark_no_commit_refs(line); return refs; } bool main_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { struct main_state *state = view->private; struct commit *commit = line->data; column_data->author = commit->author; column_data->date = &commit->time; column_data->id = commit->id; if (state->reflogs) column_data->reflog = state->reflog[line->lineno - 1]; column_data->commit_title = commit->title; if (state->with_graph) { column_data->graph = state->graph; column_data->graph_canvas = &commit->graph; } column_data->refs = main_get_commit_refs(line, commit); return true; } static bool main_add_reflog(struct view *view, struct main_state *state, char *reflog) { char *end = strchr(reflog, ' '); int id_width; if (!end) return false; *end = 0; if (!realloc_reflogs(&state->reflog, state->reflogs, 1) || !(reflog = strdup(reflog))) return false; state->reflog[state->reflogs++] = reflog; id_width = strlen(reflog); if (state->reflog_width < id_width) { struct view_column *column = get_view_column(view, VIEW_COLUMN_ID); state->reflog_width = id_width; if (column && column->opt.id.display) view->force_redraw = true; } return true; } /* Reads git log --pretty=raw output and parses it into the commit struct. */ bool main_read(struct view *view, struct buffer *buf, bool force_stop) { struct main_state *state = view->private; struct graph *graph = state->graph; enum line_type type; struct commit *commit = &state->current; char *line; if (!buf) { main_flush_commit(view, commit); if (!force_stop && failed_to_load_initial_view(view)) die("No revisions match the given arguments."); if (view->lines > 0) { struct commit *last = view->line[view->lines - 1].data; view->line[view->lines - 1].dirty = 1; if (!last->author) { view->lines--; free(last); } } if (state->graph) state->graph->done_rendering(graph); return true; } line = buf->data; type = get_line_type(line); if (type == LINE_COMMIT) { bool is_boundary; char *author; state->in_header = true; line += STRING_SIZE("commit "); is_boundary = *line == '-'; while (*line && !isalnum(*line)) line++; main_flush_commit(view, commit); author = io_memchr(buf, line, 0); if (state->first_parent) { char *parent = strchr(line, ' '); char *parent_end = parent ? strchr(parent + 1, ' ') : NULL; if (parent_end) *parent_end = 0; } main_register_commit(view, &state->current, line, is_boundary); if (author) { char *title = io_memchr(buf, author, 0); parse_author_line(author, &commit->author, &commit->time); if (state->with_graph) graph->render_parents(graph, &commit->graph); if (title) main_add_commit(view, LINE_MAIN_COMMIT, commit, title, false); } return true; } if (!*commit->id) return true; /* Empty line separates the commit header from the log itself. */ if (*line == '\0') state->in_header = false; switch (type) { case LINE_PP_REFLOG: if (!main_add_reflog(view, state, line + STRING_SIZE("Reflog: "))) return false; break; case LINE_PP_REFLOGMSG: line += STRING_SIZE("Reflog message: "); string_ncopy(state->reflogmsg, line, strlen(line)); break; case LINE_PARENT: if (state->with_graph) graph->add_parent(graph, line + STRING_SIZE("parent ")); break; case LINE_AUTHOR: parse_author_line(line + STRING_SIZE("author "), &commit->author, &commit->time); if (state->with_graph) graph->render_parents(graph, &commit->graph); break; default: /* Fill in the commit title if it has not already been set. */ if (*commit->title) break; /* Skip lines in the commit header. */ if (state->in_header) break; /* Require titles to start with a non-space character at the * offset used by git log. */ if (strncmp(line, " ", 4)) break; line += 4; /* Well, if the title starts with a whitespace character, * try to be forgiving. Otherwise we end up with no title. */ while (isspace(*line)) line++; if (*line == '\0') break; if (*state->reflogmsg) line = state->reflogmsg; main_add_commit(view, LINE_MAIN_COMMIT, commit, line, false); } return true; } enum request main_request(struct view *view, enum request request, struct line *line) { enum open_flags flags = (view_is_displayed(view) && request != REQ_VIEW_DIFF) ? OPEN_SPLIT : OPEN_DEFAULT; switch (request) { case REQ_NEXT: case REQ_PREVIOUS: if (view_is_displayed(view) && display[0] != view) return request; /* Do not pass navigation requests to the branch view * when the main view is maximized. (GH #38) */ return request == REQ_NEXT ? REQ_MOVE_DOWN : REQ_MOVE_UP; case REQ_VIEW_DIFF: case REQ_ENTER: if (view_is_displayed(view) && display[0] != view) maximize_view(view, true); if (line->type == LINE_STAT_UNSTAGED || line->type == LINE_STAT_STAGED) open_stage_view(view, NULL, line->type, flags); else open_diff_view(view, flags); break; case REQ_REFRESH: load_refs(true); refresh_view(view); break; case REQ_PARENT: goto_id(view, "%(commit)^", true, false); break; case REQ_MOVE_NEXT_MERGE: case REQ_MOVE_PREV_MERGE: find_merge(view, request); break; default: return request; } return REQ_NONE; } void main_select(struct view *view, struct line *line) { struct commit *commit = line->data; if (line->type == LINE_STAT_STAGED || line->type == LINE_STAT_UNSTAGED) { string_ncopy(view->ref, commit->title, strlen(commit->title)); status_stage_info(view->env->status, line->type, NULL); } else { const struct ref *ref = main_get_commit_refs(line, commit); string_copy_rev(view->ref, commit->id); if (ref) ref_update_env(view->env, ref, true); } string_copy_rev(view->env->commit, commit->id); } static struct view_ops main_ops = { "commit", argv_env.head, VIEW_SEND_CHILD_ENTER | VIEW_FILE_FILTER | VIEW_LOG_LIKE | VIEW_REFRESH, sizeof(struct main_state), main_open, main_read, view_column_draw, main_request, view_column_grep, main_select, main_done, view_column_bit(AUTHOR) | view_column_bit(COMMIT_TITLE) | view_column_bit(DATE) | view_column_bit(ID) | view_column_bit(LINE_NUMBER), main_get_column_data, }; DEFINE_VIEW(main); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/map.c000066400000000000000000000051051332650737300140230ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/map.h" #include "compat/hashtab.h" string_map_hash_fn string_map_hash_helper = htab_hash_string; static int string_map_equal(const void *element, const void *map_) { struct string_map *map = (struct string_map *) map_; const char *key = map->key_fn(element); return !strcmp(key, map->key); } void * string_map_get(struct string_map *map, const char *key) { if (map->htab) { map->key = key; return htab_find_with_hash(map->htab, map, htab_hash_string(key)); } return NULL; } void ** string_map_get_at(struct string_map *map, const char *key) { if (map->htab) { map->key = key; return htab_find_slot_with_hash(map->htab, map, htab_hash_string(key), NO_INSERT); } return NULL; } void ** string_map_put_to(struct string_map *map, const char *key) { if (!map->htab) { map->htab = htab_create_alloc(16, map->hash_fn, string_map_equal, NULL, calloc, free); if (!map->htab) return NULL; } map->key = key; return htab_find_slot_with_hash(map->htab, map, htab_hash_string(key), INSERT); } void * string_map_put(struct string_map *map, const char *key, void *value) { void **slot = string_map_put_to(map, key); if (!slot) return NULL; *slot = value; return value; } void * string_map_remove(struct string_map *map, const char *key) { void *value = NULL; void **slot = string_map_get_at(map, key); if (slot) { value = *slot; htab_clear_slot(map->htab, slot); } return value; } void string_map_clear(struct string_map *map) { if (map->htab) htab_empty(map->htab); } struct string_map_iterator { string_map_iterator_fn fn; void *data; }; static int string_map_iterate(void **slot, void *data) { struct string_map_iterator *iterator = data; return iterator->fn(iterator->data, *slot); } void string_map_foreach(struct string_map *map, string_map_iterator_fn fn, void *data) { if (map->htab) { struct string_map_iterator iterator = { fn, data }; htab_traverse_noresize(map->htab, string_map_iterate, &iterator); } } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/options.c000066400000000000000000001121551332650737300147450ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/types.h" #include "tig/argv.h" #include "tig/io.h" #include "tig/repo.h" #include "tig/refdb.h" #include "tig/options.h" #include "tig/request.h" #include "tig/line.h" #include "tig/keys.h" #include "tig/view.h" /* * Option variables. */ #define DEFINE_OPTION_VARIABLES(name, type, flags) type opt_##name; OPTION_INFO(DEFINE_OPTION_VARIABLES) static struct option_info option_info[] = { #define DEFINE_OPTION_INFO(name, type, flags) { #name, STRING_SIZE(#name), #type, &opt_##name }, OPTION_INFO(DEFINE_OPTION_INFO) }; struct option_info * find_option_info(struct option_info *option, size_t options, const char *prefix, const char *name) { size_t namelen = strlen(name); char prefixed[SIZEOF_STR]; int i; if (*prefix && namelen == strlen(prefix) && !string_enum_compare(prefix, name, namelen)) { name = "display"; namelen = strlen(name); } for (i = 0; i < options; i++) { if (!strcmp(option[i].type, "view_settings") && enum_equals_prefix(option[i], name, namelen)) return &option[i]; if (enum_equals(option[i], name, namelen)) return &option[i]; if (enum_name_prefixed(prefixed, sizeof(prefixed), prefix, option[i].name) && namelen == strlen(prefixed) && !string_enum_compare(prefixed, name, namelen)) return &option[i]; } return NULL; } static struct option_info * find_option_info_by_value(void *value) { int i; for (i = 0; i < ARRAY_SIZE(option_info); i++) if (option_info[i].value == value) return &option_info[i]; return NULL; } static void mark_option_seen(void *value) { struct option_info *option = find_option_info_by_value(value); if (option) option->seen = true; } struct option_info * find_column_option_info(enum view_column_type type, union view_column_options *opts, const char *option, struct option_info *column_info, const char **column_name) { #define DEFINE_COLUMN_OPTION_INFO(name, type, flags) \ { #name, STRING_SIZE(#name), #type, &opt->name, flags }, #define DEFINE_COLUMN_OPTION_INFO_CHECK(name, id, options) \ if (type == VIEW_COLUMN_##id) { \ struct name##_options *opt = &opts->name; \ struct option_info info[] = { \ options(DEFINE_COLUMN_OPTION_INFO) \ }; \ struct option_info *match; \ match = find_option_info(info, ARRAY_SIZE(info), #name, option); \ if (match) { \ *column_info = *match; \ *column_name = #name; \ return column_info; \ } \ } COLUMN_OPTIONS(DEFINE_COLUMN_OPTION_INFO_CHECK); *column_name = NULL; return NULL; } /* * State variables. */ iconv_t opt_iconv_out = ICONV_NONE; char opt_editor[SIZEOF_STR] = ""; const char **opt_cmdline_args = NULL; /* * Mapping between options and command argument mapping. */ const char * diff_context_arg() { static char opt_diff_context_arg[9] = ""; if (opt_diff_context < 0 || !string_format(opt_diff_context_arg, "-U%u", opt_diff_context)) return ""; return opt_diff_context_arg; } const char * use_mailmap_arg() { return opt_mailmap ? "--use-mailmap" : ""; } const char * log_custom_pretty_arg(void) { return opt_mailmap ? "--pretty=format:commit %m %H %P%x00%aN <%aE> %ad%x00%s" : "--pretty=format:commit %m %H %P%x00%an <%ae> %ad%x00%s"; } #define ENUM_ARG(enum_name, arg_string) ENUM_MAP_ENTRY(arg_string, enum_name) static const struct enum_map_entry ignore_space_arg_map[] = { ENUM_ARG(IGNORE_SPACE_NO, ""), ENUM_ARG(IGNORE_SPACE_ALL, "--ignore-all-space"), ENUM_ARG(IGNORE_SPACE_SOME, "--ignore-space-change"), ENUM_ARG(IGNORE_SPACE_AT_EOL, "--ignore-space-at-eol"), }; const char * ignore_space_arg() { return ignore_space_arg_map[opt_ignore_space].name; } static const struct enum_map_entry commit_order_arg_map[] = { ENUM_ARG(COMMIT_ORDER_AUTO, ""), ENUM_ARG(COMMIT_ORDER_DEFAULT, ""), ENUM_ARG(COMMIT_ORDER_TOPO, "--topo-order"), ENUM_ARG(COMMIT_ORDER_DATE, "--date-order"), ENUM_ARG(COMMIT_ORDER_AUTHOR_DATE, "--author-date-order"), ENUM_ARG(COMMIT_ORDER_REVERSE, "--reverse"), }; const char * commit_order_arg() { return commit_order_arg_map[opt_commit_order].name; } const char * commit_order_arg_with_graph(enum graph_display graph_display) { enum commit_order commit_order = opt_commit_order; if (commit_order == COMMIT_ORDER_AUTO && graph_display != GRAPH_DISPLAY_NO) commit_order = COMMIT_ORDER_TOPO; return commit_order_arg_map[commit_order].name; } /* Use --show-notes to support Git >= 1.7.6 */ #define NOTES_ARG "--show-notes" #define NOTES_EQ_ARG NOTES_ARG "=" static char opt_notes_arg[SIZEOF_STR] = NOTES_ARG; const char * show_notes_arg() { if (opt_show_notes) return opt_notes_arg; /* Notes are disabled by default when passing --pretty args. */ return ""; } void update_options_from_argv(const char *argv[]) { int next, flags_pos; for (next = flags_pos = 0; argv[next]; next++) { const char *flag = argv[next]; int value = -1; if (map_enum(&value, commit_order_arg_map, flag)) { opt_commit_order = value; mark_option_seen(&opt_commit_order); continue; } if (map_enum(&value, ignore_space_arg_map, flag)) { opt_ignore_space = value; mark_option_seen(&opt_ignore_space); continue; } if (!strcmp(flag, "--no-notes")) { opt_show_notes = false; mark_option_seen(&opt_show_notes); continue; } if (!prefixcmp(flag, "--show-notes") || !prefixcmp(flag, "--notes")) { opt_show_notes = true; string_ncopy(opt_notes_arg, flag, strlen(flag)); mark_option_seen(&opt_show_notes); continue; } if (!prefixcmp(flag, "-U") && parse_int(&value, flag + 2, 0, 999999) == SUCCESS) { opt_diff_context = value; mark_option_seen(&opt_diff_context); continue; } argv[flags_pos++] = flag; } argv[flags_pos] = NULL; } /* * User config file handling. */ static const struct enum_map_entry color_map[] = { #define COLOR_MAP(name) ENUM_MAP_ENTRY(#name, COLOR_##name) COLOR_MAP(DEFAULT), COLOR_MAP(BLACK), COLOR_MAP(BLUE), COLOR_MAP(CYAN), COLOR_MAP(GREEN), COLOR_MAP(MAGENTA), COLOR_MAP(RED), COLOR_MAP(WHITE), COLOR_MAP(YELLOW), }; static const struct enum_map_entry attr_map[] = { #define ATTR_MAP(name) ENUM_MAP_ENTRY(#name, A_##name) ATTR_MAP(NORMAL), ATTR_MAP(BLINK), ATTR_MAP(BOLD), ATTR_MAP(DIM), ATTR_MAP(REVERSE), ATTR_MAP(STANDOUT), ATTR_MAP(UNDERLINE), }; #define set_attribute(attr, name) map_enum(attr, attr_map, name) enum status_code parse_step(double *opt, const char *arg) { int value = atoi(arg); if (!value && !isdigit(*arg)) return error("Invalid double or percentage"); *opt = value; if (!strchr(arg, '%')) return SUCCESS; /* "Shift down" so 100% and 1 does not conflict. */ *opt /= 100; if (*opt >= 1.0) { *opt = 0.99; return error("Percentage is larger than 100%%"); } if (*opt < 0.0) { *opt = 1; return error("Percentage is less than 0%%"); } return SUCCESS; } enum status_code parse_int(int *opt, const char *arg, int min, int max) { int value = atoi(arg); if (min <= value && value <= max) { *opt = value; return SUCCESS; } return error("Value must be between %d and %d", min, max); } static bool set_color(int *color, const char *name) { if (map_enum(color, color_map, name)) return true; /* Git expects a plain int w/o prefix, however, color is * the preferred Tig color notation. */ if (!prefixcmp(name, "color")) name += 5; return string_isnumber(name) && parse_int(color, name, 0, 255) == SUCCESS; } #define is_quoted(c) ((c) == '"' || (c) == '\'') static enum status_code parse_color_name(const char *color, struct line_rule *rule, const char **prefix_ptr) { const char *prefixend = is_quoted(*color) ? NULL : strchr(color, '.'); if (prefixend) { struct keymap *keymap = get_keymap(color, prefixend - color); if (!keymap) return error("Unknown key map: %.*s", (int) (prefixend - color), color); if (prefix_ptr) *prefix_ptr = keymap->name; color = prefixend + 1; } memset(rule, 0, sizeof(*rule)); if (is_quoted(*color)) { rule->line = color + 1; rule->linelen = strlen(color) - 2; } else { rule->name = color; rule->namelen = strlen(color); } return SUCCESS; } static int find_remapped(const char *remapped[][2], size_t remapped_size, const char *arg) { size_t arglen = strlen(arg); int i; for (i = 0; i < remapped_size; i++) { const char *name = remapped[i][0]; size_t namelen = strlen(name); if (arglen == namelen && !string_enum_compare(arg, name, namelen)) return i; } return -1; } /* Wants: object fgcolor bgcolor [attribute] */ static enum status_code option_color_command(int argc, const char *argv[]) { struct line_rule rule = {0}; const char *prefix = NULL; struct line_info *info; enum status_code code; if (argc < 3) return error("Invalid color mapping: color area fgcolor bgcolor [attrs]"); code = parse_color_name(argv[0], &rule, &prefix); if (code != SUCCESS) return code; info = add_line_rule(prefix, &rule); if (!info) { static const char *obsolete[][2] = { { "acked", "' Acked-by'" }, { "diff-copy-from", "'copy from '" }, { "diff-copy-to", "'copy to '" }, { "diff-deleted-file-mode", "'deleted file mode '" }, { "diff-dissimilarity", "'dissimilarity '" }, { "diff-rename-from", "'rename from '" }, { "diff-rename-to", "'rename to '" }, { "diff-tree", "'diff-tree '" }, { "filename", "file" }, { "help-keymap", "help.section" }, { "main-revgraph", "" }, { "pp-adate", "'AuthorDate: '" }, { "pp-author", "'Author: '" }, { "pp-cdate", "'CommitDate: '" }, { "pp-commit", "'Commit: '" }, { "pp-date", "'Date: '" }, { "reviewed", "' Reviewed-by'" }, { "signoff", "' Signed-off-by'" }, { "stat-head", "status.header" }, { "stat-section", "status.section" }, { "tested", "' Tested-by'" }, { "tree-dir", "tree.directory" }, { "tree-file", "tree.file" }, { "tree-head", "tree.header" }, }; int index; index = find_remapped(obsolete, ARRAY_SIZE(obsolete), rule.name); if (index != -1) { if (!*obsolete[index][1]) return error("%s is obsolete", argv[0]); /* Keep the initial prefix if defined. */ code = parse_color_name(obsolete[index][1], &rule, prefix ? NULL : &prefix); if (code != SUCCESS) return code; info = add_line_rule(prefix, &rule); } if (!info) return error("Unknown color name: %s", argv[0]); code = error("%s has been replaced by %s", obsolete[index][0], obsolete[index][1]); } if (!set_color(&info->fg, argv[1])) return error("Unknown color: %s", argv[1]); if (!set_color(&info->bg, argv[2])) return error("Unknown color: %s", argv[2]); info->attr = 0; while (argc-- > 3) { int attr; if (!set_attribute(&attr, argv[argc])) return error("Unknown color attribute: %s", argv[argc]); info->attr |= attr; } return code; } static enum status_code parse_bool(bool *opt, const char *arg) { *opt = (!strcmp(arg, "1") || !strcmp(arg, "true") || !strcmp(arg, "yes")) ? true : false; if (*opt || !strcmp(arg, "0") || !strcmp(arg, "false") || !strcmp(arg, "no")) return SUCCESS; return error("Non-boolean value treated as false: %s", arg); } static enum status_code parse_enum(const char *name, unsigned int *opt, const char *arg, const struct enum_map *map) { bool is_true; enum status_code code; assert(map->size > 1); if (map_enum_do(map->entries, map->size, (int *) opt, arg)) return SUCCESS; code = parse_bool(&is_true, arg); *opt = is_true ? map->entries[1].value : map->entries[0].value; if (code == SUCCESS) return code; if (!strcmp(name, "date-display")) { const char *msg = ""; if (!strcasecmp(arg, "local")) msg = ", use the 'date-local' column option"; else if (!strcasecmp(arg, "short")) msg = ", use the 'custom' display mode and set 'date-format'"; *opt = map->entries[1].value; return error("'%s' is no longer supported for %s%s", arg, name, msg); } return error("'%s' is not a valid value for %s; using %s", arg, name, enum_name(map->entries[*opt].name)); } static enum status_code parse_string(char *opt, const char *arg, size_t optsize) { int arglen = strlen(arg); switch (arg[0]) { case '\"': case '\'': if (arglen == 1 || arg[arglen - 1] != arg[0]) return ERROR_UNMATCHED_QUOTATION; arg += 1; arglen -= 2; /* Fall-through */ default: string_ncopy_do(opt, optsize, arg, arglen); return SUCCESS; } } static enum status_code parse_encoding(struct encoding **encoding_ref, const char *arg, bool priority) { char buf[SIZEOF_STR]; enum status_code code = parse_string(buf, arg, sizeof(buf)); if (code == SUCCESS) { struct encoding *encoding = *encoding_ref; if (encoding && !priority) return code; encoding = encoding_open(buf); if (encoding) *encoding_ref = encoding; } return code; } static enum status_code parse_args(const char ***args, const char *argv[]) { if (!argv_copy(args, argv)) return ERROR_OUT_OF_MEMORY; return SUCCESS; } enum status_code parse_option(struct option_info *option, const char *prefix, const char *arg) { char name[SIZEOF_STR]; if (!enum_name_prefixed(name, sizeof(name), prefix, option->name)) return error("Failed to parse option"); if (!strcmp("show-notes", name)) { bool *value = option->value; enum status_code res; if (parse_bool(option->value, arg) == SUCCESS) return SUCCESS; *value = true; string_copy(opt_notes_arg, NOTES_EQ_ARG); res = parse_string(opt_notes_arg + STRING_SIZE(NOTES_EQ_ARG), arg, sizeof(opt_notes_arg) - STRING_SIZE(NOTES_EQ_ARG)); if (res == SUCCESS && !opt_notes_arg[STRING_SIZE(NOTES_EQ_ARG)]) opt_notes_arg[STRING_SIZE(NOTES_ARG)] = 0; return res; } if (!strcmp(option->type, "bool")) return parse_bool(option->value, arg); if (!strcmp(option->type, "double")) return parse_step(option->value, arg); if (!strncmp(option->type, "enum", 4)) { const char *type = option->type + STRING_SIZE("enum "); const struct enum_map *map = find_enum_map(type); return parse_enum(name, option->value, arg, map); } if (!strcmp(option->type, "int")) { if (strstr(name, "title-overflow")) { bool enabled = false; int *value = option->value; /* We try to parse it as a boolean (and set the * value to 0 if fale), otherwise we parse it as * an integer and use the given value. */ if (parse_bool(&enabled, arg) == SUCCESS) { if (!enabled) { *value = 0; return SUCCESS; } arg = "50"; } } if (!strcmp(name, "line-number-interval") || !strcmp(name, "tab-size")) return parse_int(option->value, arg, 1, 1024); else if (!strcmp(name, "id-width")) return parse_int(option->value, arg, 0, SIZEOF_REV - 1); else return parse_int(option->value, arg, 0, 1024); } if (!strcmp(option->type, "const char *")) { const char **value = option->value; char *alloc = NULL; if (option->value == &opt_diff_highlight) { bool enabled = false; if (parse_bool(&enabled, arg) == SUCCESS) { if (!enabled) { *value = NULL; return SUCCESS; } arg = "diff-highlight"; } } if (strlen(arg)) { if (arg[0] == '"' && arg[strlen(arg) - 1] == '"') alloc = strndup(arg + 1, strlen(arg + 1) - 1); else alloc = strdup(arg); if (!alloc) return ERROR_OUT_OF_MEMORY; } if (alloc && !strcmp(name, "truncation-delimiter")) { if (!strcmp(alloc, "utf-8") || !strcmp(alloc, "utf8")) { free(alloc); alloc = strdup("⋯"); if (!alloc) return ERROR_OUT_OF_MEMORY; } else if (utf8_width_of(alloc, -1, -1) != 1) { free(alloc); alloc = strdup("~"); if (!alloc) return ERROR_OUT_OF_MEMORY; } } free((void *) *value); *value = alloc; return SUCCESS; } return error("Unhandled option: %s", name); } static enum status_code parse_view_settings(struct view_column **view_column, const char *name_, const char *argv[]) { char buf[SIZEOF_STR]; const char *name = enum_name_copy(buf, sizeof(buf), name_) ? buf : name_; const char *prefixed; if ((prefixed = strstr(name, "-view-"))) { const char *column_name = prefixed + STRING_SIZE("-view-"); size_t column_namelen = strlen(column_name); enum view_column_type type; for (type = 0; type < view_column_type_map->size; type++) { const struct enum_map_entry *column = &view_column_type_map->entries[type]; if (enum_equals(*column, column_name, column_namelen)) return parse_view_column_config(name, type, NULL, argv); if (enum_equals_prefix(*column, column_name, column_namelen)) return parse_view_column_config(name, type, column_name + column->namelen + 1, argv); } } return parse_view_config(view_column, name, argv); } static enum status_code option_update(struct option_info *option, int argc, const char *argv[]) { enum status_code code; if (option->seen) return SUCCESS; if (!strcmp(option->type, "const char **")) return parse_args(option->value, argv + 2); if (argc < 3) return error("Invalid set command: set option = value"); if (!strcmp(option->type, "view_settings")) return parse_view_settings(option->value, argv[0], argv + 2); if (!strcmp(option->type, "struct ref_format **")) return parse_ref_formats(option->value, argv + 2); code = parse_option(option, "", argv[2]); if (code == SUCCESS && argc != 3) return error("Option %s only takes one value", argv[0]); return code; } /* Wants: name = value */ static enum status_code option_set_command(int argc, const char *argv[]) { struct option_info *option; if (argc < 2) return error("Invalid set command: set option = value"); if (strcmp(argv[1], "=")) return error("No value assigned to %s", argv[0]); option = find_option_info(option_info, ARRAY_SIZE(option_info), "", argv[0]); if (option) return option_update(option, argc, argv); { const char *obsolete[][2] = { { "status-untracked-dirs", "status-show-untracked-dirs" }, }; int index = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[0]); if (index != -1) { option = find_option_info(option_info, ARRAY_SIZE(option_info), "", obsolete[index][1]); if (option) { enum status_code code = option_update(option, argc, argv); if (code != SUCCESS) return code; return error("%s has been renamed to %s", obsolete[index][0], obsolete[index][1]); } } } { const char *obsolete[][2] = { { "author-width", "author" }, { "filename-width", "file-name" }, { "line-number-interval", "line-number" }, { "show-author", "author" }, { "show-date", "date" }, { "show-file-size", "file-size" }, { "show-filename", "file-name" }, { "show-id", "id" }, { "show-line-numbers", "line-number" }, { "show-refs", "commit-title" }, { "show-rev-graph", "commit-title" }, { "title-overflow", "commit-title and text" }, }; int index = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[0]); if (index != -1) return error("%s is obsolete; see tigrc(5) for how to set the %s column option", obsolete[index][0], obsolete[index][1]); if (!strcmp(argv[0], "read-git-colors")) return error("read-git-colors has been obsoleted by the git-colors option"); if (!strcmp(argv[0], "cmdline-args")) return error("cmdline-args is obsolete; use view-specific options instead, e.g. main-options"); } return error("Unknown option name: %s", argv[0]); } /* Wants: mode request key */ static enum status_code option_bind_command(int argc, const char *argv[]) { struct key key[16]; size_t keys = 0; enum request request; struct keymap *keymap; const char *key_arg; if (argc < 3) return error("Invalid key binding: bind keymap key action"); if (!(keymap = get_keymap(argv[0], strlen(argv[0])))) { if (!strcmp(argv[0], "branch")) keymap = get_keymap("refs", strlen("refs")); if (!keymap) return error("Unknown key map: %s", argv[0]); } for (keys = 0, key_arg = argv[1]; *key_arg && keys < ARRAY_SIZE(key); keys++) { enum status_code code = get_key_value(&key_arg, &key[keys]); if (code != SUCCESS) return code; } if (*key_arg && keys == ARRAY_SIZE(key)) return error("Except for combos only one key is allowed " "in key combos: %s", argv[1]); request = get_request(argv[2]); if (request == REQ_UNKNOWN) { static const char *obsolete[][2] = { { "view-branch", "view-refs" }, }; static const char *toggles[][2] = { { "diff-context-down", "diff-context" }, { "diff-context-up", "diff-context" }, { "stage-next", ":/^@@" }, { "status-untracked-dirs", "status-show-untracked-dirs" }, { "toggle-author", "author" }, { "toggle-changes", "show-changes" }, { "toggle-commit-order", "show-commit-order" }, { "toggle-date", "date" }, { "toggle-files", "file-filter" }, { "toggle-file-filter", "file-filter" }, { "toggle-file-size", "file-size" }, { "toggle-filename", "filename" }, { "toggle-graphic", "show-graphic" }, { "toggle-id", "id" }, { "toggle-ignore-space", "show-ignore-space" }, { "toggle-lineno", "line-number" }, { "toggle-refs", "commit-title-refs" }, { "toggle-rev-graph", "commit-title-graph" }, { "toggle-show-changes", "show-changes" }, { "toggle-sort-field", "sort-field" }, { "toggle-sort-order", "sort-order" }, { "toggle-title-overflow", "commit-title-overflow" }, { "toggle-untracked-dirs", "status-show-untracked-dirs" }, { "toggle-vertical-split", "show-vertical-split" }, }; int alias; alias = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[2]); if (alias != -1) { const char *action = obsolete[alias][1]; add_keybinding(keymap, get_request(action), key, keys); return error("%s has been renamed to %s", obsolete[alias][0], action); } alias = find_remapped(toggles, ARRAY_SIZE(toggles), argv[2]); if (alias != -1) { const char *action = toggles[alias][0]; const char *arg = prefixcmp(action, "diff-context-") ? NULL : (strstr(action, "-down") ? "-1" : "+1"); const char *mapped = toggles[alias][1]; const char *toggle[] = { ":toggle", mapped, arg, NULL}; const char *other[] = { mapped, NULL }; const char **prompt = *mapped == ':' ? other : toggle; enum status_code code = add_run_request(keymap, key, keys, prompt); if (code == SUCCESS) code = error("%s has been replaced by `%s%s%s%s'", action, prompt == other ? mapped : ":toggle ", prompt == other ? "" : mapped, arg ? " " : "", arg ? arg : ""); return code; } } if (request == REQ_UNKNOWN) return add_run_request(keymap, key, keys, argv + 2); return add_keybinding(keymap, request, key, keys); } static enum status_code load_option_file(const char *path); static enum status_code option_source_command(int argc, const char *argv[]) { enum status_code code; bool quiet = false; if ((argc < 1) || (argc > 2)) return error("Invalid source command: source [-q] "); if (argc == 2) { if (!strcmp(argv[0], "-q")) quiet = true; else return error("Invalid source option: %s", argv[0]); } code = load_option_file(argv[argc - 1]); if (quiet) return code == ERROR_FILE_DOES_NOT_EXIST ? 0 : code; return code == ERROR_FILE_DOES_NOT_EXIST ? error("File does not exist: %s", argv[argc - 1]) : code; } enum status_code set_option(const char *opt, int argc, const char *argv[]) { if (!strcmp(opt, "color")) return option_color_command(argc, argv); if (!strcmp(opt, "set")) return option_set_command(argc, argv); if (!strcmp(opt, "bind")) return option_bind_command(argc, argv); if (!strcmp(opt, "source")) return option_source_command(argc, argv); return error("Unknown option command: %s", opt); } struct config_state { const char *path; size_t lineno; bool errors; }; static enum status_code read_option(char *opt, size_t optlen, char *value, size_t valuelen, void *data) { struct config_state *config = data; enum status_code status = ERROR_NO_OPTION_VALUE; /* Check for comment markers, since read_properties() will * only ensure opt and value are split at first " \t". */ optlen = strcspn(opt, "#"); if (optlen == 0) return SUCCESS; if (opt[optlen] == 0) { /* Look for comment endings in the value. */ size_t len = strcspn(value, "#"); const char *argv[SIZEOF_ARG]; int argc = 0; if (len < valuelen) { valuelen = len; value[valuelen] = 0; } if (!argv_from_string(argv, &argc, value)) status = error("Too many option arguments for %s", opt); else status = set_option(opt, argc, argv); } if (status != SUCCESS) { warn("%s:%zu: %s", config->path, config->lineno, get_status_message(status)); config->errors = true; } /* Always keep going if errors are encountered. */ return SUCCESS; } static enum status_code load_option_file(const char *path) { struct config_state config = { path, 0, false }; struct io io; char buf[SIZEOF_STR]; /* Do not read configuration from stdin if set to "" */ if (!path || !strlen(path)) return SUCCESS; if (!path_expand(buf, sizeof(buf), path)) return error("Failed to expand path: %s", path); /* It's OK that the file doesn't exist. */ if (!io_open(&io, "%s", buf)) { /* XXX: Must return ERROR_FILE_DOES_NOT_EXIST so missing * system tigrc is detected properly. */ if (io_error(&io) == ENOENT) return ERROR_FILE_DOES_NOT_EXIST; return error("Error loading file %s: %s", buf, io_strerror(&io)); } if (io_load_span(&io, " \t", &config.lineno, read_option, &config) != SUCCESS || config.errors == true) warn("Errors while loading %s.", buf); return SUCCESS; } extern const char *builtin_config; enum status_code load_options(void) { const char *tigrc_user = getenv("TIGRC_USER"); const char *tigrc_system = getenv("TIGRC_SYSTEM"); const char *tig_diff_opts = getenv("TIG_DIFF_OPTS"); const bool diff_opts_from_args = !!opt_diff_options; bool custom_tigrc_system = !!tigrc_system; char buf[SIZEOF_STR]; opt_file_filter = true; if (!find_option_info_by_value(&opt_diff_context)->seen) opt_diff_context = -3; if (!custom_tigrc_system) tigrc_system = SYSCONFDIR "/tigrc"; if (!*tigrc_system || (load_option_file(tigrc_system) == ERROR_FILE_DOES_NOT_EXIST && !custom_tigrc_system)) { struct config_state config = { "", 0, false }; struct io io; if (!io_from_string(&io, builtin_config)) return error("Failed to get built-in config"); if (io_load_span(&io, " \t", &config.lineno, read_option, &config) != SUCCESS || config.errors == true) return error("Error in built-in config"); } if (tigrc_user) { load_option_file(tigrc_user); } else { const char *xdg_config_home = getenv("XDG_CONFIG_HOME"); if (!xdg_config_home || !*xdg_config_home) tigrc_user = "~/.config/tig/config"; else if (!string_format(buf, "%s/tig/config", xdg_config_home)) return error("Failed to expand $XDG_CONFIG_HOME"); else tigrc_user = buf; if (load_option_file(tigrc_user) == ERROR_FILE_DOES_NOT_EXIST) load_option_file(TIG_USER_CONFIG); } if (!diff_opts_from_args && tig_diff_opts && *tig_diff_opts) { static const char *diff_opts[SIZEOF_ARG] = { NULL }; char buf[SIZEOF_STR]; int argc = 0; if (!string_format(buf, "%s", tig_diff_opts) || !argv_from_string(diff_opts, &argc, buf)) return error("TIG_DIFF_OPTS contains too many arguments"); else if (!argv_copy(&opt_diff_options, diff_opts)) return error("Failed to format TIG_DIFF_OPTS arguments"); } return SUCCESS; } const char * format_option_value(const struct option_info *option, char buf[], size_t bufsize) { buf[0] = 0; if (!strcmp(option->type, "bool")) { bool *opt = option->value; if (string_nformat(buf, bufsize, NULL, "%s", *opt ? "yes" : "no")) return buf; } else if (!strncmp(option->type, "enum", 4)) { const char *type = option->type + STRING_SIZE("enum "); enum author *opt = option->value; const struct enum_map *map = find_enum_map(type); if (enum_name_copy(buf, bufsize, map->entries[*opt].name)) return buf; } else if (!strcmp(option->type, "int")) { int *opt = option->value; if (opt == &opt_diff_context && *opt < 0) *opt = -*opt; if (string_nformat(buf, bufsize, NULL, "%d", *opt)) return buf; } else if (!strcmp(option->type, "double")) { double *opt = option->value; if (*opt >= 1) { if (string_nformat(buf, bufsize, NULL, "%d", (int) *opt)) return buf; } else if (string_nformat(buf, bufsize, NULL, "%.0f%%", (*opt) * 100)) { return buf; } } else if (!strcmp(option->type, "const char *")) { const char **opt = option->value; size_t bufpos = 0; if (!*opt) return "\"\""; if (!string_nformat(buf, bufsize, &bufpos, "\"%s\"", *opt)) return NULL; return buf; } else if (!strcmp(option->type, "const char **")) { const char *sep = ""; const char ***opt = option->value; size_t bufpos = 0; int i; for (i = 0; (*opt) && (*opt)[i]; i++) { const char *arg = (*opt)[i]; if (!string_nformat(buf, bufsize, &bufpos, "%s%s", sep, arg)) return NULL; sep = " "; } return buf; } else if (!strcmp(option->type, "struct ref_format **")) { struct ref_format ***opt = option->value; if (format_ref_formats(*opt, buf, bufsize) == SUCCESS) return buf; } else if (!strcmp(option->type, "view_settings")) { struct view_column **opt = option->value; if (format_view_config(*opt, buf, bufsize) == SUCCESS) return buf; } else { if (string_nformat(buf, bufsize, NULL, "<%s>", option->type)) return buf; } return NULL; } static bool save_option_settings(FILE *file) { char buf[SIZEOF_STR]; int i; if (!io_fprintf(file, "%s", "\n## Settings\n")) return false; for (i = 0; i < ARRAY_SIZE(option_info); i++) { struct option_info *option = &option_info[i]; const char *name = enum_name(option->name); const char *value = format_option_value(option, buf, sizeof(buf)); if (!value) return false; if (!suffixcmp(name, strlen(name), "-args")) continue; if (!io_fprintf(file, "\nset %-25s = %s", name, value)) return false; } return true; } static bool save_option_keybinding(void *data, const char *group, struct keymap *keymap, enum request request, const char *key, const struct request_info *req_info, const struct run_request *run_req) { FILE *file = data; if (group && !io_fprintf(file, "\n# %s", group)) return false; if (!io_fprintf(file, "\nbind %-10s %-15s ", enum_name(keymap->name), key)) return false; if (req_info) { return io_fprintf(file, "%s", enum_name(req_info->name)); } else { const char *sep = format_run_request_flags(run_req); int i; for (i = 0; run_req->argv[i]; i++) { if (!io_fprintf(file, "%s%s", sep, run_req->argv[i])) return false; sep = " "; } return true; } } static bool save_option_keybindings(FILE *file) { if (!io_fprintf(file, "%s", "\n\n## Keybindings\n")) return false; return foreach_key(save_option_keybinding, file, false); } static bool save_option_color_name(FILE *file, int color) { int i; for (i = 0; i < ARRAY_SIZE(color_map); i++) if (color_map[i].value == color) return io_fprintf(file, " %-8s", enum_name(color_map[i].name)); return io_fprintf(file, " color%d", color); } static bool save_option_color_attr(FILE *file, int attr) { int i; for (i = 0; i < ARRAY_SIZE(attr_map); i++) if ((attr & attr_map[i].value) && !io_fprintf(file, " %s", enum_name(attr_map[i].name))) return false; return true; } static bool save_option_color(void *data, const struct line_rule *rule) { FILE *file = data; const struct line_info *info; for (info = &rule->info; info; info = info->next) { const char *prefix = info->prefix ? info->prefix : ""; const char *prefix_sep = info->prefix ? "." : ""; const char *quote = *rule->line ? "\"" : ""; const char *name = *rule->line ? rule->line : enum_name(rule->name); int name_width = strlen(prefix) + strlen(prefix_sep) + 2 * strlen(quote) + strlen(name); int padding = name_width > 30 ? 0 : 30 - name_width; if (!io_fprintf(file, "\ncolor %s%s%s%s%s%-*s", prefix, prefix_sep, quote, name, quote, padding, "") || !save_option_color_name(file, info->fg) || !save_option_color_name(file, info->bg) || !save_option_color_attr(file, info->attr)) return false; } return true; } static bool save_option_colors(FILE *file) { if (!io_fprintf(file, "%s", "\n\n## Colors\n")) return false; return foreach_line_rule(save_option_color, file); } enum status_code save_options(const char *path) { int fd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0666); FILE *file = fd != -1 ? fdopen(fd, "w") : NULL; enum status_code code = SUCCESS; if (!file) return error("%s", strerror(errno)); if (!io_fprintf(file, "%s", "# Saved by Tig\n") || !save_option_settings(file) || !save_option_keybindings(file) || !save_option_colors(file)) code = error("Write returned an error"); fclose(file); return code; } /* * Repository properties */ static void set_remote_branch(const char *name, const char *value, size_t valuelen) { if (!strcmp(name, ".remote")) { string_ncopy(repo.remote, value, valuelen); } else if (*repo.remote && !strcmp(name, ".merge")) { size_t from = strlen(repo.remote); if (!prefixcmp(value, "refs/heads/")) value += STRING_SIZE("refs/heads/"); if (!string_format_from(repo.remote, &from, "/%s", value)) repo.remote[0] = 0; } } static void set_repo_config_option(char *name, char *value, enum status_code (*cmd)(int, const char **)) { const char *argv[SIZEOF_ARG] = { name, "=" }; int argc = 1 + (cmd == option_set_command); enum status_code code; if (!argv_from_string(argv, &argc, value)) code = error("Too many arguments"); else code = cmd(argc, argv); if (code != SUCCESS) warn("Option 'tig.%s': %s", name, get_status_message(code)); } static struct line_info * parse_git_color_option(struct line_info *info, char *value) { const char *argv[SIZEOF_ARG]; int argc = 0; bool first_color = true; int i; if (!argv_from_string(argv, &argc, value)) return NULL; info->fg = COLOR_DEFAULT; info->bg = COLOR_DEFAULT; info->attr = 0; for (i = 0; i < argc; i++) { int attr = 0; if (set_attribute(&attr, argv[i])) { info->attr |= attr; } else if (set_color(&attr, argv[i])) { if (first_color) info->fg = attr; else info->bg = attr; first_color = false; } } return info; } static void set_git_color_option(const char *name, char *value) { struct line_info parsed = {0}; struct line_info *color = NULL; size_t namelen = strlen(name); int i; if (!opt_git_colors) return; for (i = 0; opt_git_colors[i]; i++) { struct line_rule rule = {0}; const char *prefix = NULL; struct line_info *info; const char *alias = opt_git_colors[i]; const char *sep = strchr(alias, '='); if (!sep || namelen != sep - alias || string_enum_compare(name, alias, namelen)) continue; if (!color) { color = parse_git_color_option(&parsed, value); if (!color) return; } if (parse_color_name(sep + 1, &rule, &prefix) == SUCCESS && (info = add_line_rule(prefix, &rule))) { info->fg = parsed.fg; info->bg = parsed.bg; info->attr = parsed.attr; } } } static void set_encoding(struct encoding **encoding_ref, const char *arg, bool priority) { if (!strcasecmp(arg, "utf-8") || !strcasecmp(arg, "utf8")) return; if (parse_encoding(encoding_ref, arg, priority) == SUCCESS) encoding_arg[0] = 0; } static enum status_code read_repo_config_option(char *name, size_t namelen, char *value, size_t valuelen, void *data) { if (!strcmp(name, "i18n.commitencoding")) set_encoding(&default_encoding, value, false); else if (!strcmp(name, "gui.encoding")) set_encoding(&default_encoding, value, true); else if (!strcmp(name, "core.editor")) string_ncopy(opt_editor, value, valuelen); else if (!strcmp(name, "core.worktree")) string_ncopy(repo.worktree, value, valuelen); else if (!strcmp(name, "core.abbrev")) parse_int(&opt_id_width, value, 0, SIZEOF_REV - 1); else if (!strcmp(name, "diff.noprefix")) parse_bool(&opt_diff_noprefix, value); else if (!strcmp(name, "status.showUntrackedFiles")) parse_bool(&opt_status_show_untracked_files, value); else if (!prefixcmp(name, "tig.color.")) set_repo_config_option(name + 10, value, option_color_command); else if (!prefixcmp(name, "tig.bind.")) set_repo_config_option(name + 9, value, option_bind_command); else if (!prefixcmp(name, "tig.")) set_repo_config_option(name + 4, value, option_set_command); else if (!prefixcmp(name, "color.")) set_git_color_option(name + STRING_SIZE("color."), value); else if (*repo.head && !prefixcmp(name, "branch.") && !strncmp(name + 7, repo.head, strlen(repo.head))) set_remote_branch(name + 7 + strlen(repo.head), value, valuelen); else if (!strcmp(name, "diff.context")) { if (!find_option_info_by_value(&opt_diff_context)->seen) opt_diff_context = -atoi(value); } else if (!strcmp(name, "format.pretty")) { if (!prefixcmp(value, "format:") && strstr(value, "%C(")) argv_append(&opt_log_options, "--pretty=medium"); } return SUCCESS; } enum status_code load_git_config(void) { const char *config_list_argv[] = { "git", "config", "--list", NULL }; return io_run_load(config_list_argv, "=", read_repo_config_option, NULL); } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/pager.c000066400000000000000000000114041332650737300143430ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/options.h" #include "tig/request.h" #include "tig/line.h" #include "tig/keys.h" #include "tig/display.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/diff.h" /* * Pager backend */ bool pager_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { column_data->text = box_text(line); column_data->box = line->data; return true; } static void add_pager_refs(struct view *view, const char *commit_id) { char buf[SIZEOF_STR]; const struct ref *list; size_t bufpos = 0; const char *sep = "Refs: "; list = get_ref_list(commit_id); if (!list) { if (view_has_flags(view, VIEW_ADD_DESCRIBE_REF) && refs_contain_tag()) add_line_text(view, sep, LINE_PP_REFS); return; } for (; list; list = list->next) { const struct ref *ref = list; const struct ref_format *fmt = get_ref_format(opt_reference_format, ref); if (!string_format_from(buf, &bufpos, "%s%s%s%s", sep, fmt->start, ref->name, fmt->end)) return; sep = ", "; } if (bufpos == 0) return; add_line_text(view, buf, LINE_PP_REFS); } static struct line * pager_wrap_line(struct view *view, const char *data, enum line_type type) { size_t first_line = 0; bool has_first_line = false; size_t datalen = strlen(data); size_t lineno = 0; while (datalen > 0 || !has_first_line) { bool wrapped = !!first_line; size_t linelen = string_expanded_length(data, datalen, opt_tab_size, view->width - !!wrapped); struct line *line; line = add_line_text_at_(view, view->lines, data, linelen, type, 1, wrapped); if (!line) break; if (!has_first_line) { first_line = view->lines - 1; has_first_line = true; } if (!wrapped) lineno = line->lineno; line->wrapped = wrapped; line->lineno = lineno; datalen -= linelen; data += linelen; } return has_first_line ? &view->line[first_line] : NULL; } bool pager_common_read(struct view *view, const char *data, enum line_type type, struct line **line_ptr) { struct line *line; if (!data) return true; if (opt_wrap_lines) { line = pager_wrap_line(view, data, type); } else { line = add_line_text(view, data, type); } if (!line) return false; if (line_ptr) *line_ptr = line; if (line->type == LINE_COMMIT && view_has_flags(view, VIEW_ADD_PAGER_REFS)) add_pager_refs(view, data + STRING_SIZE("commit ")); return true; } bool pager_read(struct view *view, struct buffer *buf, bool force_stop) { if (!buf) return true; return pager_common_read(view, buf->data, get_line_type(buf->data), NULL); } enum request pager_request(struct view *view, enum request request, struct line *line) { int split = 0; if (request != REQ_ENTER) return request; if (line->type == LINE_COMMIT && view_has_flags(view, VIEW_OPEN_DIFF)) { open_diff_view(view, OPEN_SPLIT); split = 1; } /* Always scroll the view even if it was split. That way * you can use Enter to scroll through the log view and * split open each commit diff. */ scroll_view(view, REQ_SCROLL_LINE_DOWN); /* FIXME: A minor workaround. Scrolling the view will call report_clear() * but if we are scrolling a non-current view this won't properly * update the view title. */ if (split) update_view_title(view); return REQ_NONE; } void pager_select(struct view *view, struct line *line) { const char *text = box_text(line); string_ncopy(view->env->text, text, strlen(text)); if (line->type == LINE_COMMIT) { string_copy_rev_from_commit_line(view->env->commit, text); if (!view_has_flags(view, VIEW_NO_REF)) string_copy_rev(view->ref, view->env->commit); } } static enum status_code pager_open(struct view *view, enum open_flags flags) { if (!open_from_stdin(flags) && !view->lines && !(flags & OPEN_PREPARED)) return error("No pager content, press %s to run command from prompt", get_view_key(view, REQ_PROMPT)); return begin_update(view, NULL, NULL, flags); } static struct view_ops pager_ops = { "line", "", VIEW_OPEN_DIFF | VIEW_NO_REF | VIEW_NO_GIT_DIR, 0, pager_open, pager_read, view_column_draw, pager_request, view_column_grep, pager_select, NULL, view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), pager_get_column_data, }; DEFINE_VIEW(pager); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/parse.c000066400000000000000000000150631332650737300143640ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/parse.h" #include "tig/map.h" size_t parse_size(const char *text) { size_t size = 0; while (*text == ' ') text++; while (isdigit(*text)) size = (size * 10) + (*text++ - '0'); return size; } /* * Parsing of ident lines. */ static void parse_timesec(struct time *time, const char *sec) { time->sec = (time_t) atol(sec); } static void parse_timezone(struct time *time, const char *zone) { long tz; tz = ('0' - zone[1]) * 60 * 60 * 10; tz += ('0' - zone[2]) * 60 * 60; tz += ('0' - zone[3]) * 60 * 10; tz += ('0' - zone[4]) * 60; if (zone[0] == '-') tz = -tz; time->tz = tz; time->sec -= tz; } void parse_author_line(char *ident, const struct ident **author, struct time *time) { char *nameend = strchr(ident, '<'); char *emailend = strchr(ident, '>'); const char *name, *email = ""; if (nameend && emailend) *nameend = *emailend = 0; name = string_trim(ident); if (nameend) email = string_trim(nameend + 1); if (!*name) name = *email ? email : unknown_ident.name; if (!*email) email = *name ? name : unknown_ident.email; *author = get_author(name, email); /* Parse epoch and timezone */ if (time && emailend && emailend[1] == ' ') { char *secs = emailend + 2; char *zone = strchr(secs, ' '); parse_timesec(time, secs); if (zone && strlen(zone) == STRING_SIZE(" +0700")) parse_timezone(time, zone + 1); } } /* * Blame. */ static bool parse_number(const char **posref, size_t *number, size_t min, size_t max) { const char *pos = *posref; *posref = NULL; pos = strchr(pos + 1, ' '); if (!pos || !isdigit(pos[1])) return false; *number = atoi(pos + 1); if (*number < min || *number > max) return false; *posref = pos; return true; } bool parse_blame_header(struct blame_header *header, const char *text, size_t max_lineno) { const char *pos = text + SIZEOF_REV - 2; if (strlen(text) <= SIZEOF_REV || pos[1] != ' ') return false; string_ncopy(header->id, text, SIZEOF_REV); if (!parse_number(&pos, &header->orig_lineno, 1, 9999999) || !parse_number(&pos, &header->lineno, 1, max_lineno) || !parse_number(&pos, &header->group, 1, max_lineno - header->lineno + 1)) return false; return true; } static bool match_blame_header(const char *name, char **line) { size_t namelen = strlen(name); bool matched = !strncmp(name, *line, namelen); if (matched) *line += namelen; return matched; } bool parse_blame_info(struct blame_commit *commit, char author[SIZEOF_STR], char *line) { if (match_blame_header("author ", &line)) { string_ncopy_do(author, SIZEOF_STR, line, strlen(line)); } else if (match_blame_header("author-mail ", &line)) { char *end = strchr(line, '>'); if (end) *end = 0; if (*line == '<') line++; commit->author = get_author(author, line); author[0] = 0; } else if (match_blame_header("author-time ", &line)) { parse_timesec(&commit->time, line); } else if (match_blame_header("author-tz ", &line)) { parse_timezone(&commit->time, line); } else if (match_blame_header("summary ", &line)) { string_ncopy(commit->title, line, strlen(line)); } else if (match_blame_header("previous ", &line)) { if (strlen(line) <= SIZEOF_REV) return false; string_copy_rev(commit->parent_id, line); line += SIZEOF_REV; commit->parent_filename = get_path(line); if (!commit->parent_filename) return true; } else if (match_blame_header("filename ", &line)) { commit->filename = get_path(line); return true; } return false; } /* * Diff. */ static bool parse_ulong(const char **pos_ptr, unsigned long *value, char skip, bool optional) { const char *start = *pos_ptr; char *end; if (*start != skip) return optional; start++; *value = strtoul(start, &end, 10); if (end == start) return false; while (isspace(*end)) end++; *pos_ptr = end; return true; } bool parse_chunk_header(struct chunk_header *header, const char *line) { memset(header, 0, sizeof(*header)); header->new.lines = header->old.lines = 1; if (!prefixcmp(line, "@@ -")) line += STRING_SIZE("@@ -") - 1; else if (!prefixcmp(line, "@@@ -") && (line = strchr(line + STRING_SIZE("@@@ -"), '-'))) /* Stay at that '-'. */ ; else return false; return parse_ulong(&line, &header->old.position, '-', false) && parse_ulong(&line, &header->old.lines, ',', true) && parse_ulong(&line, &header->new.position, '+', false) && parse_ulong(&line, &header->new.lines, ',', false); } bool parse_chunk_lineno(unsigned long *lineno, const char *chunk, int marker) { struct chunk_header chunk_header; *lineno = 0; if (!parse_chunk_header(&chunk_header, chunk)) return false; *lineno = marker == '-' ? chunk_header.old.position : chunk_header.new.position; return true; } /* * Caches. */ struct path_entry { char path[1]; }; DEFINE_STRING_MAP(path_cache, struct path_entry *, path, 32) /* Small cache to reduce memory consumption. No entries are ever * freed. */ const char * get_path(const char *path) { struct path_entry *entry = string_map_get(&path_cache, path); if (!entry) { entry = calloc(1, sizeof(*entry) + strlen(path)); if (!entry || !string_map_put(&path_cache, path, entry)) { free(entry); return NULL; } strncpy(entry->path, path, strlen(path)); } return entry->path; } DEFINE_STRING_MAP(author_cache, const struct ident *, key, 32) /* Small author cache to reduce memory consumption. No entries * are ever freed. */ struct ident * get_author(const char *name, const char *email) { char key[SIZEOF_STR + SIZEOF_STR]; struct ident *ident; string_format(key, "%s%s", email, name); ident = string_map_get(&author_cache, key); if (ident) return ident; ident = calloc(1, sizeof(*ident)); if (!ident) return NULL; ident->key = strdup(key); ident->name = strdup(name); ident->email = strdup(email); if (!ident->key || !ident->name || !ident->email || !string_map_put(&author_cache, key, ident)) { free((void *) ident->key); free((void *) ident->name); free((void *) ident->email); free(ident); return NULL; } return ident; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/prompt.c000066400000000000000000000637361332650737300146050ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/repo.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/display.h" #include "tig/options.h" #include "tig/prompt.h" #include "tig/pager.h" #include "tig/types.h" #ifdef HAVE_READLINE #include #include #endif /* HAVE_READLINE */ static char * prompt_input(const char *prompt, struct input *input) { enum input_status status = INPUT_OK; unsigned char chars_length[SIZEOF_STR]; struct key key; size_t promptlen = strlen(prompt); int pos = 0, chars = 0; int last_buf_length = promptlen ? -1 : promptlen; input->buf[0] = 0; input->context[0] = 0; if (strlen(prompt) > 0) curs_set(1); while (status == INPUT_OK || status == INPUT_SKIP) { int buf_length = strlen(input->buf) + promptlen; int offset = pos || buf_length != last_buf_length ? pos + promptlen : -1; last_buf_length = buf_length; if (offset >= 0) update_status_with_context(input->context, "%s%.*s", prompt, pos, input->buf); else wmove(status_win, 0, buf_length); if (get_input(offset, &key) == OK) { int len = strlen(key.data.bytes); if (pos + len >= sizeof(input->buf)) { report("Input string too long"); curs_set(0); return NULL; } string_ncopy_do(input->buf + pos, sizeof(input->buf) - pos, key.data.bytes, len); pos += len; chars_length[chars++] = len; status = input->handler(input, &key); if (status != INPUT_OK) { pos -= len; chars--; } else { int changed_pos = strlen(input->buf); if (changed_pos != pos) { pos = changed_pos; chars_length[chars - 1] = changed_pos - (pos - len); } } } else { status = input->handler(input, &key); if (status == INPUT_DELETE) { int len = chars_length[--chars]; pos -= len; status = INPUT_OK; } else { int changed_pos = strlen(input->buf); if (changed_pos != pos) { pos = changed_pos; chars_length[chars++] = changed_pos - pos; } } } input->buf[pos] = 0; } curs_set(0); report_clear(); if (status == INPUT_CANCEL) return NULL; input->buf[pos++] = 0; return input->buf; } enum input_status prompt_default_handler(struct input *input, struct key *key) { switch (key_to_value(key)) { case KEY_RETURN: case KEY_ENTER: case '\n': return *input->buf || input->allow_empty ? INPUT_STOP : INPUT_CANCEL; case KEY_BACKSPACE: return *input->buf ? INPUT_DELETE : INPUT_CANCEL; case KEY_ESC: return INPUT_CANCEL; default: return INPUT_SKIP; } } static enum input_status prompt_script_handler(struct input *input, struct key *key) { switch (key_to_value(key)) { case KEY_RETURN: case KEY_ENTER: case '\n': return INPUT_STOP; default: return INPUT_OK; } } static enum input_status prompt_yesno_handler(struct input *input, struct key *key) { unsigned long c = key_to_unicode(key); if (c == 'y' || c == 'Y') return INPUT_STOP; if (c == 'n' || c == 'N' || key_to_control(key) == 'C') return INPUT_CANCEL; return prompt_default_handler(input, key); } bool prompt_yesno(const char *prompt) { char prompt2[SIZEOF_STR]; struct input input = { prompt_yesno_handler, false, NULL }; if (!string_format(prompt2, "%s [Yy/Nn]", prompt)) return false; return !!prompt_input(prompt2, &input); } struct incremental_input { struct input input; input_handler handler; bool edit_mode; }; static enum input_status read_prompt_handler(struct input *input, struct key *key) { struct incremental_input *incremental = (struct incremental_input *) input; if (incremental->edit_mode && !key->modifiers.multibytes) return prompt_default_handler(input, key); if (!unicode_width(key_to_unicode(key), 8)) return INPUT_SKIP; if (!incremental->handler) return INPUT_OK; return incremental->handler(input, key); } char * read_prompt_incremental(const char *prompt, bool edit_mode, bool allow_empty, input_handler handler, void *data) { static struct incremental_input incremental = { { read_prompt_handler } }; incremental.input.allow_empty = allow_empty; incremental.input.data = data; incremental.input.buf[0] = 0; incremental.input.context[0] = 0; incremental.handler = handler; incremental.edit_mode = edit_mode; return prompt_input(prompt, (struct input *) &incremental); } #ifdef HAVE_READLINE static volatile bool prompt_interrupted = false; static void readline_display(void) { update_status("%s%s", rl_display_prompt, rl_line_buffer); wmove(status_win, 0, strlen(rl_display_prompt) + rl_point); wrefresh(status_win); } static char * readline_variable_generator(const char *text, int state) { static const char *vars[] = { #define FORMAT_VAR(type, name, ifempty, initval) "%(" #name ")", ARGV_ENV_INFO(FORMAT_VAR) #undef FORMAT_VAR #define FORMAT_VAR(type, name) "%(repo:" #name ")", REPO_INFO(FORMAT_VAR) #undef FORMAT_VAR NULL }; static int index, len; const char *name; char *variable = NULL; /* No match */ /* If it is a new word to complete, initialize */ if (!state) { index = 0; len = strlen(text); } /* Return the next name which partially matches */ while ((name = vars[index])) { index++; /* Complete or format a variable */ if (strncmp(name, text, len) == 0) { if (strlen(name) > len) variable = strdup(name); else variable = argv_format_arg(&argv_env, text); break; } } return variable; } static char * readline_action_generator(const char *text, int state) { static const char *actions[] = { "!", "source", "color", "bind", "set", "toggle", "goto", "save-display", "save-options", "exec", "echo", #define REQ_GROUP(help) #define REQ_(req, help) #req REQ_INFO, #undef REQ_GROUP #undef REQ_ NULL }; static int index, len; const char *name; char *match = NULL; /* No match */ /* If it is a new word to complete, initialize */ if (!state) { index = 0; len = strlen(text); } /* Return the next name which partially matches */ while ((name = actions[index])) { name = enum_name(name); index++; if (strncmp(name, text, len) == 0) { /* Ignore exact completion */ if (strlen(name) > len) match = strdup(name); break; } } return match; } static char * readline_set_generator(const char *text, int state) { static const char *words[] = { #define DEFINE_OPTION_NAME(name, type, flags) #name " = ", OPTION_INFO(DEFINE_OPTION_NAME) #undef DEFINE_OPTION_NAME NULL }; static int index, len; const char *name; char *match = NULL; /* No match */ /* If it is a new word to complete, initialize */ if (!state) { index = 0; len = strlen(text); } /* Return the next name which partially matches */ while ((name = words[index])) { name = enum_name(name); index++; if (strncmp(name, text, len) == 0) { /* Ignore exact completion */ if (strlen(name) > len) match = strdup(name); break; } } return match; } static char * readline_toggle_generator(const char *text, int state) { static const char **words; static int index, len; const char *name; char *match = NULL; /* No match */ if (!words) { /* TODO: Only complete column options that are defined * for the view. */ #define DEFINE_OPTION_WORD(name, type, flags) argv_append(&words, #name); #define DEFINE_COLUMN_OPTIONS_WORD(name, type, flags) #name, #define DEFINE_COLUMN_OPTIONS_WORDS(name, id, options) \ if (VIEW_COLUMN_##id != VIEW_COLUMN_SECTION) { \ const char *vars[] = { \ options(DEFINE_COLUMN_OPTIONS_WORD) \ }; \ char buf[SIZEOF_STR]; \ int i; \ for (i = 0; i < ARRAY_SIZE(vars); i++) { \ if (enum_name_prefixed(buf, sizeof(buf), #name, vars[i])) \ argv_append(&words, buf); \ } \ } OPTION_INFO(DEFINE_OPTION_WORD) COLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_WORDS); } /* If it is a new word to complete, initialize */ if (!state) { index = 0; len = strlen(text); } /* Return the next name which partially matches */ while ((name = words[index])) { name = enum_name(name); index++; if (strncmp(name, text, len) == 0) { /* Ignore exact completion */ if (strlen(name) > len) match = strdup(name); break; } } return match; } static int readline_getc(FILE *stream) { return get_input_char(); } static char ** readline_completion(const char *text, int start, int end) { /* Do not append a space after a completion */ rl_completion_suppress_append = 1; /* * If the word is at the start of the line, * then it is a tig action to complete. */ if (start == 0) return rl_completion_matches(text, readline_action_generator); /* * If the line begins with "toggle", then we complete toggle options. */ if (start >= 7 && strncmp(rl_line_buffer, "toggle ", 7) == 0) return rl_completion_matches(text, readline_toggle_generator); /* * If the line begins with "set", then we complete set options. * (unless it is already completed) */ if (start >= 4 && strncmp(rl_line_buffer, "set ", 4) == 0 && !strchr(rl_line_buffer, '=')) return rl_completion_matches(text, readline_set_generator); /* * Otherwise it might be a variable name... */ if (strncmp(text, "%(", 2) == 0) return rl_completion_matches(text, readline_variable_generator); /* * ... or finally fall back to filename completion. */ return NULL; } static void readline_display_matches(char **matches, int num_matches, int max_length) { unsigned int i; wmove(status_win, 0, 0); waddstr(status_win, "matches: "); /* matches[0] is the incomplete word */ for (i = 1; i < num_matches + 1; ++i) { waddstr(status_win, matches[i]); waddch(status_win, ' '); } wgetch(status_win); wrefresh(status_win); } static void readline_init(void) { /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "tig"; /* Word break caracters (we removed '(' to match variables) */ rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{"; /* Custom display function */ rl_redisplay_function = readline_display; rl_getc_function = readline_getc; /* Completion support */ rl_attempted_completion_function = readline_completion; rl_completion_display_matches_hook = readline_display_matches; /* Let ncurses deal with the LINES and COLUMNS environment variables */ rl_change_environment = 0; rl_catch_sigwinch = 0; } static void sigint_absorb_handler(int sig) { signal(SIGINT, SIG_DFL); prompt_interrupted = true; } char * read_prompt(const char *prompt) { static char *line = NULL; HIST_ENTRY *last_entry; if (line) { free(line); line = NULL; } curs_set(1); if (signal(SIGINT, sigint_absorb_handler) == SIG_ERR) die("Failed to setup sigint handler"); line = readline(prompt); if (signal(SIGINT, SIG_DFL) == SIG_ERR) die("Failed to remove sigint handler"); curs_set(0); /* readline can leave the virtual cursor out-of-place */ set_cursor_pos(0, 0); if (prompt_interrupted) { free(line); line = NULL; } prompt_interrupted = false; last_entry = history_get(history_length); if (line && *line && (!last_entry || strcmp(line, last_entry->line))) add_history(line); return line; } static const char * prompt_histfile(void) { static char path[SIZEOF_STR] = ""; const char *xdg_data_home = getenv("XDG_DATA_HOME"); const char *home = getenv("HOME"); int fd; if (!xdg_data_home || !*xdg_data_home) { if (!string_format(path, "%s/.local/share/tig/history", home)) die("Failed to expand $HOME"); } else if (!string_format(path, "%s/tig/history", xdg_data_home)) die("Failed to expand $XDG_DATA_HOME"); fd = open(path, O_RDWR | O_CREAT | O_APPEND, 0666); if (fd > 0) close(fd); else if (!string_format(path, "%s/.tig_history", home)) die("Failed to expand $HOME"); return path; } static int history_go_line(int rel_line_num) { /* history_set_pos confusingly takes an absolute index. Expose a * "relative offset" version consistent with the rest of readline. */ return history_set_pos(rel_line_num - history_base); } static void prompt_history_dedupe(void) { HIST_ENTRY *uniq_entry, *earlier_entry; int uniq_lineno; using_history(); uniq_lineno = history_length; while (uniq_lineno >= history_base) { history_go_line(uniq_lineno); uniq_entry = current_history(); if (!uniq_entry) break; while ((earlier_entry = previous_history())) { if (!strcmp(earlier_entry->line, uniq_entry->line) && ((earlier_entry = remove_history(where_history())))) { free_history_entry(earlier_entry); uniq_lineno--; } } uniq_lineno--; } /* defensive hard reset */ using_history(); history_go_line(history_length); } static void prompt_teardown(void) { if (opt_history_size <= 0) return; prompt_history_dedupe(); write_history(prompt_histfile()); } void prompt_init(void) { HIST_ENTRY *last_entry; readline_init(); if (opt_history_size <= 0) return; using_history(); stifle_history(opt_history_size); read_history(prompt_histfile()); if (atexit(prompt_teardown)) die("Failed to register prompt_teardown"); last_entry = history_get(history_length); if (last_entry) string_ncopy(argv_env.search, last_entry->line, strlen(last_entry->line)); } #else char * read_prompt(const char *prompt) { return read_prompt_incremental(prompt, true, true, NULL, NULL); } void prompt_init(void) { } #endif /* HAVE_READLINE */ bool prompt_menu(const char *prompt, const struct menu_item *items, int *selected) { enum input_status status = INPUT_OK; char buf[128]; struct key key; int size = 0; while (items[size].text) size++; assert(size > 0); curs_set(1); while (status == INPUT_OK) { const struct menu_item *item = &items[*selected]; const char hotkey[] = { ' ', '[', (char) item->hotkey, ']', 0 }; int i; if (!string_format(buf, "(%d of %d)", *selected + 1, size)) buf[0] = 0; update_status_with_context(buf, "%s %s%s", prompt, item->text, item->hotkey ? hotkey : ""); switch (get_input(COLS - 1, &key)) { case KEY_RETURN: case KEY_ENTER: case '\n': status = INPUT_STOP; break; case KEY_LEFT: case KEY_UP: *selected = *selected - 1; if (*selected < 0) *selected = size - 1; break; case KEY_RIGHT: case KEY_DOWN: *selected = (*selected + 1) % size; break; case KEY_ESC: status = INPUT_CANCEL; break; default: if (key_to_control(&key) == 'C') { status = INPUT_CANCEL; break; } for (i = 0; items[i].text; i++) if (items[i].hotkey == key.data.bytes[0]) { *selected = i; status = INPUT_STOP; break; } } } curs_set(0); report_clear(); return status != INPUT_CANCEL; } static struct option_info option_toggles[] = { #define DEFINE_OPTION_TOGGLES(name, type, flags) { #name, STRING_SIZE(#name), #type, &opt_ ## name, flags }, OPTION_INFO(DEFINE_OPTION_TOGGLES) }; static bool find_arg(const char *argv[], const char *arg) { int i; for (i = 0; argv && argv[i]; i++) if (!strcmp(argv[i], arg)) return true; return false; } static enum status_code prompt_toggle_option(struct view *view, const char *argv[], const char *prefix, struct option_info *toggle, enum view_flag *flags) { char name[SIZEOF_STR]; if (!enum_name_prefixed(name, sizeof(name), prefix, toggle->name)) return error("Failed to toggle option %s", toggle->name); *flags = toggle->flags; if (!strcmp(toggle->type, "bool")) { bool *opt = toggle->value; *opt = !*opt; if (opt == &opt_mouse) enable_mouse(*opt); return success("set %s = %s", name, *opt ? "yes" : "no"); } else if (!strncmp(toggle->type, "enum", 4)) { const char *type = toggle->type + STRING_SIZE("enum "); enum author *opt = toggle->value; const struct enum_map *map = find_enum_map(type); *opt = (*opt + 1) % map->size; return success("set %s = %s", name, enum_name(map->entries[*opt].name)); } else if (!strcmp(toggle->type, "int")) { const char *arg = argv[2] ? argv[2] : "1"; int diff = atoi(arg); int *opt = toggle->value; if (!diff) diff = *arg == '-' ? -1 : 1; if (opt == &opt_diff_context && *opt < 0) *opt = -*opt; if (opt == &opt_diff_context && diff < 0) { if (!*opt) return error("Diff context cannot be less than zero"); if (*opt < -diff) diff = -*opt; } if (strstr(name, "commit-title-overflow")) { *opt = *opt ? -*opt : 50; if (*opt < 0) return success("set %s = no", name); diff = 0; } *opt += diff; return success("set %s = %d", name, *opt); } else if (!strcmp(toggle->type, "double")) { const char *arg = argv[2] ? argv[2] : "1.0"; double *opt = toggle->value; int sign = 1; double diff; if (*arg == '-') { sign = -1; arg++; } if (parse_step(&diff, arg) != SUCCESS) diff = strtod(arg, NULL); *opt += sign * diff; return success("set %s = %.2f", name, *opt); } else if (!strcmp(toggle->type, "const char **")) { const char ***opt = toggle->value; bool found = true; int i; if (argv_size(argv) <= 2) { argv_free(*opt); (*opt)[0] = NULL; return SUCCESS; } for (i = 2; argv[i]; i++) { if (!find_arg(*opt, argv[i])) { found = false; break; } } if (found) { int next, pos; for (next = 0, pos = 0; (*opt)[pos]; pos++) { const char *arg = (*opt)[pos]; if (find_arg(argv + 2, arg)) { free((void *) arg); continue; } (*opt)[next++] = arg; } (*opt)[next] = NULL; } else if (!argv_copy(opt, argv + 2)) { return ERROR_OUT_OF_MEMORY; } return SUCCESS; } else { return error("Unsupported `:toggle %s` (%s)", name, toggle->type); } } static enum status_code prompt_toggle(struct view *view, const char *argv[], enum view_flag *flags) { const char *option = argv[1]; size_t optionlen = option ? strlen(option) : 0; struct option_info template; struct option_info *toggle; struct view_column *column; const char *column_name; if (!option) return error("%s", "No option name given to :toggle"); if (enum_equals_static("sort-field", option, optionlen) || enum_equals_static("sort-order", option, optionlen)) { if (!view_has_flags(view, VIEW_SORTABLE)) { return error("Sorting is not yet supported for the %s view", view->name); } else { bool sort_field = enum_equals_static("sort-field", option, optionlen); struct sort_state *sort = &view->sort; sort_view(view, sort_field); return success("set %s = %s", option, sort_field ? view_column_name(get_sort_field(view)) : sort->reverse ? "descending" : "ascending"); } } toggle = find_option_info(option_toggles, ARRAY_SIZE(option_toggles), "", option); if (toggle) return prompt_toggle_option(view, argv, "", toggle, flags); for (column = view->columns; column; column = column->next) { toggle = find_column_option_info(column->type, &column->opt, option, &template, &column_name); if (toggle) return prompt_toggle_option(view, argv, column_name, toggle, flags); } return error("`:toggle %s` not supported", option); } static void prompt_update_display(enum view_flag flags) { struct view *view; int i; if (flags & VIEW_RESET_DISPLAY) { resize_display(); redraw_display(true); } foreach_displayed_view(view, i) { if (view_has_flags(view, flags) && view_can_refresh(view)) reload_view(view); else redraw_view(view); } } enum request run_prompt_command(struct view *view, const char *argv[]) { enum request request; const char *cmd = argv[0]; size_t cmdlen = cmd ? strlen(cmd) : 0; if (!cmd) return REQ_NONE; if (string_isnumber(cmd)) { int lineno = view->pos.lineno + 1; if (parse_int(&lineno, cmd, 0, view->lines) == SUCCESS) { if (!lineno) lineno = 1; select_view_line(view, lineno - 1); report_clear(); } else { report("Unable to parse '%s' as a line number", cmd); } } else if (iscommit(cmd)) { goto_id(view, cmd, true, true); return REQ_NONE; } else if (cmdlen > 1 && (cmd[0] == '/' || cmd[0] == '?')) { char search[SIZEOF_STR]; if (!argv_to_string(argv, search, sizeof(search), " ")) { report("Failed to copy search string"); return REQ_NONE; } if (!strcmp(search + 1, view->env->search)) return cmd[0] == '/' ? REQ_FIND_NEXT : REQ_FIND_PREV; string_ncopy(view->env->search, search + 1, strlen(search + 1)); return cmd[0] == '/' ? REQ_FIND_NEXT : REQ_FIND_PREV; } else if (cmdlen > 1 && cmd[0] == '!') { struct view *next = &pager_view; bool copied; /* Trim the leading '!'. */ argv[0] = cmd + 1; copied = argv_format(view->env, &next->argv, argv, false, true); argv[0] = cmd; if (!copied) { report("Argument formatting failed"); } else { /* When running random commands, initially show the * command in the title. However, it maybe later be * overwritten if a commit line is selected. */ argv_to_string(next->argv, next->ref, sizeof(next->ref), " "); next->dir = NULL; open_pager_view(view, OPEN_PREPARED | OPEN_WITH_STDERR); } } else if (!strcmp(cmd, "goto")) { if (!argv[1] || !strlen(argv[1])) report("goto requires an argument"); else goto_id(view, argv[1], true, true); return REQ_NONE; } else if (!strcmp(cmd, "echo")) { const char **fmt_argv = NULL; char text[SIZEOF_STR] = ""; if (argv[1] && strlen(argv[1]) > 0 && (!argv_format(view->env, &fmt_argv, &argv[1], false, true) || !argv_to_string(fmt_argv, text, sizeof(text), " ") )) { report("Failed to format echo string"); return REQ_NONE; } report("%s", text); return REQ_NONE; } else if (!strcmp(cmd, "save-display")) { const char *path = argv[1] ? argv[1] : "tig-display.txt"; if (!save_display(path)) report("Failed to save screen to %s", path); else report("Saved screen to %s", path); } else if (!strcmp(cmd, "save-view")) { const char *path = argv[1] ? argv[1] : "tig-view.txt"; if (!save_view(view, path)) report("Failed to save view to %s", path); else report("Saved view to %s", path); } else if (!strcmp(cmd, "save-options")) { const char *path = argv[1] ? argv[1] : "tig-options.txt"; enum status_code code = save_options(path); if (code != SUCCESS) report("Failed to save options: %s", get_status_message(code)); else report("Saved options to %s", path); } else if (!strcmp(cmd, "exec")) { // argv may be allocated and mutations below will cause // free() to error out so backup and restore. :( const char *cmd = argv[1]; struct run_request req = { view->keymap, {0}, argv + 1 }; enum status_code code = parse_run_request_flags(&req.flags, argv + 1); if (code != SUCCESS) { argv[1] = cmd; report("Failed to execute command: %s", get_status_message(code)); } else { request = exec_run_request(view, &req); argv[1] = cmd; return request; } } else if (!strcmp(cmd, "toggle")) { enum view_flag flags = VIEW_NO_FLAGS; enum status_code code = prompt_toggle(view, argv, &flags); const char *action = get_status_message(code); if (code != SUCCESS) { report("%s", action); return REQ_NONE; } prompt_update_display(flags); if (*action) report("%s", action); } else if (!strcmp(cmd, "script")) { enum status_code code = open_script(argv[1]); if (code != SUCCESS) report("%s", get_status_message(code)); return REQ_NONE; } else { struct key key = {{0}}; enum status_code code; enum view_flag flags = VIEW_NO_FLAGS; /* Try : */ key.modifiers.multibytes = 1; string_ncopy(key.data.bytes, cmd, cmdlen); request = get_keybinding(view->keymap, &key, 1, NULL); if (request != REQ_UNKNOWN) return request; /* Try : */ request = get_request(cmd); if (request != REQ_UNKNOWN) return request; code = set_option(argv[0], argv_size(argv + 1), &argv[1]); if (code != SUCCESS) { report("%s", get_status_message(code)); return REQ_NONE; } if (!strcmp(cmd, "set")) { struct option_info *toggle; toggle = find_option_info(option_toggles, ARRAY_SIZE(option_toggles), "", argv[1]); if (toggle) flags = toggle->flags; } if (flags) { prompt_update_display(flags); } else { if (!strcmp(cmd, "color")) init_colors(); resize_display(); redraw_display(true); } } return REQ_NONE; } enum request exec_run_request(struct view *view, struct run_request *req) { const char **argv = NULL; bool confirmed = false; enum request request = REQ_NONE; char cmd[SIZEOF_MED_STR]; const char *req_argv[SIZEOF_ARG]; int req_argc = 0; if (!argv_to_string(req->argv, cmd, sizeof(cmd), " ") || !argv_from_string_no_quotes(req_argv, &req_argc, cmd) || !argv_format(view->env, &argv, req_argv, false, true) || !argv) { report("Failed to format arguments"); return REQ_NONE; } if (req->flags.internal) { request = run_prompt_command(view, argv); } else { confirmed = !req->flags.confirm; if (req->flags.confirm) { char cmd[SIZEOF_STR], prompt[SIZEOF_STR]; const char *and_exit = req->flags.exit ? " and exit" : ""; if (argv_to_string_quoted(argv, cmd, sizeof(cmd), " ") && string_format(prompt, "Run `%s`%s?", cmd, and_exit) && prompt_yesno(prompt)) { confirmed = true; } } if (confirmed) open_external_viewer(argv, repo.cdup, req->flags.silent, !req->flags.exit, req->flags.echo, req->flags.quick, false, ""); } if (argv) argv_free(argv); free(argv); if (request == REQ_NONE) { if (req->flags.confirm && !confirmed) request = REQ_NONE; else if (req->flags.exit) request = REQ_QUIT; else if (!req->flags.internal && watch_dirty(&view->watch)) request = REQ_REFRESH; } return request; } enum request open_prompt(struct view *view) { char *cmd; const char *argv[SIZEOF_ARG] = { NULL }; int argc = 0; if (is_script_executing()) cmd = read_prompt_incremental(" ", false, true, prompt_script_handler, NULL); else cmd = read_prompt(":"); if (cmd && *cmd && !argv_from_string(argv, &argc, cmd)) { report("Too many arguments"); return REQ_NONE; } if (!cmd || !*cmd) { report_clear(); return REQ_NONE; } return run_prompt_command(view, argv); } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/refdb.c000066400000000000000000000271201332650737300143310ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/map.h" #include "tig/argv.h" #include "tig/io.h" #include "tig/watch.h" #include "tig/options.h" #include "tig/repo.h" #include "tig/refdb.h" static struct ref *refs_head = NULL; static size_t refs_tags; DEFINE_STRING_MAP(refs_by_name, struct ref *, name, 32) DEFINE_STRING_MAP(refs_by_id, struct ref *, id, 16) int ref_compare(const struct ref *ref1, const struct ref *ref2) { if (ref1->type != ref2->type) return ref1->type - ref2->type; return strcmp_numeric(ref1->name, ref2->name); } static int ref_canonical_compare(const struct ref *ref1, const struct ref *ref2) { int tag_diff = !!ref_is_tag(ref2) - !!ref_is_tag(ref1); if (tag_diff) return tag_diff; if (ref1->type != ref2->type) return (ref1->type - ref2->type); return strcmp_numeric(ref1->name, ref2->name); } struct ref_visitor_data { ref_visitor_fn visitor; void *data; }; static bool foreach_ref_visitor(void *data, void *value) { struct ref_visitor_data *visitor_data = data; const struct ref *ref = value; if (!ref->valid) return true; return visitor_data->visitor(visitor_data->data, ref); } void foreach_ref(ref_visitor_fn visitor, void *data) { struct ref_visitor_data visitor_data = { visitor, data }; string_map_foreach(&refs_by_name, foreach_ref_visitor, &visitor_data); } const struct ref * get_ref_head() { return refs_head; } const struct ref * get_ref_list(const char *id) { return string_map_get(&refs_by_id, id); } const struct ref * get_canonical_ref(const char *id) { const struct ref *ref = NULL; const struct ref *pos; foreach_ref_list(pos, id) if (!ref || ref_canonical_compare(pos, ref) < 0) ref = pos; return ref; } bool ref_list_contains_tag(const char *id) { const struct ref *ref; foreach_ref_list(ref, id) if (ref_is_tag(ref)) return true; return false; } struct ref_opt { const char *remote; const char *head; enum watch_trigger changed; }; static enum status_code add_ref_to_id_map(struct ref *ref) { void **ref_lists_slot = string_map_put_to(&refs_by_id, ref->id); if (!ref_lists_slot) return SUCCESS; /* First remove the ref from the ID list, to ensure that it is * reinserted at the right position if the type changes. */ { struct ref *list, *prev; for (list = *ref_lists_slot, prev = NULL; list; prev = list, list = list->next) if (list == ref) { if (!prev) *ref_lists_slot = ref->next; else prev->next = ref->next; } ref->next = NULL; } if (*ref_lists_slot == NULL || ref_compare(ref, *ref_lists_slot) <= 0) { ref->next = *ref_lists_slot; *ref_lists_slot = ref; } else { struct ref *list; for (list = *ref_lists_slot; list->next; list = list->next) { if (ref_compare(ref, list->next) <= 0) break; } ref->next = list->next; list->next = ref; } return SUCCESS; } static void remove_ref_from_id_map(struct ref *ref) { void **ref_slot = string_map_get_at(&refs_by_id, ref->id); struct ref *list = ref_slot ? *ref_slot : NULL; struct ref *prev = NULL; for (; list; prev = list, list = list->next) { if (list != ref) continue; if (!prev) *ref_slot = ref->next; else prev->next = ref->next; ref->next = NULL; break; } if (ref_slot && !*ref_slot) string_map_remove(&refs_by_id, ref->id); } static enum status_code add_to_refs(const char *id, size_t idlen, char *name, size_t namelen, struct ref_opt *opt) { struct ref *ref = NULL; enum reference_type type = REFERENCE_BRANCH; void **ref_slot = NULL; if (!prefixcmp(name, "refs/tags/")) { type = REFERENCE_TAG; if (!suffixcmp(name, namelen, "^{}")) { namelen -= 3; name[namelen] = 0; } else { type = REFERENCE_LOCAL_TAG; } /* Don't remove the prefix if there is already a branch * with the same name. */ ref = string_map_get(&refs_by_name, name + STRING_SIZE("refs/tags/")); if (ref == NULL || ref_is_tag(ref)) { namelen -= STRING_SIZE("refs/tags/"); name += STRING_SIZE("refs/tags/"); } } else if (!prefixcmp(name, "refs/remotes/")) { type = REFERENCE_REMOTE; namelen -= STRING_SIZE("refs/remotes/"); name += STRING_SIZE("refs/remotes/"); if (!strcmp(opt->remote, name)) type = REFERENCE_TRACKED_REMOTE; } else if (!prefixcmp(name, "refs/replace/")) { type = REFERENCE_REPLACE; id = name + strlen("refs/replace/"); idlen = namelen - strlen("refs/replace/"); name = "replaced"; namelen = strlen(name); } else if (!prefixcmp(name, "refs/heads/")) { namelen -= STRING_SIZE("refs/heads/"); name += STRING_SIZE("refs/heads/"); if (strlen(opt->head) == namelen && !strncmp(opt->head, name, namelen)) type = REFERENCE_HEAD; } else if (!strcmp(name, "HEAD")) { /* Handle the case of HEAD not being a symbolic ref, * i.e. during a rebase. */ if (*opt->head) return SUCCESS; type = REFERENCE_HEAD; } /* If we are reloading or it's an annotated tag, replace the * previous SHA1 with the resolved commit id; relies on the fact * git-ls-remote lists the commit id of an annotated tag right * before the commit id it points to. */ if (type == REFERENCE_REPLACE) { ref = string_map_remove(&refs_by_id, id); } else { ref_slot = string_map_put_to(&refs_by_name, name); if (!ref_slot) return ERROR_OUT_OF_MEMORY; ref = *ref_slot; } if (!ref) { ref = calloc(1, sizeof(*ref) + namelen); if (!ref) return ERROR_OUT_OF_MEMORY; strncpy(ref->name, name, namelen); if (ref_slot) *ref_slot = ref; } if (strncmp(ref->id, id, idlen) || ref->type != type) { opt->changed |= WATCH_REFS; if (*ref->id) remove_ref_from_id_map(ref); } ref->valid = true; ref->type = type; string_ncopy_do(ref->id, SIZEOF_REV, id, idlen); if (type == REFERENCE_HEAD) { if (!refs_head || (refs_head != ref && memcmp(refs_head, ref, sizeof(*ref)))) opt->changed |= WATCH_HEAD; refs_head = ref; } if (type == REFERENCE_TAG) refs_tags++; return add_ref_to_id_map(ref); } static enum status_code read_ref(char *id, size_t idlen, char *name, size_t namelen, void *data) { return add_to_refs(id, idlen, name, namelen, data); } static bool invalidate_refs(void *data, void *ref_) { struct ref *ref = ref_; ref->valid = 0; ref->next = NULL; return true; } static bool cleanup_refs(void *data, void *ref_) { struct ref_opt *opt = data; struct ref *ref = ref_; if (!ref->valid) { ref->id[0] = 0; opt->changed |= WATCH_REFS; } return true; } static enum status_code reload_refs(bool force) { const char *ls_remote_argv[SIZEOF_ARG] = { "git", "show-ref", "--head", "--dereference", NULL }; char ls_remote_cmd[SIZEOF_STR]; struct ref_opt opt = { repo.remote, repo.head, WATCH_NONE }; struct repo_info old_repo = repo; enum status_code code; const char *env = getenv("TIG_LS_REMOTE"); if (env && *env) { int argc = 0; string_ncopy(ls_remote_cmd, env, strlen(env)); if (!argv_from_string(ls_remote_argv, &argc, ls_remote_cmd)) return error("Failed to parse TIG_LS_REMOTE: %s", env); } if (!*repo.git_dir) return SUCCESS; if (force || !*repo.head) load_repo_head(); if (strcmp(old_repo.head, repo.head)) opt.changed |= WATCH_HEAD; refs_head = NULL; refs_tags = 0; string_map_clear(&refs_by_id); string_map_foreach(&refs_by_name, invalidate_refs, NULL); code = io_run_load(ls_remote_argv, " \t", read_ref, &opt); if (code != SUCCESS) return code; string_map_foreach(&refs_by_name, cleanup_refs, &opt); if (opt.changed) watch_apply(NULL, opt.changed); return SUCCESS; } enum status_code load_refs(bool force) { static bool loaded = false; if (!force && loaded) return SUCCESS; loaded = true; return reload_refs(force); } enum status_code add_ref(const char *id, char *name, const char *remote_name, const char *head) { struct ref_opt opt = { remote_name, head }; return add_to_refs(id, strlen(id), name, strlen(name), &opt); } void ref_update_env(struct argv_env *env, const struct ref *ref, bool recurse) { bool clear = recurse ? !ref->next : true; if (recurse && ref->next) ref_update_env(env, ref->next, true); if (clear) env->tag[0] = env->remote[0] = env->branch[0] = 0; string_copy_rev(env->commit, ref->id); if (ref_is_tag(ref)) { string_ncopy(env->tag, ref->name, strlen(ref->name)); } else if (ref_is_remote(ref)) { const char *sep = strchr(ref->name, '/'); if (!sep) return; string_ncopy(env->remote, ref->name, sep - ref->name); string_ncopy(env->branch, sep + 1, strlen(sep + 1)); } else if (ref->type == REFERENCE_BRANCH || ref->type == REFERENCE_HEAD) { string_ncopy(env->branch, ref->name, strlen(ref->name)); } } bool refs_contain_tag(void) { return refs_tags > 0; } const struct ref_format * get_ref_format(struct ref_format **ref_formats, const struct ref *ref) { static const struct ref_format default_format = { "", "" }; if (ref_formats) { struct ref_format *format = ref_formats[ref->type]; if (!format && ref_is_tag(ref)) format = ref_formats[REFERENCE_TAG]; if (!format && ref_is_remote(ref)) format = ref_formats[REFERENCE_REMOTE]; if (!format) format = ref_formats[REFERENCE_BRANCH]; if (format) return format; } return &default_format; } static enum status_code parse_ref_format_arg(struct ref_format **ref_formats, const char *arg, const struct enum_map *map) { size_t arglen = strlen(arg); const char *pos; for (pos = arg; *pos && arglen > 0; pos++, arglen--) { enum reference_type type; for (type = 0; type < map->size; type++) { const struct enum_map_entry *entry = &map->entries[type]; struct ref_format *format; if (arglen < entry->namelen || string_enum_compare(pos, entry->name, entry->namelen)) continue; format = malloc(sizeof(*format)); if (!format) return ERROR_OUT_OF_MEMORY; format->start = strndup(arg, pos - arg); format->end = strdup(pos + entry->namelen); if (!format->start || !format->end) { free((void *) format->start); free((void *) format->end); free(format); return ERROR_OUT_OF_MEMORY; } ref_formats[type] = format; return SUCCESS; } } return error("Unknown ref format: %s", arg); } enum status_code parse_ref_formats(struct ref_format ***formats, const char *argv[]) { const struct enum_map *map = reference_type_map; int argc; if (!*formats) { *formats = calloc(reference_type_map->size, sizeof(struct ref_format *)); if (!*formats) return ERROR_OUT_OF_MEMORY; } for (argc = 0; argv[argc]; argc++) { enum status_code code = parse_ref_format_arg(*formats, argv[argc], map); if (code != SUCCESS) return code; } return SUCCESS; } enum status_code format_ref_formats(struct ref_format **formats, char buf[], size_t bufsize) { const struct enum_map *map = reference_type_map; char name[SIZEOF_STR]; enum reference_type type; size_t bufpos = 0; const char *sep = ""; if (!formats) return SUCCESS; for (type = 0; type < map->size; type++) { struct ref_format *format = formats[type]; if (!format) continue; if (!enum_name_copy(name, sizeof(name), map->entries[type].name) || !string_nformat(buf, bufsize, &bufpos, "%s%s%s%s", sep, format->start, name, format->end)) return error("No space left in buffer"); sep = " "; } return SUCCESS; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/refs.c000066400000000000000000000122361332650737300142100ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/io.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/display.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/git.h" #include "tig/main.h" /* * Branch backend */ struct reference { const struct ident *author; /* Author of the last commit. */ struct time time; /* Date of the last activity. */ char title[128]; /* First line of the commit message. */ const struct ref *ref; /* Name and commit ID information. */ }; static const struct ref *refs_all; #define REFS_ALL_NAME "All references" #define refs_is_all(reference) ((reference)->ref == refs_all) static bool refs_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { const struct reference *reference = line->data; column_data->author = reference->author; column_data->date = &reference->time; column_data->id = reference->ref->id; column_data->ref = reference->ref; column_data->commit_title = reference->title; return true; } static enum request refs_request(struct view *view, enum request request, struct line *line) { struct reference *reference = line->data; switch (request) { case REQ_REFRESH: load_refs(true); refresh_view(view); return REQ_NONE; case REQ_ENTER: { const struct ref *ref = reference->ref; const char *all_references_argv[] = { GIT_MAIN_LOG(encoding_arg, commit_order_arg(), "%(mainargs)", "", refs_is_all(reference) ? "--all" : ref->name, "", log_custom_pretty_arg()) }; if (!argv_format(main_view.env, &main_view.argv, all_references_argv, false, false)) report("Failed to format argument"); else open_view(view, &main_view, OPEN_SPLIT | OPEN_PREPARED); return REQ_NONE; } default: return request; } } static bool refs_read(struct view *view, struct buffer *buf, bool force_stop) { struct reference template = {0}; char *author; char *title; size_t i; if (!buf) return true; if (!*buf->data) return false; author = io_memchr(buf, buf->data, 0); title = io_memchr(buf, author, 0); if (author) parse_author_line(author, &template.author, &template.time); for (i = 0; i < view->lines; i++) { struct reference *reference = view->line[i].data; if (strcmp(reference->ref->id, buf->data)) continue; reference->author = template.author; reference->time = template.time; if (title) string_expand(reference->title, sizeof(reference->title), title, strlen(title), 1); view->line[i].dirty = true; view_column_info_update(view, &view->line[i]); } return true; } static bool refs_open_visitor(void *data, const struct ref *ref) { struct view *view = data; struct reference *reference; bool is_all = ref == refs_all; struct line *line; line = add_line_alloc(view, &reference, LINE_DEFAULT, 0, is_all); if (!line) return false; reference->ref = ref; view_column_info_update(view, line); return true; } static enum status_code refs_open(struct view *view, enum open_flags flags) { const char *refs_log[] = { "git", "log", encoding_arg, "--no-color", "--date=raw", opt_mailmap ? "--pretty=format:%H%x00%aN <%aE> %ad%x00%s" : "--pretty=format:%H%x00%an <%ae> %ad%x00%s", "--all", "--simplify-by-decoration", NULL }; enum status_code code; if (!refs_all) { struct ref *ref = calloc(1, sizeof(*refs_all) + strlen(REFS_ALL_NAME)); if (!ref) return ERROR_OUT_OF_MEMORY; strncpy(ref->name, REFS_ALL_NAME, strlen(REFS_ALL_NAME)); refs_all = ref; } code = begin_update(view, NULL, refs_log, OPEN_RELOAD); if (code != SUCCESS) return code; if (!view->lines) view->sort.current = get_view_column(view, VIEW_COLUMN_REF); refs_open_visitor(view, refs_all); foreach_ref(refs_open_visitor, view); resort_view(view, true); watch_register(&view->watch, WATCH_HEAD | WATCH_REFS); return SUCCESS; } static void refs_select(struct view *view, struct line *line) { struct reference *reference = line->data; if (refs_is_all(reference)) { string_copy(view->ref, REFS_ALL_NAME); return; } string_copy_rev(view->ref, reference->ref->id); string_copy_rev(view->env->head, reference->ref->id); string_ncopy(view->env->ref, reference->ref->name, strlen(reference->ref->name)); ref_update_env(view->env, reference->ref, false); } static struct view_ops refs_ops = { "reference", argv_env.head, VIEW_REFRESH | VIEW_SORTABLE, 0, refs_open, refs_read, view_column_draw, refs_request, view_column_grep, refs_select, NULL, view_column_bit(AUTHOR) | view_column_bit(COMMIT_TITLE) | view_column_bit(DATE) | view_column_bit(ID) | view_column_bit(LINE_NUMBER) | view_column_bit(REF), refs_get_column_data, }; DEFINE_VIEW(refs); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/repo.c000066400000000000000000000113351332650737300142150ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/repo.h" #include "tig/io.h" #include "tig/refdb.h" #include "tig/git.h" #define REPO_INFO_GIT_DIR "--git-dir" #define REPO_INFO_WORK_TREE "--is-inside-work-tree" #define REPO_INFO_SHOW_CDUP "--show-cdup" #define REPO_INFO_SHOW_PREFIX "--show-prefix" #define REPO_INFO_SYMBOLIC_HEAD "--symbolic-full-name" #define REPO_INFO_RESOLVED_HEAD "HEAD" struct repo_info_state { const char **argv; }; static enum status_code read_repo_info(char *name, size_t namelen, char *value, size_t valuelen, void *data) { struct repo_info_state *state = data; const char *arg = *state->argv ? *state->argv++ : ""; if (!strcmp(arg, REPO_INFO_GIT_DIR)) { string_ncopy(repo.git_dir, name, namelen); } else if (!strcmp(arg, REPO_INFO_WORK_TREE)) { /* This can be 3 different values depending on the * version of git being used. If git-rev-parse does not * understand --is-inside-work-tree it will simply echo * the option else either "true" or "false" is printed. * Default to true for the unknown case. */ repo.is_inside_work_tree = strcmp(name, "false") ? true : false; } else if (!strcmp(arg, REPO_INFO_SHOW_CDUP)) { string_ncopy(repo.cdup, name, namelen); } else if (!strcmp(arg, REPO_INFO_SHOW_PREFIX)) { /* Some versions of Git does not emit anything for --show-prefix * when the user is in the repository root directory. Try to detect * this special case by looking at the emitted value. If it looks * like a commit ID and there's no cdup path assume that no value * was emitted. */ if (!*repo.cdup && namelen == 40 && iscommit(name)) return read_repo_info(name, namelen, value, valuelen, data); string_ncopy(repo.prefix, name, namelen); } else if (!strcmp(arg, REPO_INFO_RESOLVED_HEAD)) { string_ncopy(repo.head_id, name, namelen); } else if (!strcmp(arg, REPO_INFO_SYMBOLIC_HEAD)) { if (!prefixcmp(name, "refs/heads/")) { const char *head = name + STRING_SIZE("refs/heads/"); string_ncopy(repo.head, head, strlen(head) + 1); add_ref(repo.head_id, name, repo.remote, repo.head); } state->argv++; } return SUCCESS; } static enum status_code reload_repo_info(const char **rev_parse_argv) { struct repo_info_state state = { rev_parse_argv + 2 }; return io_run_load(rev_parse_argv, "=", read_repo_info, &state); } enum status_code load_repo_info(void) { const char *rev_parse_argv[] = { "git", "rev-parse", REPO_INFO_GIT_DIR, REPO_INFO_WORK_TREE, REPO_INFO_SHOW_CDUP, REPO_INFO_SHOW_PREFIX, \ REPO_INFO_RESOLVED_HEAD, REPO_INFO_SYMBOLIC_HEAD, "HEAD", NULL }; memset(&repo, 0, sizeof(repo)); return reload_repo_info(rev_parse_argv); } enum status_code load_repo_head(void) { const char *rev_parse_argv[] = { "git", "rev-parse", REPO_INFO_RESOLVED_HEAD, REPO_INFO_SYMBOLIC_HEAD, "HEAD", NULL }; memset(repo.head, 0, sizeof(repo.head)); memset(repo.head_id, 0, sizeof(repo.head_id)); return reload_repo_info(rev_parse_argv); } struct repo_info repo; /* * Git index utils. */ bool update_index(void) { const char *update_index_argv[] = { "git", "update-index", "-q", "--unmerged", "--refresh", NULL }; return io_run_bg(update_index_argv, repo.cdup); } bool index_diff(struct index_diff *diff, bool untracked, bool count_all) { const char *untracked_arg = !untracked ? "--untracked-files=no" : count_all ? "--untracked-files=all" : "--untracked-files=normal"; const char *status_argv[] = { "git", "status", "--porcelain", "-z", untracked_arg, NULL }; struct io io; struct buffer buf; bool ok = true; memset(diff, 0, sizeof(*diff)); if (!io_run(&io, IO_RD, repo.cdup, NULL, status_argv)) return false; while (io_get(&io, &buf, 0, true) && (ok = buf.size > 3)) { if (buf.data[0] == '?') diff->untracked++; /* Ignore staged but unmerged entries. */ else if (buf.data[0] != ' ' && buf.data[0] != 'U') diff->staged++; if (buf.data[1] != ' ') diff->unstaged++; if (!count_all && diff->staged && diff->unstaged && (!untracked || diff->untracked)) break; /* Skip source filename in rename */ if (buf.data[0] == 'R') { io_get(&io, &buf, 0, true); } } if (io_error(&io)) ok = false; io_done(&io); return ok; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/request.c000066400000000000000000000033051332650737300147360ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/types.h" #include "tig/request.h" static const struct request_info req_info[] = { #define REQ_GROUP(help) { 0, NULL, 0, (help) }, #define REQ_(req, help) { REQ_##req, (#req), STRING_SIZE(#req), (help) } REQ_INFO #undef REQ_GROUP #undef REQ_ }; enum request get_request(const char *name) { int namelen = strlen(name); int i; for (i = 0; i < ARRAY_SIZE(req_info); i++) if (enum_equals(req_info[i], name, namelen)) return req_info[i].request; return REQ_UNKNOWN; } const char * get_request_name(enum request request) { int i; for (i = 0; i < ARRAY_SIZE(req_info); i++) if (req_info[i].request == request) return enum_name(req_info[i].name); return request == REQ_UNKNOWN ? "unknown" : "run request"; } bool foreach_request(bool (*visitor)(void *data, const struct request_info *req_info, const char *group), void *data) { const char *group = NULL; int i; for (i = 0; i < ARRAY_SIZE(req_info); i++) { if (!req_info[i].request) { group = req_info[i].help; continue; } if (!visitor(data, &req_info[i], group)) return false; } return true; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/search.c000066400000000000000000000142041332650737300145130ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/search.h" #include "tig/prompt.h" #include "tig/display.h" #include "tig/draw.h" #include "tig/main.h" #include "tig/graph.h" DEFINE_ALLOCATOR(realloc_unsigned_ints, unsigned int, 32) bool grep_text(struct view *view, const char *text[]) { size_t i; for (i = 0; text[i]; i++) if (*text[i] && !regexec(view->regex, text[i], 0, NULL, 0)) return true; return false; } static bool find_matches(struct view *view) { size_t lineno; /* Note, lineno is unsigned long so will wrap around in which case it * will become bigger than view->lines. */ for (lineno = 0; lineno < view->lines; lineno++) { if (!view->ops->grep(view, &view->line[lineno])) continue; if (!realloc_unsigned_ints(&view->matched_line, view->matched_lines, 1)) return false; view->line[lineno].search_result = true; view->matched_line[view->matched_lines++] = lineno; } /* Clear and show highlighted results. */ redraw_view_from(view, 0); return true; } static enum status_code find_next_match(struct view *view, enum request request); static enum status_code setup_and_find_next(struct view *view, enum request request) { int regex_err; int regex_flags = opt_ignore_case == IGNORE_CASE_YES ? REG_ICASE : 0; if (opt_ignore_case == IGNORE_CASE_SMART_CASE && !utf8_string_contains_uppercase(view->env->search)) regex_flags |= REG_ICASE; if (view->regex) { regfree(view->regex); *view->grep = 0; } else { view->regex = calloc(1, sizeof(*view->regex)); if (!view->regex) return ERROR_OUT_OF_MEMORY; } regex_err = regcomp(view->regex, view->env->search, REG_EXTENDED | regex_flags); if (regex_err != 0) { char buf[SIZEOF_STR] = "unknown error"; regerror(regex_err, view->regex, buf, sizeof(buf)); return error("Search failed: %s", buf); } string_copy(view->grep, view->env->search); reset_search(view); return find_next_match(view, request); } static enum status_code find_next_match_line(struct view *view, int direction, bool wrapped) { /* Note, `i` is unsigned and will wrap around in which case it * will become bigger than view->matched_lines. */ size_t i = direction > 0 ? 0 : view->matched_lines - 1; for (; i < view->matched_lines; i += direction) { size_t lineno = view->matched_line[i]; if (direction > 0) { if (!wrapped && lineno <= view->pos.lineno) continue; if (wrapped && lineno > view->pos.lineno) continue; } else { if (!wrapped && lineno >= view->pos.lineno) continue; if (wrapped && lineno < view->pos.lineno) continue; } select_view_line(view, lineno); return success("Line %zu matches '%s' (%zu of %zu)", lineno + 1, view->grep, i + 1, view->matched_lines); } return -1; } static enum status_code find_next_match(struct view *view, enum request request) { enum status_code code; int direction; if (!*view->grep || strcmp(view->grep, view->env->search)) { if (!*view->env->search) return success("No previous search"); return setup_and_find_next(view, request); } switch (request) { case REQ_SEARCH: case REQ_FIND_NEXT: direction = 1; break; case REQ_SEARCH_BACK: case REQ_FIND_PREV: direction = -1; break; default: return error("Unknown search request"); } if (!view->matched_lines && !find_matches(view)) return ERROR_OUT_OF_MEMORY; code = find_next_match_line(view, direction, false); if (code != SUCCESS && opt_wrap_search) code = find_next_match_line(view, direction, true); return code == SUCCESS ? code : success("No match found for '%s'", view->grep); } void find_next(struct view *view, enum request request) { enum status_code code = find_next_match(view, request); report("%s", get_status_message(code)); } static enum status_code find_next_merge_line(struct view *view, int direction, bool wrapped) { int dist; size_t max; if (wrapped) max = view->lines; else max = direction > 0 ? view->lines - view->pos.lineno : view->pos.lineno; for (dist = direction; abs(dist) < max; dist += direction) { ssize_t lineno = view->pos.lineno + dist; if (lineno < 0) lineno += view->lines; else if (lineno >= view->lines) lineno -= view->lines; struct line *line = &view->line[lineno]; struct commit *commit = line->data; struct graph_canvas *canvas = &commit->graph; struct view_column_data column_data; if (!view->ops->get_column_data(view, line, &column_data)) continue; if (column_data.graph && !column_data.graph->is_merge(canvas)) continue; select_view_line(view, lineno); return SUCCESS; } return success("No merge commit found"); } static enum status_code find_next_merge(struct view *view, enum request request) { switch (request) { case REQ_MOVE_NEXT_MERGE: return find_next_merge_line(view, 1, opt_wrap_search); case REQ_MOVE_PREV_MERGE: return find_next_merge_line(view, -1, opt_wrap_search); default: return error("Invalid request searching for next merge"); } } void find_merge(struct view *view, enum request request) { enum status_code code = find_next_merge(view, request); report("%s", get_status_message(code)); } void reset_search(struct view *view) { free(view->matched_line); view->matched_line = NULL; view->matched_lines = 0; } void search_view(struct view *view, enum request request) { const char *prompt = request == REQ_SEARCH ? "/" : "?"; char *search = read_prompt(prompt); if (search && *search) { enum status_code code; string_ncopy(argv_env.search, search, strlen(search)); code = setup_and_find_next(view, request); report("%s", get_status_message(code)); } else if (search && *argv_env.search) { find_next(view, request); } else { report_clear(); } } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/stage.c000066400000000000000000000355141332650737300143600ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/repo.h" #include "tig/argv.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/display.h" #include "tig/prompt.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/git.h" #include "tig/pager.h" #include "tig/diff.h" #include "tig/status.h" #include "tig/main.h" #include "tig/stage.h" static struct status stage_status; static enum line_type stage_line_type; void open_stage_view(struct view *prev, struct status *status, enum line_type type, enum open_flags flags) { if (type) { stage_line_type = type; if (status) stage_status = *status; else memset(&stage_status, 0, sizeof(stage_status)); } open_view(prev, &stage_view, flags); } struct stage_state { struct diff_state diff; }; static inline bool stage_diff_done(struct line *line, struct line *end) { return line >= end || line->type == LINE_DIFF_CHUNK || line->type == LINE_DIFF_HEADER; } static bool stage_diff_write(struct io *io, struct line *line, struct line *end) { while (line < end) { const char *text = box_text(line); if (!io_write(io, text, strlen(text)) || !io_write(io, "\n", 1)) return false; line++; if (stage_diff_done(line, end)) break; } return true; } static bool stage_diff_single_write(struct io *io, bool staged, struct line *line, struct line *single, struct line *end) { enum line_type write_as_normal = staged ? LINE_DIFF_ADD : LINE_DIFF_DEL; enum line_type ignore = staged ? LINE_DIFF_DEL : LINE_DIFF_ADD; while (line < end) { const char *prefix = ""; const char *data = box_text(line); if (line == single) { /* Write the complete line. */ } else if (line->type == write_as_normal) { prefix = " "; data = data + 1; } else if (line->type == ignore) { data = NULL; } if (data && !io_printf(io, "%s%s\n", prefix, data)) return false; line++; if (stage_diff_done(line, end)) break; } return true; } static bool stage_apply_line(struct io *io, struct line *diff_hdr, struct line *chunk, struct line *single, struct line *end) { struct chunk_header header; bool staged = stage_line_type == LINE_STAT_STAGED; int diff = single->type == LINE_DIFF_DEL ? -1 : 1; if (!parse_chunk_header(&header, box_text(chunk))) return false; if (staged) header.old.lines = header.new.lines - diff; else header.new.lines = header.old.lines + diff; return stage_diff_write(io, diff_hdr, chunk) && io_printf(io, "@@ -%lu,%lu +%lu,%lu @@\n", header.old.position, header.old.lines, header.new.position, header.new.lines) && stage_diff_single_write(io, staged, chunk + 1, single, end); } static bool stage_apply_chunk(struct view *view, struct line *chunk, struct line *single, bool revert) { const char *apply_argv[SIZEOF_ARG] = { "git", "apply", "--whitespace=nowarn", NULL }; struct line *diff_hdr; struct io io; int argc = 3; diff_hdr = find_prev_line_by_type(view, chunk, LINE_DIFF_HEADER); if (!diff_hdr) return false; if (!revert) apply_argv[argc++] = "--cached"; if (revert || stage_line_type == LINE_STAT_STAGED) apply_argv[argc++] = "-R"; apply_argv[argc++] = "-"; apply_argv[argc++] = NULL; if (!io_run(&io, IO_WR, repo.cdup, NULL, apply_argv)) return false; if (single != NULL) { if (!stage_apply_line(&io, diff_hdr, chunk, single, view->line + view->lines)) chunk = NULL; } else { if (!stage_diff_write(&io, diff_hdr, chunk) || !stage_diff_write(&io, chunk, view->line + view->lines)) chunk = NULL; } return io_done(&io) && chunk; } static bool stage_update_files(struct view *view, enum line_type type) { struct line *line; if (view->parent != &status_view) { bool updated = false; for (line = view->line; (line = find_next_line_by_type(view, line, LINE_DIFF_CHUNK)); line++) { if (!stage_apply_chunk(view, line, NULL, false)) { report("Failed to apply chunk"); return false; } updated = true; } return updated; } view = view->parent; line = find_next_line_by_type(view, view->line, type); return line && status_update_files(view, line + 1); } static bool stage_update(struct view *view, struct line *line, bool single) { struct line *chunk = NULL; if (!is_initial_commit() && stage_line_type != LINE_STAT_UNTRACKED) chunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK); if (chunk) { if (!stage_apply_chunk(view, chunk, single ? line : NULL, false)) { report("Failed to apply chunk"); return false; } } else if (!stage_status.status) { if (!stage_update_files(view, stage_line_type)) { report("Failed to update files"); return false; } } else if (!status_update_file(&stage_status, stage_line_type)) { report("Failed to update file"); return false; } return true; } static bool stage_revert(struct view *view, struct line *line) { struct line *chunk = NULL; if (!is_initial_commit() && stage_line_type == LINE_STAT_UNSTAGED) chunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK); if (chunk) { if (!prompt_yesno("Are you sure you want to revert changes?")) return false; if (!stage_apply_chunk(view, chunk, NULL, true)) { report("Failed to revert chunk"); return false; } return true; } else { return status_revert(stage_status.status ? &stage_status : NULL, stage_line_type, false); } } static struct line * stage_insert_chunk(struct view *view, struct chunk_header *header, struct line *from, struct line *to, struct line *last_unchanged_line) { struct box *box; unsigned long from_lineno = last_unchanged_line - view->line; unsigned long to_lineno = to - view->line; unsigned long after_lineno = to_lineno; int i; box = from->data; for (i = 0; i < box->cells; i++) box->cell[i].length = 0; if (!append_line_format(view, from, "@@ -%lu,%lu +%lu,%lu @@", header->old.position, header->old.lines, header->new.position, header->new.lines)) return NULL; if (!to) return from; // Next diff chunk line if (!add_line_text_at(view, after_lineno++, "", LINE_DIFF_CHUNK, 1)) return NULL; while (from_lineno < to_lineno) { struct line *line = &view->line[from_lineno++]; const char *text = box_text(line); if (!add_line_text_at(view, after_lineno++, text, line->type, 1)) return false; } return view->line + after_lineno; } static void stage_split_chunk(struct view *view, struct line *chunk_start) { struct chunk_header header; struct line *last_changed_line = NULL, *last_unchanged_line = NULL, *pos; int chunks = 0; if (!chunk_start || !parse_chunk_header(&header, box_text(chunk_start))) { report("Failed to parse chunk header"); return; } header.old.lines = header.new.lines = 0; for (pos = chunk_start + 1; view_has_line(view, pos); pos++) { const char *chunk_line = box_text(pos); if (*chunk_line == '@' || *chunk_line == '\\') break; if (*chunk_line == ' ') { header.old.lines++; header.new.lines++; if (last_unchanged_line < last_changed_line) last_unchanged_line = pos; continue; } if (last_changed_line && last_changed_line < last_unchanged_line) { unsigned long chunk_start_lineno = pos - view->line; unsigned long diff = pos - last_unchanged_line; pos = stage_insert_chunk(view, &header, chunk_start, pos, last_unchanged_line); header.old.position += header.old.lines - diff; header.new.position += header.new.lines - diff; header.old.lines = header.new.lines = diff; chunk_start = view->line + chunk_start_lineno; last_changed_line = last_unchanged_line = NULL; chunks++; } if (*chunk_line == '-') { header.old.lines++; last_changed_line = pos; } else if (*chunk_line == '+') { header.new.lines++; last_changed_line = pos; } } if (chunks) { stage_insert_chunk(view, &header, chunk_start, NULL, NULL); redraw_view(view); report("Split the chunk in %d", chunks + 1); } else { report("The chunk cannot be split"); } } static bool stage_exists(struct view *view, struct status *status, enum line_type type) { struct view *parent = view->parent; if (parent == &status_view) return status_exists(parent, status, type); if (parent == &main_view) return main_status_exists(parent, type); return false; } static bool stage_chunk_is_wrapped(struct view *view, struct line *line) { struct line *pos = find_prev_line_by_type(view, line, LINE_DIFF_HEADER); if (!opt_wrap_lines || !pos) return false; for (; pos <= line; pos++) if (pos->wrapped) return true; return false; } static enum request stage_request(struct view *view, enum request request, struct line *line) { switch (request) { case REQ_STATUS_UPDATE: if (!stage_update(view, line, false)) return REQ_NONE; break; case REQ_STATUS_REVERT: if (!stage_revert(view, line)) return REQ_NONE; break; case REQ_STAGE_UPDATE_LINE: if (stage_line_type == LINE_STAT_UNTRACKED || stage_status.status == 'A') { report("Staging single lines is not supported for new files"); return REQ_NONE; } if (line->type != LINE_DIFF_DEL && line->type != LINE_DIFF_ADD) { report("Please select a change to stage"); return REQ_NONE; } if (stage_chunk_is_wrapped(view, line)) { report("Staging is not supported for wrapped lines"); return REQ_NONE; } if (!stage_update(view, line, true)) return REQ_NONE; break; case REQ_STAGE_SPLIT_CHUNK: if (stage_line_type == LINE_STAT_UNTRACKED || !(line = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK))) { report("No chunks to split in sight"); return REQ_NONE; } stage_split_chunk(view, line); return REQ_NONE; case REQ_EDIT: if (!stage_status.new.name[0]) return diff_common_edit(view, request, line); if (stage_status.status == 'D') { report("File has been deleted."); return REQ_NONE; } if (stage_line_type == LINE_STAT_UNTRACKED) { open_editor(stage_status.new.name, (line - view->line) + 1); } else { open_editor(stage_status.new.name, diff_get_lineno(view, line)); } break; case REQ_REFRESH: /* Reload everything(including current branch information) ... */ load_refs(true); break; case REQ_VIEW_BLAME: if (stage_line_type == LINE_STAT_UNTRACKED) { report("Nothing to blame here"); return REQ_NONE; } if (stage_status.new.name[0]) { string_copy(view->env->file, stage_status.new.name); } else { const char *file = diff_get_pathname(view, line); if (file) string_ncopy(view->env->file, file, strlen(file)); } view->env->ref[0] = 0; view->env->goto_lineno = diff_get_lineno(view, line); if (view->env->goto_lineno > 0) view->env->goto_lineno--; return request; case REQ_ENTER: return diff_common_enter(view, request, line); default: return request; } /* Check whether the staged entry still exists, and close the * stage view if it doesn't. */ if (view->parent && !stage_exists(view, &stage_status, stage_line_type)) return REQ_VIEW_CLOSE; refresh_view(view); return REQ_NONE; } static void stage_select(struct view *view, struct line *line) { const char *changes_msg = stage_line_type == LINE_STAT_STAGED ? "Staged changes" : stage_line_type == LINE_STAT_UNSTAGED ? "Unstaged changes" : NULL; diff_common_select(view, line, changes_msg); } static enum status_code stage_open(struct view *view, enum open_flags flags) { const char *no_head_diff_argv[] = { GIT_DIFF_STAGED_INITIAL(encoding_arg, diff_context_arg(), ignore_space_arg(), stage_status.new.name) }; const char *index_show_argv[] = { GIT_DIFF_STAGED(encoding_arg, diff_context_arg(), ignore_space_arg(), stage_status.old.name, stage_status.new.name) }; const char *files_show_argv[] = { GIT_DIFF_UNSTAGED(encoding_arg, diff_context_arg(), ignore_space_arg(), stage_status.old.name, stage_status.new.name) }; /* Diffs for unmerged entries are empty when passing the new * path, so leave out the new path. */ const char *files_unmerged_argv[] = { "git", "diff-files", encoding_arg, "--root", "--patch-with-stat", DIFF_ARGS, diff_context_arg(), ignore_space_arg(), "--", stage_status.old.name, NULL }; static const char *file_argv[] = { repo.cdup, stage_status.new.name, NULL }; const char **argv = NULL; struct stage_state *state = view->private; enum status_code code; if (!stage_line_type) return error("No stage content, press %s to open the status view and choose file", get_view_key(view, REQ_VIEW_STATUS)); view->encoding = NULL; switch (stage_line_type) { case LINE_STAT_STAGED: watch_register(&view->watch, WATCH_INDEX_STAGED); if (is_initial_commit()) { argv = no_head_diff_argv; } else { argv = index_show_argv; } break; case LINE_STAT_UNSTAGED: watch_register(&view->watch, WATCH_INDEX_UNSTAGED); if (stage_status.status != 'U') argv = files_show_argv; else argv = files_unmerged_argv; break; case LINE_STAT_UNTRACKED: argv = file_argv; view->encoding = get_path_encoding(stage_status.old.name, default_encoding); break; default: die("line type %d not handled in switch", stage_line_type); } if (!status_stage_info(view->ref, stage_line_type, &stage_status)) return error("Failed to open staged view"); if (stage_line_type != LINE_STAT_UNTRACKED) diff_save_line(view, &state->diff, flags); view->vid[0] = 0; code = begin_update(view, repo.cdup, argv, flags); if (code == SUCCESS && stage_line_type != LINE_STAT_UNTRACKED) { struct stage_state *state = view->private; return diff_init_highlight(view, &state->diff); } return code; } static bool stage_read(struct view *view, struct buffer *buf, bool force_stop) { struct stage_state *state = view->private; if (stage_line_type == LINE_STAT_UNTRACKED) return pager_common_read(view, buf ? buf->data : NULL, LINE_DEFAULT, NULL); if (!buf) { if (!diff_done_highlight(&state->diff)) { report("Failed run the diff-highlight program: %s", opt_diff_highlight); return true; } } if (!buf && !view->lines && view->parent) { maximize_view(view->parent, true); return true; } if (!buf) diff_restore_line(view, &state->diff); if (buf && diff_common_read(view, buf->data, &state->diff)) return true; return pager_read(view, buf, force_stop); } static struct view_ops stage_ops = { "line", argv_env.status, VIEW_DIFF_LIKE | VIEW_REFRESH | VIEW_FLEX_WIDTH, sizeof(struct stage_state), stage_open, stage_read, view_column_draw, stage_request, view_column_grep, stage_select, NULL, view_column_bit(LINE_NUMBER) | view_column_bit(TEXT), pager_get_column_data, }; DEFINE_VIEW(stage); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/stash.c000066400000000000000000000051621332650737300143730ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/display.h" #include "tig/draw.h" #include "tig/main.h" #include "tig/diff.h" static enum status_code stash_open(struct view *view, enum open_flags flags) { static const char *stash_argv[] = { "git", "stash", "list", encoding_arg, "--no-color", "--pretty=raw", NULL }; struct main_state *state = view->private; state->with_graph = false; watch_register(&view->watch, WATCH_STASH); return begin_update(view, NULL, stash_argv, flags | OPEN_RELOAD); } static void stash_select(struct view *view, struct line *line) { main_select(view, line); string_format(view->env->stash, "stash@{%d}", line->lineno - 1); string_copy(view->ref, view->env->stash); } enum request stash_request(struct view *view, enum request request, struct line *line) { enum open_flags flags = (view_is_displayed(view) && request != REQ_VIEW_DIFF) ? OPEN_SPLIT : OPEN_DEFAULT; struct view *diff = &diff_view; switch (request) { case REQ_VIEW_DIFF: case REQ_ENTER: if (view_is_displayed(view) && display[0] != view) maximize_view(view, true); if (!view_is_displayed(diff) || strcmp(view->env->stash, diff->ref)) { const char *diff_argv[] = { "git", "stash", "show", encoding_arg, "--pretty=fuller", "--root", "--patch-with-stat", show_notes_arg(), diff_context_arg(), ignore_space_arg(), DIFF_ARGS, "--no-color", "%(stash)", NULL }; if (!argv_format(diff_view.env, &diff_view.argv, diff_argv, false, false)) report("Failed to format argument"); else open_view(view, &diff_view, flags | OPEN_PREPARED); } return REQ_NONE; default: return main_request(view, request, line); } } static struct view_ops stash_ops = { "stash", "", VIEW_SEND_CHILD_ENTER | VIEW_REFRESH, sizeof(struct main_state), stash_open, main_read, view_column_draw, stash_request, view_column_grep, stash_select, main_done, view_column_bit(AUTHOR) | view_column_bit(COMMIT_TITLE) | view_column_bit(DATE) | view_column_bit(ID) | view_column_bit(LINE_NUMBER), main_get_column_data, }; DEFINE_VIEW(stash); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/status.c000066400000000000000000000502501332650737300145720ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/io.h" #include "tig/refdb.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/parse.h" #include "tig/display.h" #include "tig/prompt.h" #include "tig/view.h" #include "tig/search.h" #include "tig/draw.h" #include "tig/git.h" #include "tig/watch.h" #include "tig/status.h" #include "tig/stage.h" /* * Status backend */ static char status_onbranch[SIZEOF_STR]; /* This should work even for the "On branch" line. */ static inline bool status_has_none(struct view *view, struct line *line) { return view_has_line(view, line) && !line[1].data; } /* Get fields from the diff line: * :100644 100644 06a5d6ae9eca55be2e0e585a152e6b1336f2b20e 0000000000000000000000000000000000000000 M */ static inline bool status_get_diff(struct status *file, const char *buf, size_t bufsize) { const char *old_mode = buf + 1; const char *new_mode = buf + 8; const char *old_rev = buf + 15; const char *new_rev = buf + 56; const char *status = buf + 97; if (bufsize < 98 || old_mode[-1] != ':' || new_mode[-1] != ' ' || old_rev[-1] != ' ' || new_rev[-1] != ' ' || status[-1] != ' ') return false; file->status = *status; string_copy_rev(file->old.rev, old_rev); string_copy_rev(file->new.rev, new_rev); file->old.mode = strtoul(old_mode, NULL, 8); file->new.mode = strtoul(new_mode, NULL, 8); file->old.name[0] = file->new.name[0] = 0; return true; } static bool status_run(struct view *view, const char *argv[], char status, enum line_type type) { struct status *unmerged = NULL; struct buffer buf; struct io io; if (!io_run(&io, IO_RD, repo.cdup, NULL, argv)) return false; add_line_nodata(view, type); while (io_get(&io, &buf, 0, true)) { struct line *line; struct status parsed = {0}; struct status *file = &parsed; /* Parse diff info part. */ if (status) { file->status = status; if (status == 'A') string_copy(file->old.rev, NULL_ID); } else { if (!status_get_diff(&parsed, buf.data, buf.size)) goto error_out; if (!io_get(&io, &buf, 0, true)) break; } /* Grab the old name for rename/copy. */ if (!*file->old.name && (file->status == 'R' || file->status == 'C')) { string_ncopy(file->old.name, buf.data, buf.size); if (!io_get(&io, &buf, 0, true)) break; } /* git-ls-files just delivers a NUL separated list of * file names similar to the second half of the * git-diff-* output. */ string_ncopy(file->new.name, buf.data, buf.size); if (!*file->old.name) string_copy(file->old.name, file->new.name); /* Collapse all modified entries that follow an associated * unmerged entry. */ if (unmerged && !strcmp(unmerged->new.name, file->new.name)) { unmerged->status = 'U'; unmerged = NULL; continue; } line = add_line_alloc(view, &file, type, 0, false); if (!line) goto error_out; *file = parsed; view_column_info_update(view, line); if (file->status == 'U') unmerged = file; } if (io_error(&io)) { error_out: io_done(&io); return false; } if (!view->line[view->lines - 1].data) { add_line_nodata(view, LINE_STAT_NONE); if (type == LINE_STAT_STAGED) watch_apply(&view->watch, WATCH_INDEX_STAGED_NO); else if (type == LINE_STAT_UNSTAGED) watch_apply(&view->watch, WATCH_INDEX_UNSTAGED_NO); } else { if (type == LINE_STAT_STAGED) watch_apply(&view->watch, WATCH_INDEX_STAGED_YES); else if (type == LINE_STAT_UNSTAGED) watch_apply(&view->watch, WATCH_INDEX_UNSTAGED_YES); } io_done(&io); return true; } static const char *status_diff_index_argv[] = { GIT_DIFF_STAGED_FILES("-z") }; static const char *status_diff_files_argv[] = { GIT_DIFF_UNSTAGED_FILES("-z") }; static const char *status_list_other_argv[] = { "git", "ls-files", "-z", "--others", "--exclude-standard", NULL, NULL, NULL }; static const char *status_list_no_head_argv[] = { "git", "ls-files", "-z", "--cached", "--exclude-standard", NULL }; /* Restore the previous line number to stay in the context or select a * line with something that can be updated. */ static void status_restore(struct view *view) { if (!check_position(&view->prev_pos)) return; if (view->prev_pos.lineno >= view->lines) view->prev_pos.lineno = view->lines - 1; while (view->prev_pos.lineno < view->lines && !view->line[view->prev_pos.lineno].data) view->prev_pos.lineno++; while (view->prev_pos.lineno > 0 && !view->line[view->prev_pos.lineno].data) view->prev_pos.lineno--; /* If the above fails, always skip the "On branch" line. */ if (view->prev_pos.lineno < view->lines) view->pos.lineno = view->prev_pos.lineno; else view->pos.lineno = 1; if (view->prev_pos.offset > view->pos.lineno) view->pos.offset = view->pos.lineno; else if (view->prev_pos.offset < view->lines) view->pos.offset = view->prev_pos.offset; clear_position(&view->prev_pos); } static bool status_branch_tracking_info(char *buf, size_t buf_len, const char *head, const char *remote) { if (!string_nformat(buf, buf_len, NULL, "%s...%s", head, remote)) { return false; } const char *tracking_info_argv[] = { "git", "rev-list", "--left-right", buf, NULL }; struct io io; if (!io_run(&io, IO_RD, repo.cdup, NULL, tracking_info_argv)) { return false; } struct buffer result = { 0 }; int ahead = 0; int behind = 0; while (io_get(&io, &result, '\n', true)) { if (result.size > 0 && result.data) { if (result.data[0] == '<') { ahead++; } else if (result.data[0] == '>') { behind++; } } } bool io_failed = io_error(&io); io_done(&io); if (io_failed) { return false; } if (ahead == 0 && behind == 0) { return string_nformat(buf, buf_len, NULL, "Your branch is up-to-date with '%s'.", remote); } else if (ahead > 0 && behind > 0) { return string_nformat(buf, buf_len, NULL, "Your branch and '%s' have diverged, " "and have %d and %d different commits " "each, respectively", remote, ahead, behind); } else if (ahead > 0) { return string_nformat(buf, buf_len, NULL, "Your branch is ahead of '%s' by " "%d commit%s.", remote, ahead, ahead > 1 ? "s" : ""); } else if (behind > 0) { return string_nformat(buf, buf_len, NULL, "Your branch is behind '%s' by " "%d commit%s.", remote, behind, behind > 1 ? "s" : ""); } return false; } static void status_update_onbranch(void) { static const char *paths[][3] = { { "rebase-apply/rebasing", "rebase-apply/head-name", "Rebasing" }, { "rebase-apply/applying", "rebase-apply/head-name", "Applying mailbox to" }, { "rebase-apply/", "rebase-apply/head-name", "Rebasing mailbox onto" }, { "rebase-merge/interactive", "rebase-merge/head-name", "Interactive rebase" }, { "rebase-merge/", "rebase-merge/head-name", "Rebase merge" }, { "MERGE_HEAD", NULL, "Merging" }, { "BISECT_LOG", NULL, "Bisecting" }, { "HEAD", NULL, "On branch" }, }; char buf[SIZEOF_STR]; struct stat stat; int i; if (is_initial_commit()) { string_copy(status_onbranch, "Initial commit"); return; } for (i = 0; i < ARRAY_SIZE(paths); i++) { const char *prefix = paths[i][2]; const char *head = repo.head; const char *tracking_info = ""; if (!string_format(buf, "%s/%s", repo.git_dir, paths[i][0]) || lstat(buf, &stat) < 0) continue; if (paths[i][1]) { struct io io; if (io_open(&io, "%s/%s", repo.git_dir, paths[i][1]) && io_read_buf(&io, buf, sizeof(buf), false)) { head = buf; if (!prefixcmp(head, "refs/heads/")) head += STRING_SIZE("refs/heads/"); } } if (!*head && !strcmp(paths[i][0], "HEAD") && *repo.head_id) { const struct ref *ref = get_canonical_ref(repo.head_id); prefix = "HEAD detached at"; head = repo.head_id; if (ref && strcmp(ref->name, "HEAD")) head = ref->name; } else if (!paths[i][1] && *repo.remote) { if (status_branch_tracking_info(buf, sizeof(buf), head, repo.remote)) { tracking_info = buf; } } const char *fmt = *tracking_info == '\0' ? "%s %s" : "%s %s. %s"; if (!string_format(status_onbranch, fmt, prefix, head, tracking_info)) string_copy(status_onbranch, repo.head); return; } string_copy(status_onbranch, "Not currently on any branch"); } static bool status_read_untracked(struct view *view) { if (!opt_status_show_untracked_files) return add_line_nodata(view, LINE_STAT_UNTRACKED) && add_line_nodata(view, LINE_STAT_NONE); status_list_other_argv[ARRAY_SIZE(status_list_other_argv) - 3] = opt_status_show_untracked_dirs ? NULL : "--directory"; status_list_other_argv[ARRAY_SIZE(status_list_other_argv) - 2] = opt_status_show_untracked_dirs ? NULL : "--no-empty-directory"; return status_run(view, status_list_other_argv, '?', LINE_STAT_UNTRACKED); } /* First parse staged info using git-diff-index(1), then parse unstaged * info using git-diff-files(1), and finally untracked files using * git-ls-files(1). */ static enum status_code status_open(struct view *view, enum open_flags flags) { const char **staged_argv = is_initial_commit() ? status_list_no_head_argv : status_diff_index_argv; char staged_status = staged_argv == status_list_no_head_argv ? 'A' : 0; if (repo.is_inside_work_tree == false) return error("The status view requires a working tree"); reset_view(view); /* FIXME: Watch untracked files and on-branch info. */ watch_register(&view->watch, WATCH_INDEX); add_line_nodata(view, LINE_HEADER); status_update_onbranch(); update_index(); if (!status_run(view, staged_argv, staged_status, LINE_STAT_STAGED) || !status_run(view, status_diff_files_argv, 0, LINE_STAT_UNSTAGED) || !status_read_untracked(view)) return error("Failed to load status data"); /* Restore the exact position or use the specialized restore * mode? */ status_restore(view); return SUCCESS; } static bool status_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { struct status *status = line->data; if (!status) { static struct view_column group_column; const char *text; enum line_type type; column_data->section = &group_column; column_data->section->type = VIEW_COLUMN_SECTION; switch (line->type) { case LINE_STAT_STAGED: type = LINE_SECTION; text = "Changes to be committed:"; break; case LINE_STAT_UNSTAGED: type = LINE_SECTION; text = "Changes not staged for commit:"; break; case LINE_STAT_UNTRACKED: type = LINE_SECTION; text = "Untracked files:"; break; case LINE_STAT_NONE: type = LINE_DEFAULT; text = " (no files)"; if (!opt_status_show_untracked_files && view->line < line && line[-1].type == LINE_STAT_UNTRACKED) text = " (not shown)"; break; case LINE_HEADER: type = LINE_HEADER; text = status_onbranch; break; default: return false; } column_data->section->opt.section.text = text; column_data->section->opt.section.type = type; } else { column_data->status = &status->status; column_data->file_name = status->new.name; } return true; } static enum request status_enter(struct view *view, struct line *line) { struct status *status = line->data; enum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT; if (line->type == LINE_STAT_NONE || (!status && line[1].type == LINE_STAT_NONE)) { report("No file to diff"); return REQ_NONE; } switch (line->type) { case LINE_STAT_STAGED: case LINE_STAT_UNSTAGED: break; case LINE_STAT_UNTRACKED: if (!status) { report("No file to show"); return REQ_NONE; } if (!suffixcmp(status->new.name, -1, "/")) { report("Cannot display a directory"); return REQ_NONE; } break; default: report("Nothing to enter"); return REQ_NONE; } open_stage_view(view, status, line->type, flags); return REQ_NONE; } bool status_exists(struct view *view, struct status *status, enum line_type type) { unsigned long lineno; refresh_view(view); for (lineno = 0; lineno < view->lines; lineno++) { struct line *line = &view->line[lineno]; struct status *pos = line->data; if (line->type != type) continue; if ((!pos && (!status || !status->status) && line[1].data) || (pos && status && !strcmp(status->new.name, pos->new.name))) { select_view_line(view, lineno); status_restore(view); return true; } } return false; } static bool status_update_prepare(struct io *io, enum line_type type) { const char *staged_argv[] = { "git", "update-index", "-z", "--index-info", NULL }; const char *others_argv[] = { "git", "update-index", "-z", "--add", "--remove", "--stdin", NULL }; switch (type) { case LINE_STAT_STAGED: return io_run(io, IO_WR, repo.cdup, NULL, staged_argv); case LINE_STAT_UNSTAGED: case LINE_STAT_UNTRACKED: return io_run(io, IO_WR, repo.cdup, NULL, others_argv); default: die("line type %d not handled in switch", type); return false; } } static bool status_update_write(struct io *io, struct status *status, enum line_type type) { switch (type) { case LINE_STAT_STAGED: return io_printf(io, "%06o %s\t%s%c", status->old.mode, status->old.rev, status->old.name, 0); case LINE_STAT_UNSTAGED: case LINE_STAT_UNTRACKED: return io_printf(io, "%s%c", status->new.name, 0); default: die("line type %d not handled in switch", type); return false; } } bool status_update_file(struct status *status, enum line_type type) { const char *name = status->new.name; struct io io; bool result; if (type == LINE_STAT_UNTRACKED && !suffixcmp(name, strlen(name), "/")) { const char *add_argv[] = { "git", "add", "--", name, NULL }; return io_run_bg(add_argv, repo.cdup); } if (!status_update_prepare(&io, type)) return false; result = status_update_write(&io, status, type); return io_done(&io) && result; } bool status_update_files(struct view *view, struct line *line) { char buf[sizeof(view->ref)]; struct io io; bool result = true; struct line *pos; int files = 0; int file, done; int cursor_y = -1, cursor_x = -1; if (!status_update_prepare(&io, line->type)) return false; for (pos = line; view_has_line(view, pos) && pos->data; pos++) files++; string_copy(buf, view->ref); get_cursor_pos(cursor_y, cursor_x); for (file = 0, done = 5; result && file < files; line++, file++) { int almost_done = file * 100 / files; if (almost_done > done && view_is_displayed(view)) { done = almost_done; string_format(view->ref, "updating file %u of %u (%d%% done)", file, files, done); update_view_title(view); set_cursor_pos(cursor_y, cursor_x); doupdate(); } result = status_update_write(&io, line->data, line->type); } string_copy(view->ref, buf); return io_done(&io) && result; } static bool status_update(struct view *view) { struct line *line = &view->line[view->pos.lineno]; assert(view->lines); if (!line->data) { if (status_has_none(view, line)) { report("Nothing to update"); return false; } if (!status_update_files(view, line + 1)) { report("Failed to update file status"); return false; } } else if (!status_update_file(line->data, line->type)) { report("Failed to update file status"); return false; } return true; } bool status_revert(struct status *status, enum line_type type, bool has_none) { if (!status || type != LINE_STAT_UNSTAGED) { if (type == LINE_STAT_STAGED) { report("Cannot revert changes to staged files"); } else if (type == LINE_STAT_UNTRACKED) { report("Cannot revert changes to untracked files"); } else if (has_none) { report("Nothing to revert"); } else { report("Cannot revert changes to multiple files"); } } else if (prompt_yesno("Are you sure you want to revert changes?")) { char mode[10] = "100644"; const char *reset_argv[] = { "git", "update-index", "--cacheinfo", mode, status->old.rev, status->old.name, NULL }; const char *checkout_argv[] = { "git", "checkout", "--", status->old.name, NULL }; if (status->status == 'U') { string_format(mode, "%5o", status->old.mode); if (status->old.mode == 0 && status->new.mode == 0) { reset_argv[2] = "--force-remove"; reset_argv[3] = status->old.name; reset_argv[4] = NULL; } if (!io_run_fg(reset_argv, repo.cdup)) return false; if (status->old.mode == 0 && status->new.mode == 0) return true; } return io_run_fg(checkout_argv, repo.cdup); } return false; } static void open_mergetool(const char *file) { const char *mergetool_argv[] = { "git", "mergetool", file, NULL }; open_external_viewer(mergetool_argv, repo.cdup, false, true, false, true, true, ""); } static enum request status_request(struct view *view, enum request request, struct line *line) { struct status *status = line->data; switch (request) { case REQ_STATUS_UPDATE: if (!status_update(view)) return REQ_NONE; break; case REQ_STATUS_REVERT: if (!status_revert(status, line->type, status_has_none(view, line))) return REQ_NONE; break; case REQ_STATUS_MERGE: if (!status || status->status != 'U') { report("Merging only possible for files with unmerged status ('U')."); return REQ_NONE; } open_mergetool(status->new.name); break; case REQ_EDIT: if (!status) return request; if (status->status == 'D') { report("File has been deleted."); return REQ_NONE; } open_editor(status->new.name, 0); break; case REQ_VIEW_BLAME: if (line->type == LINE_STAT_UNTRACKED || !status) { report("Nothing to blame here"); return REQ_NONE; } if (status) view->env->ref[0] = 0; return request; case REQ_ENTER: /* After returning the status view has been split to * show the stage view. No further reloading is * necessary. */ return status_enter(view, line); case REQ_REFRESH: /* Load the current branch information and then the view. */ load_repo_head(); break; default: return request; } refresh_view(view); return REQ_NONE; } bool status_stage_info_(char *buf, size_t bufsize, enum line_type type, struct status *status) { const char *file = status ? status->new.name : ""; const char *info; switch (type) { case LINE_STAT_STAGED: if (status && status->status) info = "Staged changes to %s"; else info = "Staged changes"; break; case LINE_STAT_UNSTAGED: if (status && status->status) info = "Unstaged changes to %s"; else info = "Unstaged changes"; break; case LINE_STAT_UNTRACKED: info = "Untracked file %s"; break; case LINE_HEADER: default: info = ""; } return string_nformat(buf, bufsize, NULL, info, file); } static void status_select(struct view *view, struct line *line) { struct status *status = line->data; char file[SIZEOF_STR] = "all files"; const char *text; const char *key; if (status && !string_format(file, "'%s'", status->new.name)) return; if (!status && line[1].type == LINE_STAT_NONE) line++; switch (line->type) { case LINE_STAT_STAGED: text = "Press %s to unstage %s for commit"; break; case LINE_STAT_UNSTAGED: text = "Press %s to stage %s for commit"; break; case LINE_STAT_UNTRACKED: text = "Press %s to stage %s for addition"; break; default: text = "Nothing to update"; } if (status && status->status == 'U') { text = "Press %s to resolve conflict in %s"; key = get_view_key(view, REQ_STATUS_MERGE); } else { key = get_view_key(view, REQ_STATUS_UPDATE); } string_format(view->ref, text, key, file); status_stage_info(view->env->status, line->type, status); if (status) string_copy(view->env->file, status->new.name); } static struct view_ops status_ops = { "file", "", VIEW_CUSTOM_STATUS | VIEW_SEND_CHILD_ENTER | VIEW_STATUS_LIKE | VIEW_REFRESH, 0, status_open, NULL, view_column_draw, status_request, view_column_grep, status_select, NULL, view_column_bit(FILE_NAME) | view_column_bit(LINE_NUMBER) | view_column_bit(STATUS), status_get_column_data, }; DEFINE_VIEW(status); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/string.c000066400000000000000000000216001332650737300145520ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/string.h" #include "compat/utf8proc.h" /* * Strings. */ bool string_isnumber(const char *str) { int pos; for (pos = 0; str[pos]; pos++) { if (!isdigit(str[pos])) return false; } return pos > 0; } bool iscommit(const char *str) { int pos; for (pos = 0; str[pos]; pos++) { if (!isxdigit(str[pos])) return false; } return 7 <= pos && pos < SIZEOF_REV; } int suffixcmp(const char *str, int slen, const char *suffix) { size_t len = slen >= 0 ? slen : strlen(str); size_t suffixlen = strlen(suffix); return suffixlen < len ? strcmp(str + len - suffixlen, suffix) : -1; } void string_ncopy_do(char *dst, size_t dstlen, const char *src, size_t srclen) { if (srclen > dstlen - 1) srclen = dstlen - 1; strncpy(dst, src, srclen); dst[srclen] = 0; } void string_copy_rev(char *dst, const char *src) { size_t srclen; if (!*src) return; for (srclen = 0; srclen < SIZEOF_REV; srclen++) if (!src[srclen] || isspace(src[srclen])) break; string_ncopy_do(dst, SIZEOF_REV, src, srclen); } void string_copy_rev_from_commit_line(char *dst, const char *src) { string_copy_rev(dst, src + STRING_SIZE("commit ")); } size_t string_expanded_length(const char *src, size_t srclen, size_t tabsize, size_t max_size) { size_t size, pos; for (size = pos = 0; pos < srclen && size < max_size; pos++) { if (src[pos] == '\t') { size_t expanded = tabsize - (size % tabsize); size += expanded; } else { size++; } } return pos; } size_t string_expand(char *dst, size_t dstlen, const char *src, int srclen, int tabsize) { size_t size, pos; for (size = pos = 0; size < dstlen - 1 && (srclen == -1 || pos < srclen) && src[pos]; pos++) { const char c = src[pos]; if (c == '\t') { size_t expanded = tabsize - (size % tabsize); if (expanded + size >= dstlen - 1) expanded = dstlen - size - 1; memcpy(dst + size, " ", expanded); size += expanded; } else if (isspace(c) || iscntrl(c)) { dst[size++] = ' '; } else { dst[size++] = src[pos]; } } dst[size] = 0; return pos; } char * string_trim_end(char *name) { int namelen = strlen(name) - 1; while (namelen > 0 && isspace(name[namelen])) name[namelen--] = 0; return name; } char * string_trim(char *name) { while (isspace(*name)) name++; return string_trim_end(name); } bool PRINTF_LIKE(4, 5) string_nformat(char *buf, size_t bufsize, size_t *bufpos, const char *fmt, ...) { size_t pos = bufpos ? *bufpos : 0; int retval; FORMAT_BUFFER(buf + pos, bufsize - pos, fmt, retval, false); if (bufpos && retval > 0) *bufpos = pos + retval; return pos >= bufsize ? false : true; } int strcmp_null(const char *s1, const char *s2) { if (!s1 || !s2) { return (!!s1) - (!!s2); } return strcmp(s1, s2); } int strcmp_numeric(const char *s1, const char *s2) { int number = 0; int num1, num2; for (; *s1 && *s2 && *s1 == *s2; s1++, s2++) { int c = *s1; if (isdigit(c)) { number = 10 * number + (c - '0'); } else { number = 0; } } num1 = number * 10 + atoi(s1); num2 = number * 10 + atoi(s2); if (num1 != num2) return num2 - num1; if (!!*s1 != !!*s2) return !!*s2 - !!*s1; return *s1 - *s2; } /* * Unicode / UTF-8 handling * * NOTE: Much of the following code for dealing with Unicode is derived from * ELinks' UTF-8 code developed by Scrool . Origin file is * src/intl/charset.c from the UTF-8 branch commit elinks-0.11.0-g31f2c28. * * unicode_width() is driven by xterm's mk_wcwidth(), which is the work of * Markus Kuhn and Thomas Dickey. */ int unicode_width(unsigned long c, int tab_size) { if (c == '\0') /* * xterm mk_wcwidth() returns 0 for NUL, which causes two tig * tests to fail, which seems like a tig bug. Return 1 here * as a workaround. */ return 1; if (c == '\t') return tab_size; /* Guaranteed to return 0 for unmapped codepints. */ return utf8proc_charwidth((utf8proc_int32_t) c); } /* Number of bytes used for encoding a UTF-8 character indexed by first byte. * Illegal bytes are set one. */ static const unsigned char utf8_bytes[256] = { 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4, 5,5,5,5,6,6,1,1, }; unsigned char utf8_char_length(const char *string) { int c = *(unsigned char *) string; return utf8_bytes[c]; } /* Decode UTF-8 multi-byte representation into a Unicode character. */ unsigned long utf8_to_unicode(const char *string, size_t length) { unsigned long unicode; switch (length) { case 1: unicode = string[0]; break; case 2: unicode = (string[0] & 0x1f) << 6; unicode += (string[1] & 0x3f); break; case 3: unicode = (string[0] & 0x0f) << 12; unicode += ((string[1] & 0x3f) << 6); unicode += (string[2] & 0x3f); break; case 4: unicode = (string[0] & 0x0f) << 18; unicode += ((string[1] & 0x3f) << 12); unicode += ((string[2] & 0x3f) << 6); unicode += (string[3] & 0x3f); break; case 5: unicode = (string[0] & 0x0f) << 24; unicode += ((string[1] & 0x3f) << 18); unicode += ((string[2] & 0x3f) << 12); unicode += ((string[3] & 0x3f) << 6); unicode += (string[4] & 0x3f); break; case 6: unicode = (string[0] & 0x01) << 30; unicode += ((string[1] & 0x3f) << 24); unicode += ((string[2] & 0x3f) << 18); unicode += ((string[3] & 0x3f) << 12); unicode += ((string[4] & 0x3f) << 6); unicode += (string[5] & 0x3f); break; default: return 0; } /* Invalid characters could return the special 0xfffd value but NUL * should be just as good. */ return unicode > 0x10FFFF ? 0 : unicode; } /* Calculates how much of string can be shown within the given maximum width * and sets trimmed parameter to non-zero value if all of string could not be * shown. If the reserve flag is true, it will reserve at least one * trailing character, which can be useful when drawing a delimiter. * * Returns the number of bytes to output from string to satisfy max_width. */ size_t utf8_length(const char **start, int max_chars, size_t skip, int *width, size_t max_width, int *trimmed, bool reserve, int tab_size) { const char *string = *start; const char *end = max_chars < 0 ? strchr(string, '\0') : string + max_chars; unsigned char last_bytes = 0; size_t last_ucwidth = 0; *width = 0; *trimmed = 0; while (string < end) { unsigned char bytes = utf8_char_length(string); size_t ucwidth; unsigned long unicode; if (string + bytes > end) break; /* Change representation to figure out whether * it is a single- or double-width character. */ unicode = utf8_to_unicode(string, bytes); /* FIXME: Graceful handling of invalid Unicode character. */ if (!unicode) break; ucwidth = unicode_width(unicode, tab_size); if (skip > 0) { skip -= ucwidth <= skip ? ucwidth : skip; *start += bytes; } *width += ucwidth; if (max_width > 0 && *width > max_width) { *trimmed = 1; *width -= ucwidth; if (reserve && *width == max_width) { string -= last_bytes; *width -= last_ucwidth; } break; } string += bytes; if (ucwidth) { last_bytes = bytes; last_ucwidth = ucwidth; } else { last_bytes += bytes; } } return string - *start; } int utf8_width_of(const char *text, int max_bytes, int max_width) { int text_width = 0; const char *tmp = text; int trimmed = false; utf8_length(&tmp, max_bytes, 0, &text_width, max_width, &trimmed, false, 1); return text_width; } static bool utf8_string_contains(const char *text, int category) { ssize_t textlen = strlen(text); while (textlen > 0) { int32_t unicode; ssize_t slen = utf8proc_iterate((uint8_t *) text, textlen, &unicode); const utf8proc_property_t *property; if (slen <= 0) break; property = utf8proc_get_property(unicode); if (property->category & category) return true; text += slen; textlen -= slen; } return false; } bool utf8_string_contains_uppercase(const char *search) { return utf8_string_contains(search, UTF8PROC_CATEGORY_LU); } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/tig.c000066400000000000000000000466441332650737300140460ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #define WARN_MISSING_CURSES_CONFIGURATION #include "tig/tig.h" #include "tig/types.h" #include "tig/util.h" #include "tig/parse.h" #include "tig/io.h" #include "tig/argv.h" #include "tig/refdb.h" #include "tig/watch.h" #include "tig/graph.h" #include "tig/git.h" #include "tig/request.h" #include "tig/line.h" #include "tig/keys.h" #include "tig/view.h" #include "tig/search.h" #include "tig/repo.h" #include "tig/options.h" #include "tig/draw.h" #include "tig/display.h" #include "tig/prompt.h" /* Views. */ #include "tig/blame.h" #include "tig/blob.h" #include "tig/diff.h" #include "tig/grep.h" #include "tig/help.h" #include "tig/log.h" #include "tig/main.h" #include "tig/pager.h" #include "tig/refs.h" #include "tig/stage.h" #include "tig/stash.h" #include "tig/status.h" #include "tig/tree.h" #ifdef HAVE_READLINE #include #endif /* HAVE_READLINE */ static bool forward_request_to_child(struct view *child, enum request request) { return displayed_views() == 2 && view_is_displayed(child) && !strcmp(child->vid, child->ops->id); } static enum request view_request(struct view *view, enum request request) { if (!view || !view->lines) return request; if (request == REQ_ENTER && !opt_focus_child && opt_send_child_enter && view_has_flags(view, VIEW_SEND_CHILD_ENTER)) { struct view *child = display[1]; if (forward_request_to_child(child, request)) { view_request(child, request); return REQ_NONE; } } if (request == REQ_REFRESH && !view_can_refresh(view)) { report("This view can not be refreshed"); return REQ_NONE; } return view->ops->request(view, request, &view->line[view->pos.lineno]); } /* * Option management */ #define TOGGLE_MENU_INFO(_) \ _('.', "line numbers", "line-number"), \ _('D', "dates", "date"), \ _('A', "author", "author"), \ _('~', "graphics", "line-graphics"), \ _('g', "revision graph", "commit-title-graph"), \ _('#', "file names", "file-name"), \ _('*', "file sizes", "file-size"), \ _('W', "space changes", "ignore-space"), \ _('l', "commit order", "commit-order"), \ _('F', "reference display", "commit-title-refs"), \ _('C', "local change display", "show-changes"), \ _('X', "commit ID display", "id"), \ _('%', "file filtering", "file-filter"), \ _('$', "commit title overflow display", "commit-title-overflow"), \ _('d', "untracked directory info", "status-show-untracked-dirs"), \ _('|', "view split", "vertical-split"), \ static void toggle_option(struct view *view) { const struct menu_item menu[] = { #define DEFINE_TOGGLE_MENU(key, help, name) { key, help, name } TOGGLE_MENU_INFO(DEFINE_TOGGLE_MENU) { 0 } }; const char *toggle_argv[] = { "toggle", NULL, NULL }; int i = 0; if (!prompt_menu("Toggle option", menu, &i)) return; toggle_argv[1] = menu[i].data; run_prompt_command(view, toggle_argv); } /* * View opening */ static enum request open_run_request(struct view *view, enum request request) { struct run_request *req = get_run_request(request); if (!req) { report("Unknown run request"); return REQ_NONE; } return exec_run_request(view, req); } /* * User request switch noodle */ static bool view_driver(struct view *view, enum request request) { int i; if (request == REQ_NONE) return true; if (request >= REQ_RUN_REQUESTS) { request = open_run_request(view, request); // exit quickly rather than going through view_request and back if (request == REQ_QUIT) return false; } request = view_request(view, request); if (request == REQ_NONE) return true; switch (request) { case REQ_MOVE_UP: case REQ_MOVE_DOWN: case REQ_MOVE_PAGE_UP: case REQ_MOVE_PAGE_DOWN: case REQ_MOVE_HALF_PAGE_UP: case REQ_MOVE_HALF_PAGE_DOWN: case REQ_MOVE_FIRST_LINE: case REQ_MOVE_LAST_LINE: case REQ_MOVE_WHEEL_DOWN: case REQ_MOVE_WHEEL_UP: move_view(view, request); break; case REQ_SCROLL_FIRST_COL: case REQ_SCROLL_LEFT: case REQ_SCROLL_RIGHT: case REQ_SCROLL_LINE_DOWN: case REQ_SCROLL_LINE_UP: case REQ_SCROLL_PAGE_DOWN: case REQ_SCROLL_PAGE_UP: case REQ_SCROLL_WHEEL_DOWN: case REQ_SCROLL_WHEEL_UP: scroll_view(view, request); break; case REQ_VIEW_GREP: open_grep_view(view); break; case REQ_VIEW_MAIN: open_main_view(view, OPEN_DEFAULT); break; case REQ_VIEW_DIFF: if (view && string_rev_is_null(view->env->commit)) open_stage_view(view, NULL, 0, OPEN_DEFAULT); else open_diff_view(view, OPEN_DEFAULT); break; case REQ_VIEW_LOG: open_log_view(view, OPEN_DEFAULT); break; case REQ_VIEW_TREE: open_tree_view(view, OPEN_DEFAULT); break; case REQ_VIEW_HELP: open_help_view(view, OPEN_DEFAULT); break; case REQ_VIEW_REFS: open_refs_view(view, OPEN_DEFAULT); break; case REQ_VIEW_BLAME: open_blame_view(view, OPEN_DEFAULT); break; case REQ_VIEW_BLOB: open_blob_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STATUS: open_status_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STAGE: open_stage_view(view, NULL, 0, OPEN_DEFAULT); break; case REQ_VIEW_PAGER: open_pager_view(view, OPEN_DEFAULT); break; case REQ_VIEW_STASH: open_stash_view(view, OPEN_DEFAULT); break; case REQ_NEXT: case REQ_PREVIOUS: if (view->parent && view == display[1]) { int line; view = view->parent; line = view->pos.lineno; view_request(view, request); move_view(view, request); if (view_is_displayed(view)) update_view_title(view); if (line != view->pos.lineno) view_request(view, REQ_ENTER); } else { move_view(view, request); } break; case REQ_VIEW_NEXT: { int nviews = displayed_views(); int next_view = nviews ? (current_view + 1) % nviews : current_view; if (next_view == current_view) { report("Only one view is displayed"); break; } current_view = next_view; /* Blur out the title of the previous view. */ update_view_title(view); report_clear(); break; } case REQ_REFRESH: report("Refreshing is not supported by the %s view", view->name); break; case REQ_PARENT: report("Moving to parent is not supported by the %s view", view->name); break; case REQ_BACK: report("Going back is not supported by the %s view", view->name); break; case REQ_MAXIMIZE: if (displayed_views() == 2) maximize_view(view, true); break; case REQ_OPTIONS: toggle_option(view); break; case REQ_SEARCH: case REQ_SEARCH_BACK: search_view(view, request); break; case REQ_FIND_NEXT: case REQ_FIND_PREV: find_next(view, request); break; case REQ_MOVE_NEXT_MERGE: case REQ_MOVE_PREV_MERGE: report("Moving between merge commits is not supported by the %s view", view->name); break; case REQ_STOP_LOADING: foreach_view(view, i) { if (view->pipe) report("Stopped loading the %s view", view->name), end_update(view, true); if (view_is_displayed(view)) update_view_title(view); } break; case REQ_SHOW_VERSION: report("tig-%s", TIG_VERSION); return true; case REQ_SCREEN_REDRAW: redraw_display(true); break; case REQ_EDIT: report("Nothing to edit"); break; case REQ_ENTER: report("Nothing to enter"); break; case REQ_VIEW_CLOSE_NO_QUIT: case REQ_VIEW_CLOSE: /* XXX: Mark closed views by letting view->prev point to the * view itself. Parents to closed view should never be * followed. */ if (view->prev && view->prev != view) { maximize_view(view->prev, true); view->prev = view; watch_unregister(&view->watch); view->parent = NULL; break; } if (request == REQ_VIEW_CLOSE_NO_QUIT) { report("Can't close last remaining view"); break; } /* Fall-through */ case REQ_QUIT: return false; default: report("Unknown key, press %s for help", get_view_key(view, REQ_VIEW_HELP)); return true; } return true; } /* * Main */ static const char usage_string[] = "tig " TIG_VERSION " \n" "\n" "Usage: tig [options] [revs] [--] [paths]\n" " or: tig log [options] [revs] [--] [paths]\n" " or: tig show [options] [revs] [--] [paths]\n" " or: tig blame [options] [rev] [--] path\n" " or: tig grep [options] [pattern]\n" " or: tig refs\n" " or: tig stash\n" " or: tig status\n" " or: tig < [git command output]\n" "\n" "Options:\n" " + Select line in the first view\n" " -v, --version Show version and exit\n" " -h, --help Show help message and exit"; void usage(const char *message) { die("%s\n\n%s", message, usage_string); } static enum status_code read_filter_args(char *name, size_t namelen, char *value, size_t valuelen, void *data) { const char ***filter_args = data; return argv_append(filter_args, name) ? SUCCESS : ERROR_OUT_OF_MEMORY; } static void filter_rev_parse(const char ***args, const char *arg1, const char *arg2, const char *argv[]) { const char *rev_parse_argv[SIZEOF_ARG] = { "git", "rev-parse", arg1, arg2 }; const char **all_argv = NULL; if (!argv_append_array(&all_argv, rev_parse_argv) || !argv_append_array(&all_argv, argv) || io_run_load(all_argv, "\n", read_filter_args, args) != SUCCESS) die("Failed to split arguments"); argv_free(all_argv); free(all_argv); } static void filter_options(const char *argv[], bool rev_parse) { const char **flags = NULL; int next, flags_pos; update_options_from_argv(argv); if (!rev_parse) { opt_cmdline_args = argv; return; } /* Add known revision arguments in opt_rev_args and use * git-rev-parse to filter out the remaining options. */ for (next = flags_pos = 0; argv[next]; next++) { const char *arg = argv[next]; if (!strcmp(arg, "--")) while (argv[next]) argv[flags_pos++] = argv[next++]; else if (argv_parse_rev_flag(arg, NULL)) argv_append(&opt_rev_args, arg); else argv[flags_pos++] = arg; } argv[flags_pos] = NULL; filter_rev_parse(&opt_file_args, "--no-revs", "--no-flags", argv); filter_rev_parse(&flags, "--flags", "--no-revs", argv); if (flags) { for (next = flags_pos = 0; flags && flags[next]; next++) { const char *flag = flags[next]; if (argv_parse_rev_flag(flag, NULL)) argv_append(&opt_rev_args, flag); else flags[flags_pos++] = flag; } flags[flags_pos] = NULL; opt_cmdline_args = flags; } filter_rev_parse(&opt_rev_args, "--symbolic", "--revs-only", argv); } static enum request parse_options(int argc, const char *argv[], bool pager_mode) { enum request request; const char *subcommand; bool seen_dashdash = false; bool rev_parse = true; const char **filter_argv = NULL; int i; request = pager_mode ? REQ_VIEW_PAGER : REQ_VIEW_MAIN; if (argc <= 1) return request; subcommand = argv[1]; if (!strcmp(subcommand, "status")) { request = REQ_VIEW_STATUS; } else if (!strcmp(subcommand, "blame")) { request = REQ_VIEW_BLAME; } else if (!strcmp(subcommand, "grep")) { request = REQ_VIEW_GREP; rev_parse = false; } else if (!strcmp(subcommand, "show")) { request = REQ_VIEW_DIFF; } else if (!strcmp(subcommand, "log")) { request = REQ_VIEW_LOG; } else if (!strcmp(subcommand, "stash")) { request = REQ_VIEW_STASH; } else if (!strcmp(subcommand, "refs")) { request = REQ_VIEW_REFS; } else { subcommand = NULL; } for (i = 1 + !!subcommand; i < argc; i++) { const char *opt = argv[i]; // stop parsing our options after -- and let rev-parse handle the rest if (!seen_dashdash) { if (!strcmp(opt, "--")) { seen_dashdash = true; } else if (!strcmp(opt, "-v") || !strcmp(opt, "--version")) { printf("tig version %s\n", TIG_VERSION); #ifdef NCURSES_VERSION printf("%s version %s.%d\n", #ifdef NCURSES_WIDECHAR "ncursesw", #else "ncurses", #endif NCURSES_VERSION, NCURSES_VERSION_PATCH); #endif #ifdef HAVE_READLINE printf("readline version %s\n", rl_library_version); #endif exit(EXIT_SUCCESS); } else if (!strcmp(opt, "-h") || !strcmp(opt, "--help")) { printf("%s\n", usage_string); exit(EXIT_SUCCESS); } else if (strlen(opt) >= 2 && *opt == '+' && string_isnumber(opt + 1)) { int lineno = atoi(opt + 1); argv_env.goto_lineno = lineno > 0 ? lineno - 1 : 0; continue; } } if (!argv_append(&filter_argv, opt)) die("command too long"); } if (filter_argv) filter_options(filter_argv, rev_parse); return request; } static enum request open_pager_mode(enum request request) { if (request == REQ_VIEW_PAGER) { /* Detect if the user requested the main view. */ if (argv_contains(opt_rev_args, "--stdin")) { open_main_view(NULL, OPEN_FORWARD_STDIN); } else if (argv_contains(opt_cmdline_args, "--pretty=raw")) { open_main_view(NULL, OPEN_STDIN); } else { open_pager_view(NULL, OPEN_STDIN); } } else if (request == REQ_VIEW_DIFF) { if (argv_contains(opt_rev_args, "--stdin")) open_diff_view(NULL, OPEN_FORWARD_STDIN); else open_diff_view(NULL, OPEN_STDIN); } else { close(STDIN_FILENO); report("Ignoring stdin."); return request; } return REQ_NONE; } #ifdef NCURSES_MOUSE_VERSION static struct view * find_clicked_view(MEVENT *event) { struct view *view; int i; foreach_displayed_view (view, i) { int beg_y = 0, beg_x = 0; getbegyx(view->win, beg_y, beg_x); if (beg_y <= event->y && event->y < beg_y + view->height && beg_x <= event->x && event->x < beg_x + view->width) { if (i != current_view) { current_view = i; } return view; } } return NULL; } static enum request handle_mouse_event(void) { MEVENT event; struct view *view; if (getmouse(&event) != OK) return REQ_NONE; view = find_clicked_view(&event); if (!view) return REQ_NONE; #ifdef BUTTON5_PRESSED if (event.bstate & (BUTTON2_PRESSED | BUTTON5_PRESSED)) #else if (event.bstate & BUTTON2_PRESSED) #endif return opt_mouse_wheel_cursor ? REQ_MOVE_WHEEL_DOWN : REQ_SCROLL_WHEEL_DOWN; if (event.bstate & BUTTON4_PRESSED) return opt_mouse_wheel_cursor ? REQ_MOVE_WHEEL_UP : REQ_SCROLL_WHEEL_UP; if (event.bstate & BUTTON1_PRESSED) { if (event.y == view->pos.lineno - view->pos.offset) { /* Click is on the same line, perform an "ENTER" */ return REQ_ENTER; } else { int y = getbegy(view->win); unsigned long lineno = (event.y - y) + view->pos.offset; select_view_line(view, lineno); update_view_title(view); report_clear(); } } return REQ_NONE; } #endif /* * Error handling. * * Inspired by code from src/util.c in ELinks * (f86be659718c0cd0a67f88b42f07044c23d0d028). */ #ifdef DEBUG void sigsegv_handler(int sig) { if (die_callback) die_callback(); fputs("Tig crashed!\n\n" "Please report this issue along with all info printed below to\n\n" " https://github.com/jonas/tig/issues/new\n\n", stderr); fputs("Tig version: ", stderr); fputs(TIG_VERSION, stderr); fputs("\n\n", stderr); #ifdef HAVE_EXECINFO_H { /* glibc way of doing this */ void *stack[20]; size_t size = backtrace(stack, 20); backtrace_symbols_fd(stack, size, STDERR_FILENO); } #endif /* The fastest way OUT! */ abort(); } #endif void sighup_handler(int sig) { if (die_callback) die_callback(); exit(EXIT_SUCCESS); } struct key_combo { enum request request; struct keymap *keymap; size_t bufpos; size_t keys; struct key key[16]; }; static enum input_status key_combo_handler(struct input *input, struct key *key) { struct key_combo *combo = input->data; int matches = 0; #ifdef NCURSES_MOUSE_VERSION if (key_to_value(key) == KEY_MOUSE) { combo->request = handle_mouse_event(); return INPUT_STOP; } #endif if (combo->keys && key_to_value(key) == KEY_ESC) return INPUT_CANCEL; string_format_from(input->buf, &combo->bufpos, "%s%s", combo->bufpos ? " " : "Keys: ", get_key_name(key, 1, false)); combo->key[combo->keys++] = *key; combo->request = get_keybinding(combo->keymap, combo->key, combo->keys, &matches); if (combo->request == REQ_UNKNOWN) return matches > 0 ? INPUT_OK : INPUT_STOP; return INPUT_STOP; } enum request read_key_combo(struct keymap *keymap) { struct key_combo combo = { REQ_NONE, keymap, 0 }; char *value = read_prompt_incremental("", false, false, key_combo_handler, &combo); return value ? combo.request : REQ_NONE; } static inline void die_if_failed(enum status_code code, const char *msg) { if (code != SUCCESS) die("%s: %s", msg, get_status_message(code)); } void hangup_children(void) { if (signal(SIGHUP, SIG_IGN) == SIG_ERR) return; killpg(getpid(), SIGHUP); } static inline enum status_code handle_git_prefix(void) { const char *prefix = getenv("GIT_PREFIX"); char cwd[4096]; if (!prefix || !*prefix) return SUCCESS; /* * GIT_PREFIX is set when tig is invoked as a git alias. * Tig expects to run from the subdirectory so clear the prefix * and set GIT_WORK_TREE accordinglyt. */ if (!getcwd(cwd, sizeof(cwd))) return error("Failed to read CWD"); if (setenv("GIT_WORK_TREE", cwd, 1)) return error("Failed to set GIT_WORK_TREE"); if (chdir(prefix)) return error("Failed to change directory to %s", prefix); if (setenv("GIT_PREFIX", "", 1)) return error("Failed to clear GIT_PREFIX"); return SUCCESS; } int main(int argc, const char *argv[]) { const char *codeset = ENCODING_UTF8; bool pager_mode = !isatty(STDIN_FILENO); enum request request = parse_options(argc, argv, pager_mode); struct view *view; init_tty(); atexit(hangup_children); if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) die("Failed to setup signal handler"); if (signal(SIGHUP, sighup_handler) == SIG_ERR) die("Failed to setup signal handler"); #ifdef DEBUG if (signal(SIGSEGV, sigsegv_handler) == SIG_ERR) die("Failed to setup signal handler"); #endif if (setlocale(LC_ALL, "")) { codeset = nl_langinfo(CODESET); } die_if_failed(handle_git_prefix(), "Failed to handle GIT_PREFIX"); die_if_failed(load_repo_info(), "Failed to load repo info."); die_if_failed(load_options(), "Failed to load user config."); die_if_failed(load_git_config(), "Failed to load repo config."); prompt_init(); /* Require a git repository unless when running in pager mode. */ if (!repo.git_dir[0] && request != REQ_VIEW_PAGER) die("Not a git repository"); if (codeset && strcmp(codeset, ENCODING_UTF8)) { char translit[SIZEOF_STR]; if (string_format(translit, "%s%s", codeset, ICONV_TRANSLIT)) opt_iconv_out = iconv_open(translit, ENCODING_UTF8); else opt_iconv_out = iconv_open(codeset, ENCODING_UTF8); if (opt_iconv_out == ICONV_NONE) die("Failed to initialize character set conversion"); } die_if_failed(load_refs(false), "Failed to load refs."); init_display(); if (pager_mode) request = open_pager_mode(request); if (getenv("TIG_SCRIPT")) { const char *script_command[] = { "script", getenv("TIG_SCRIPT"), NULL }; run_prompt_command(NULL, script_command); } while (view_driver(display[current_view], request)) { view = display[current_view]; request = read_key_combo(view->keymap); /* Some low-level request handling. This keeps access to * status_win restricted. */ switch (request) { case REQ_UNKNOWN: report("Unknown key, press %s for help", get_view_key(view, REQ_VIEW_HELP)); request = REQ_NONE; break; case REQ_PROMPT: request = open_prompt(view); break; default: break; } } exit(EXIT_SUCCESS); return 0; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/tree.c000066400000000000000000000270371332650737300142150ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/util.h" #include "tig/repo.h" #include "tig/io.h" #include "tig/parse.h" #include "tig/options.h" #include "tig/display.h" #include "tig/view.h" #include "tig/draw.h" #include "tig/blob.h" /* The top of the path stack. */ static struct view_history tree_view_history = { sizeof(char *) }; static void pop_tree_stack_entry(struct position *position) { char *path_position = NULL; pop_view_history_state(&tree_view_history, position, &path_position); path_position[0] = 0; } static void push_tree_stack_entry(struct view *view, const char *name, struct position *position) { size_t pathlen = strlen(view->env->directory); char *path_position = view->env->directory + pathlen; struct view_state *state = push_view_history_state(&tree_view_history, position, &path_position); if (!state) return; if (!string_format_from(view->env->directory, &pathlen, "%s/", name)) { pop_tree_stack_entry(NULL); return; } clear_position(position); } /* Parse output from git-ls-tree(1): * * 100644 blob 95925677ca47beb0b8cce7c0e0011bcc3f61470f 213045 tig.c */ #define SIZEOF_TREE_ATTR \ STRING_SIZE("100644 blob f931e1d229c3e185caad4449bf5b66ed72462657\t") #define SIZEOF_TREE_MODE \ STRING_SIZE("100644 ") #define TREE_ID_OFFSET \ STRING_SIZE("100644 blob ") #define tree_path_is_parent(path) (!strcmp("..", (path))) struct tree_entry { char id[SIZEOF_REV]; char commit[SIZEOF_REV]; mode_t mode; struct time time; /* Date from the author ident. */ const struct ident *author; /* Author of the commit. */ unsigned long size; char name[1]; }; struct tree_state { char commit[SIZEOF_REV]; const struct ident *author; struct time author_time; bool read_date; }; static const char * tree_path(const struct line *line) { return ((struct tree_entry *) line->data)->name; } static int tree_compare_entry(const struct line *line1, const struct line *line2) { if (line1->type != line2->type) return line1->type == LINE_DIRECTORY ? -1 : 1; return strcmp(tree_path(line1), tree_path(line2)); } static bool tree_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data) { const struct tree_entry *entry = line->data; if (line->type == LINE_HEADER) return false; column_data->author = entry->author; column_data->date = &entry->time; if (line->type != LINE_DIRECTORY) column_data->file_size = &entry->size; column_data->id = entry->commit; column_data->mode = &entry->mode; column_data->file_name = entry->name; return true; } static struct line * tree_entry(struct view *view, enum line_type type, const char *path, const char *mode, const char *id, unsigned long size) { bool custom = type == LINE_HEADER || tree_path_is_parent(path); struct tree_entry *entry; struct line *line = add_line_alloc(view, &entry, type, strlen(path), custom); if (!line) return NULL; strncpy(entry->name, path, strlen(path)); if (mode) entry->mode = strtoul(mode, NULL, 8); if (id) string_copy_rev(entry->id, id); entry->size = size; return line; } static bool tree_read_date(struct view *view, struct buffer *buf, struct tree_state *state) { char *text = buf ? buf->data : NULL; if (!text && state->read_date) { state->read_date = false; return true; } else if (!text) { /* Find next entry to process */ const char *log_file[] = { "git", "log", encoding_arg, "--no-color", "--pretty=raw", "--cc", "--raw", view->ops->id, "--", "%(directory)", NULL }; if (!view->lines) { tree_entry(view, LINE_HEADER, view->env->directory, NULL, NULL, 0); tree_entry(view, LINE_DIRECTORY, "..", "040000", view->ref, 0); report("Tree is empty"); return true; } if (begin_update(view, repo.cdup, log_file, OPEN_EXTRA) != SUCCESS) { report("Failed to load tree data"); return true; } state->read_date = true; return false; } else if (*text == 'c' && get_line_type(text) == LINE_COMMIT) { string_copy_rev_from_commit_line(state->commit, text); } else if (*text == 'a' && get_line_type(text) == LINE_AUTHOR) { parse_author_line(text + STRING_SIZE("author "), &state->author, &state->author_time); } else if (*text == ':') { char *pos; size_t annotated = 1; size_t i; pos = strrchr(text, '\t'); if (!pos) return true; text = pos + 1; if (*view->env->directory && !strncmp(text, view->env->directory, strlen(view->env->directory))) text += strlen(view->env->directory); pos = strchr(text, '/'); if (pos) *pos = 0; for (i = 1; i < view->lines; i++) { struct line *line = &view->line[i]; struct tree_entry *entry = line->data; annotated += !!entry->author; if (entry->author || strcmp(entry->name, text)) continue; string_copy_rev(entry->commit, state->commit); entry->author = state->author; entry->time = state->author_time; line->dirty = 1; view_column_info_update(view, line); break; } if (annotated == view->lines) io_kill(view->pipe); } return true; } static bool tree_read(struct view *view, struct buffer *buf, bool force_stop) { struct tree_state *state = view->private; struct tree_entry *data; struct line *entry, *line; enum line_type type; char *path; size_t size; if (state->read_date || !buf) return tree_read_date(view, buf, state); if (buf->size <= SIZEOF_TREE_ATTR) return false; if (view->lines == 0 && !tree_entry(view, LINE_HEADER, view->env->directory, NULL, NULL, 0)) return false; size = parse_size(buf->data + SIZEOF_TREE_ATTR); path = strchr(buf->data + SIZEOF_TREE_ATTR, '\t'); if (!path) return false; path++; /* Strip the path part ... */ if (*view->env->directory) { size_t pathlen = strlen(path); size_t striplen = strlen(view->env->directory); if (pathlen > striplen) memmove(path, path + striplen, pathlen - striplen + 1); /* Insert "link" to parent directory. */ if (view->lines == 1 && !tree_entry(view, LINE_DIRECTORY, "..", "040000", view->ref, 0)) return false; } type = buf->data[SIZEOF_TREE_MODE] == 't' ? LINE_DIRECTORY : LINE_FILE; entry = tree_entry(view, type, path, buf->data, buf->data + TREE_ID_OFFSET, size); if (!entry) return false; data = entry->data; view_column_info_update(view, entry); /* Skip "Directory ..." and ".." line. */ for (line = &view->line[1 + !!*view->env->directory]; line < entry; line++) { if (tree_compare_entry(line, entry) <= 0) continue; memmove(line + 1, line, (entry - line) * sizeof(*entry)); line->data = data; line->type = type; line->dirty = line->cleareol = 1; for (line++; line <= entry; line++) { line->dirty = line->cleareol = 1; line->lineno++; } return true; } /* Move the current line to the first tree entry. */ if (!check_position(&view->prev_pos) && !check_position(&view->pos)) goto_view_line(view, 0, 1); return true; } static bool tree_draw(struct view *view, struct line *line, unsigned int lineno) { struct tree_entry *entry = line->data; if (line->type == LINE_HEADER) { draw_formatted(view, line->type, "Directory path /%s", entry->name); return true; } return view_column_draw(view, line, lineno); } void open_blob_editor(const char *id, const char *name, unsigned int lineno) { const char *blob_argv[] = { "git", "cat-file", "blob", id, NULL }; char file[SIZEOF_STR]; int fd; if (!name) name = "unknown"; if (!string_format(file, "%s/tigblob.XXXXXX.%s", get_temp_dir(), name)) { report("Temporary file name is too long"); return; } fd = mkstemps(file, strlen(name) + 1); if (fd == -1) report("Failed to create temporary file"); else if (!io_run_append(blob_argv, fd)) report("Failed to save blob data to file"); else open_editor(file, lineno); if (fd != -1) unlink(file); } static enum request tree_request(struct view *view, enum request request, struct line *line) { enum open_flags flags; struct tree_entry *entry = line->data; switch (request) { case REQ_VIEW_BLAME: if (line->type != LINE_FILE) { report("Blame only supported for files"); return REQ_NONE; } string_copy(view->env->ref, view->vid); return request; case REQ_EDIT: if (line->type != LINE_FILE) { report("Edit only supported for files"); } else if (!is_head_commit(view->vid)) { open_blob_editor(entry->id, entry->name, 0); } else { open_editor(view->env->file, 0); } return REQ_NONE; case REQ_PARENT: case REQ_BACK: if (!*view->env->directory) { /* quit view if at top of tree */ return REQ_VIEW_CLOSE; } /* fake 'cd ..' */ pop_tree_stack_entry(&view->pos); reload_view(view); return REQ_NONE; case REQ_ENTER: break; default: return request; } /* Cleanup the stack if the tree view is at a different tree. */ if (!*view->env->directory) reset_view_history(&tree_view_history); switch (line->type) { case LINE_DIRECTORY: /* Depending on whether it is a subdirectory or parent link * mangle the path buffer. */ if (tree_path_is_parent(entry->name) && *view->env->directory) { pop_tree_stack_entry(&view->pos); } else { const char *basename = tree_path(line); push_tree_stack_entry(view, basename, &view->pos); } /* Trees and subtrees share the same ID, so they are not not * unique like blobs. */ reload_view(view); break; case LINE_FILE: flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT; open_blob_view(view, flags); break; default: return REQ_NONE; } return REQ_NONE; } static void tree_select(struct view *view, struct line *line) { struct tree_entry *entry = line->data; if (line->type == LINE_HEADER) { string_format(view->ref, "Files in /%s", view->env->directory); return; } if (line->type == LINE_DIRECTORY && tree_path_is_parent(entry->name)) { string_copy(view->ref, "Open parent directory"); view->env->blob[0] = 0; return; } if (line->type == LINE_FILE) { string_copy_rev(view->env->blob, entry->id); string_format(view->env->file, "%s%s", view->env->directory, tree_path(line)); } string_copy_rev(view->ref, entry->id); } static enum status_code tree_open(struct view *view, enum open_flags flags) { static const char *tree_argv[] = { "git", "ls-tree", "-l", "%(commit)", "--", "%(directory)", NULL }; if (string_rev_is_null(view->env->commit)) return error("No tree exists for this commit"); if (view->lines == 0 && repo.prefix[0]) { char *pos = repo.prefix; while (pos && *pos) { char *end = strchr(pos, '/'); if (end) *end = 0; push_tree_stack_entry(view, pos, &view->pos); pos = end; if (end) { *end = '/'; pos++; } } } else if (strcmp(view->vid, view->ops->id)) { view->env->directory[0] = 0; } return begin_update(view, repo.cdup, tree_argv, flags); } static struct view_ops tree_ops = { "file", argv_env.commit, VIEW_SEND_CHILD_ENTER | VIEW_SORTABLE, sizeof(struct tree_state), tree_open, tree_read, tree_draw, tree_request, view_column_grep, tree_select, NULL, view_column_bit(AUTHOR) | view_column_bit(DATE) | view_column_bit(FILE_NAME) | view_column_bit(FILE_SIZE) | view_column_bit(ID) | view_column_bit(LINE_NUMBER) | view_column_bit(MODE), tree_get_column_data, }; DEFINE_VIEW(tree); /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/types.c000066400000000000000000000047111332650737300144140ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/types.h" /* * Enumerations */ int string_enum_compare(const char *str1, const char *str2, int len) { size_t i; /* Diff-Header == DIFF_HEADER */ for (i = 0; i < len; i++) { if (ascii_toupper(str1[i]) == ascii_toupper(str2[i])) continue; if (string_enum_sep(str1[i]) && string_enum_sep(str2[i])) continue; return str1[i] - str2[i]; } return 0; } bool enum_name_copy(char buf[], size_t bufsize, const char *name) { int bufpos; for (bufpos = 0; name[bufpos] && bufpos < bufsize - 1; bufpos++) { buf[bufpos] = ascii_tolower(name[bufpos]); if (string_enum_sep(buf[bufpos])) buf[bufpos] = '-'; } buf[bufpos] = 0; return bufpos < bufsize; } const char * enum_name(const char *name) { static char buf[SIZEOF_STR]; return enum_name_copy(buf, sizeof(buf), name) ? buf : name; } bool enum_name_prefixed(char buf[], size_t bufsize, const char *prefix, const char *name) { char prefixed[SIZEOF_STR]; if (*prefix) { if (!string_format(prefixed, "%s-%s", prefix, name)) return false; name = prefixed; } return enum_name_copy(buf, bufsize, name); } const struct enum_map * find_enum_map(const char *type) { static struct { const char *type; const struct enum_map *map; } mappings[] = { #define DEFINE_ENUM_MAPPING(name, macro) { #name, name##_map }, ENUM_INFO(DEFINE_ENUM_MAPPING) }; int i; for (i = 0; i < ARRAY_SIZE(mappings); i++) if (!strcmp(type, mappings[i].type)) return mappings[i].map; return NULL; } bool map_enum_do(const struct enum_map_entry *map, size_t map_size, int *value, const char *name) { size_t namelen = strlen(name); int i; for (i = 0; i < map_size; i++) if (enum_equals(map[i], name, namelen)) { *value = map[i].value; return true; } return false; } #define DEFINE_ENUM_MAPS(name, macro) DEFINE_ENUM_MAP(name, macro); ENUM_INFO(DEFINE_ENUM_MAPS) /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/ui.c000066400000000000000000000166371332650737300136770ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/util.h" #include "tig/parse.h" #include "tig/repo.h" #include "tig/prompt.h" #include "tig/display.h" #include "tig/view.h" #include "tig/ui.h" struct file_finder_line { size_t matches; char text[1]; }; DEFINE_ALLOCATOR(realloc_file_array, struct file_finder_line *, 256) struct file_finder { WINDOW *win; int height, width; struct file_finder_line **file; struct file_finder_line **line; size_t lines; struct position pos; struct keymap *keymap; const char **search; size_t searchlen; }; static bool file_finder_read(struct file_finder *finder, const char *commit) { const char *tree = string_rev_is_null(commit) ? "HEAD" : commit; const char *ls_tree_files_argv[] = { "git", "ls-tree", "-z", "-r", "--name-only", "--full-name", tree, NULL }; struct buffer buf; struct io io; size_t files; bool ok = true; if (!io_run(&io, IO_RD, repo.cdup, NULL, ls_tree_files_argv)) return false; for (files = 0; io_get(&io, &buf, 0, true); files++) { /* Alloc two to ensure NULL terminated array. */ if (!realloc_file_array(&finder->file, files, 2)) { ok = false; break; } finder->file[files] = calloc(1, sizeof(struct file_finder_line) + buf.size); if (!finder->file[files]) { ok = false; break; } strncpy(finder->file[files]->text, buf.data, buf.size); } if (io_error(&io) || !realloc_file_array(&finder->line, 0, files + 1)) ok = false; io_done(&io); return ok; } static void file_finder_done(struct file_finder *finder) { int i; free(finder->line); if (finder->file) { for (i = 0; finder->file[i]; i++) free(finder->file[i]); free(finder->file); } if (finder->win) delwin(finder->win); } static void file_finder_move(struct file_finder *finder, int direction) { if (direction < 0 && finder->pos.lineno <= -direction) finder->pos.lineno = 0; else finder->pos.lineno += direction; if (finder->pos.lineno >= finder->lines) { if (finder->lines > 0) finder->pos.lineno = finder->lines - 1; else finder->pos.lineno = 0; } if (finder->pos.offset + finder->height <= finder->pos.lineno) finder->pos.offset = finder->pos.lineno - (finder->height / 2); if (finder->pos.offset > finder->pos.lineno) finder->pos.offset = finder->pos.lineno; if (finder->lines <= finder->height) finder->pos.offset = 0; } static void file_finder_draw_line(struct file_finder *finder, struct file_finder_line *line) { const char **search = finder->search; const char *text = line->text; const char *pos; for (; *text && search && *search && (pos = strstr(text, *search)); search++) { if (text < pos) waddnstr(finder->win, text, pos - text); wattron(finder->win, A_STANDOUT); waddnstr(finder->win, pos, 1); wattroff(finder->win, A_STANDOUT); text = pos + 1; } if (*text) waddstr(finder->win, text); } static void file_finder_draw(struct file_finder *finder) { struct position *pos = &finder->pos; struct file_finder_line *current_line = finder->line[pos->lineno]; struct file_finder_line **line_pos = &finder->line[pos->offset]; int column; wbkgdset(finder->win, get_line_attr(NULL, LINE_DEFAULT)); werase(finder->win); for (column = 0; *line_pos && column < finder->height - 1; line_pos++) { struct file_finder_line *line = *line_pos; if (finder->searchlen != line->matches) continue; wmove(finder->win, column++, 0); if (line == current_line) { wbkgdset(finder->win, get_line_attr(NULL, LINE_CURSOR)); } file_finder_draw_line(finder, line); if (line == current_line) { wclrtoeol(finder->win); wbkgdset(finder->win, get_line_attr(NULL, LINE_DEFAULT)); } } wmove(finder->win, finder->height - 1, 0); wbkgdset(finder->win, get_line_attr(NULL, LINE_TITLE_FOCUS)); wprintw(finder->win, "[finder] file %d of %d", pos->lineno + 1, finder->lines); wclrtoeol(finder->win); wrefresh(finder->win); } static size_t file_finder_line_matches(struct file_finder_line *line, const char **search) { const char *text = line->text; const char *pos; size_t matches = 0; for (; *text && *search && (pos = strstr(text, *search)); search++) { text = pos + strlen(*search); matches++; } return matches; } static void file_finder_update(struct file_finder *finder) { struct file_finder_line *current = finder->line[finder->pos.lineno]; size_t new_lineno = 0; int i; memset(finder->line, 0, sizeof(*finder->line) * finder->lines); finder->lines = 0; for (i = 0; finder->file && finder->file[i]; i++) { struct file_finder_line *line = finder->file[i]; if (line == current) current = NULL; if (line->matches + 1 < finder->searchlen) { continue; } if (line->matches >= finder->searchlen) { line->matches = finder->searchlen; } else { line->matches = file_finder_line_matches(line, finder->search); if (line->matches < finder->searchlen) continue; } if (current != NULL) new_lineno++; finder->line[finder->lines++] = line; } finder->pos.lineno = new_lineno; } static enum input_status file_finder_input_handler(struct input *input, struct key *key) { struct file_finder *finder = input->data; enum input_status status; status = prompt_default_handler(input, key); if (status == INPUT_DELETE) { if (finder->searchlen > 0) { finder->searchlen--; free((void *) finder->search[finder->searchlen]); finder->search[finder->searchlen] = NULL; } file_finder_update(finder); file_finder_move(finder, 0); file_finder_draw(finder); return status; } if (status != INPUT_SKIP) return status; switch (get_keybinding(finder->keymap, key, 1, NULL)) { case REQ_FIND_PREV: file_finder_move(finder, -1); file_finder_draw(finder); return INPUT_SKIP; case REQ_FIND_NEXT: file_finder_move(finder, +1); file_finder_draw(finder); return INPUT_SKIP; case REQ_BACK: case REQ_PARENT: case REQ_VIEW_CLOSE: case REQ_VIEW_CLOSE_NO_QUIT: return INPUT_CANCEL; default: if (key_to_value(key) == 0) { argv_append(&finder->search, key->data.bytes); finder->searchlen++; file_finder_update(finder); file_finder_move(finder, 0); file_finder_draw(finder); return INPUT_OK; } /* Catch all non-multibyte keys. */ return INPUT_SKIP; } } const char * open_file_finder(const char *commit) { struct file_finder finder = {0}; const char *file = NULL; if (!file_finder_read(&finder, commit)) { file_finder_done(&finder); return false; } getmaxyx(stdscr, finder.height, finder.width); finder.height--; finder.win = newwin(finder.height, finder.width, 0, 0); if (!finder.win) { file_finder_done(&finder); return false; } finder.keymap = get_keymap("search", STRING_SIZE("search")), file_finder_update(&finder); file_finder_draw(&finder); if (read_prompt_incremental("Find file: ", false, true, file_finder_input_handler, &finder) && finder.pos.lineno < finder.lines) file = get_path(finder.line[finder.pos.lineno]->text); file_finder_done(&finder); redraw_display(true); return file; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/util.c000066400000000000000000000233601332650737300142260ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/util.h" /* * Error handling. */ static const char *status_messages[] = { "Success", #define STATUS_CODE_MESSAGE(name, msg) msg STATUS_CODE_INFO(STATUS_CODE_MESSAGE) }; static char status_custom_message[SIZEOF_STR]; static bool status_success_message = false; const char * get_status_message(enum status_code code) { if (code == SUCCESS) { const char *message = status_success_message ? status_custom_message : ""; status_success_message = false; return message; } if (code == ERROR_CUSTOM_MESSAGE) return status_custom_message; return status_messages[code]; } enum status_code error(const char *msg, ...) { int retval; FORMAT_BUFFER(status_custom_message, sizeof(status_custom_message), msg, retval, true); status_success_message = false; return ERROR_CUSTOM_MESSAGE; } enum status_code success(const char *msg, ...) { int retval; FORMAT_BUFFER(status_custom_message, sizeof(status_custom_message), msg, retval, true); status_success_message = true; return SUCCESS; } void warn(const char *msg, ...) { va_list args; va_start(args, msg); fputs("tig warning: ", stderr); vfprintf(stderr, msg, args); fputs("\n", stderr); va_end(args); } die_fn die_callback = NULL; void TIG_NORETURN die(const char *err, ...) { va_list args; if (die_callback) die_callback(); va_start(args, err); fputs("tig: ", stderr); vfprintf(stderr, err, args); fputs("\n", stderr); va_end(args); exit(1); } /* * Git data formatters and parsers. */ int time_now(struct timeval *timeval, struct timezone *tz) { static bool check_env = true; if (check_env) { const char *time; if ((time = getenv("TEST_TIME_NOW"))) { memset(timeval, 0, sizeof(*timeval)); if (tz) memset(tz, 0, sizeof(*tz)); timeval->tv_sec = atoi(time); return 0; } check_env = false; } return gettimeofday(timeval, tz); } int timecmp(const struct time *t1, const struct time *t2) { return t1->sec - t2->sec; } struct reldate { const char *name; const char compact_symbol; int in_seconds, interval; }; static const struct reldate reldate[] = { { "second", 's', 1, 60 * 2 }, { "minute", 'm', 60, 60 * 60 * 2 }, { "hour", 'h', 60 * 60, 60 * 60 * 24 * 2 }, { "day", 'D', 60 * 60 * 24, 60 * 60 * 24 * 7 * 2 }, { "week", 'W', 60 * 60 * 24 * 7, 60 * 60 * 24 * 7 * 5 }, { "month", 'M', 60 * 60 * 24 * 30, 60 * 60 * 24 * 365 }, { "year", 'Y', 60 * 60 * 24 * 365, 0 }, }; static const char * get_relative_date(const struct time *time, char *buf, size_t buflen, bool compact) { struct timeval now; time_t timestamp = time->sec + time->tz; time_t seconds; int i; if (time_now(&now, NULL)) return ""; seconds = now.tv_sec < timestamp ? timestamp - now.tv_sec : now.tv_sec - timestamp; for (i = 0; i < ARRAY_SIZE(reldate); i++) { if (seconds >= reldate[i].interval && reldate[i].interval) continue; seconds /= reldate[i].in_seconds; if (compact) { if (!string_nformat(buf, buflen, NULL, "%s%ld%c", now.tv_sec >= timestamp ? "" : "-", seconds, reldate[i].compact_symbol)) return ""; } else if (!string_nformat(buf, buflen, NULL, "%ld %s%s %s", seconds, reldate[i].name, seconds > 1 ? "s" : "", now.tv_sec >= timestamp ? "ago" : "ahead")) return ""; return buf; } return ""; } const char * mkdate(const struct time *time, enum date date, bool local, const char *custom_format) { static char buf[SIZEOF_STR]; struct tm tm; const char *format; bool tz_fmt; if (!date || !time || !time->sec) return ""; if (date == DATE_RELATIVE || date == DATE_RELATIVE_COMPACT) return get_relative_date(time, buf, sizeof(buf), date == DATE_RELATIVE_COMPACT); format = (date == DATE_CUSTOM && custom_format) ? custom_format : local ? "%Y-%m-%d %H:%M" : "%Y-%m-%d %H:%M %z"; tz_fmt = strstr(format, "%z") || strstr(format, "%Z"); if (local) { time_t timestamp = time->sec + time->tz; localtime_r(×tamp, &tm); } else { gmtime_r(&time->sec, &tm); } if (local || (!tz_fmt)) return !strftime(buf, sizeof(buf), format, &tm) ? NULL : buf; { char format_buf[SIZEOF_STR]; char *format_pos = format_buf; char *buf_pos = buf; size_t buf_size = sizeof(buf); int tz = ABS(time->tz); string_ncopy(format_buf, format, strlen(format)); while (*format_pos) { char *z_pos = strstr(format_pos, "%z"); char *Z_pos = strstr(format_pos, "%Z"); char *tz_pos = (z_pos && Z_pos) ? MIN(z_pos, Z_pos) : MAX(z_pos, Z_pos); size_t time_len; if (tz_pos) *tz_pos = 0; time_len = strftime(buf_pos, buf_size, format_pos, &tm); if (!time_len) return NULL; buf_pos += time_len; buf_size -= time_len; if (!tz_pos) break; /* Skip the %z format flag and insert the timezone. */ format_pos = tz_pos + 2; if (buf_size < 5) return NULL; buf_pos[0] = time->tz > 0 ? '-' : '+'; buf_pos[1] = '0' + (tz / 60 / 60 / 10); buf_pos[2] = '0' + (tz / 60 / 60 % 10); buf_pos[3] = '0' + (tz / 60 % 60 / 10); buf_pos[4] = '0' + (tz / 60 % 60 % 10); buf_pos[5] = 0; buf_pos += 5; buf_size -= 5; } #undef buf_size } return buf; } const char * mkfilesize(unsigned long size, enum file_size format) { static char buf[64 + 1]; static const char relsize[] = { 'B', 'K', 'M', 'G', 'T', 'P' }; if (!format) return ""; if (format == FILE_SIZE_UNITS) { const char *fmt = "%.0f%c"; double rsize = size; int i; for (i = 0; i < ARRAY_SIZE(relsize); i++) { if (rsize > 1024.0 && i + 1 < ARRAY_SIZE(relsize)) { rsize /= 1024; continue; } size = rsize * 10; if (size % 10 > 0) fmt = "%.1f%c"; return string_format(buf, fmt, rsize, relsize[i]) ? buf : NULL; } } return string_format(buf, "%ld", size) ? buf : NULL; } const struct ident unknown_ident = { "unknown@localhostUnknown", // key "Unknown", // name "unknown@localhost" // email }; int ident_compare(const struct ident *i1, const struct ident *i2) { if (!i1 || !i2) return (!!i1) - (!!i2); if (!i1->name || !i2->name) return (!!i1->name) - (!!i2->name); return strcmp(i1->name, i2->name); } static const char * get_author_initials(const char *author) { static char initials[256]; size_t pos = 0; const char *end = strchr(author, '\0'); #define is_initial_sep(c) (isspace(c) || ispunct(c) || (c) == '@' || (c) == '-') memset(initials, 0, sizeof(initials)); while (author < end) { unsigned char bytes; size_t i; while (author < end && is_initial_sep(*author)) author++; bytes = utf8_char_length(author); if (bytes >= sizeof(initials) - 1 - pos) break; while (bytes--) { initials[pos++] = *author++; } i = pos; while (author < end && !is_initial_sep(*author)) { bytes = utf8_char_length(author); if (bytes >= sizeof(initials) - 1 - i) { while (author < end && !is_initial_sep(*author)) author++; break; } while (bytes--) { initials[i++] = *author++; } } initials[i++] = 0; } return initials; } static const char * get_email_user(const char *email) { static char user[SIZEOF_STR + 1]; const char *end = strchr(email, '@'); int length = end ? end - email : strlen(email); string_format(user, "%.*s%c", length, email, 0); return user; } const char * mkauthor(const struct ident *ident, int cols, enum author author) { bool trim = author_trim(cols); bool abbreviate = author == AUTHOR_ABBREVIATED || !trim; if (author == AUTHOR_NO || !ident) return ""; if (author == AUTHOR_EMAIL && ident->email) return ident->email; if (author == AUTHOR_EMAIL_USER && ident->email) return get_email_user(ident->email); if (abbreviate && ident->name) return get_author_initials(ident->name); return ident->name; } const char * mkmode(mode_t mode) { if (S_ISDIR(mode)) return "drwxr-xr-x"; else if (S_ISLNK(mode)) return "lrwxrwxrwx"; else if (S_ISGITLINK(mode)) return "m---------"; else if (S_ISREG(mode) && mode & S_IXUSR) return "-rwxr-xr-x"; else if (S_ISREG(mode)) return "-rw-r--r--"; else return "----------"; } const char * mkstatus(const char status, enum status_label label) { static char default_label[] = { '?', 0 }; static const char *labels[][2] = { { "!", "ignored" }, { "?", "untracked" }, { "A", "added" }, { "C", "copied" }, { "D", "deleted" }, { "M", "modified" }, { "R", "renamed" }, { "U", "unmerged" }, }; int i; if (label == STATUS_LABEL_NO) return ""; for (i = 0; i < ARRAY_SIZE(labels); i++) { if (status == *labels[i][0]) { if (label == STATUS_LABEL_LONG) return labels[i][1]; else return labels[i][0]; } } default_label[0] = status; return default_label; } /* * Allocation helper. */ void * chunk_allocator(void *mem, size_t type_size, size_t chunk_size, size_t size, size_t increase) { size_t num_chunks = (size + chunk_size - 1) / chunk_size; size_t num_chunks_new = (size + increase + chunk_size - 1) / chunk_size; if (mem == NULL || num_chunks != num_chunks_new) { size_t newsize = num_chunks_new * chunk_size * type_size; char *tmp = realloc(mem, newsize); if (!tmp) return NULL; if (num_chunks_new > num_chunks) { size_t oldsize = num_chunks * chunk_size * type_size; memset(tmp + oldsize, 0, newsize - oldsize); } return tmp; } return mem; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/view.c000066400000000000000000001212501332650737300142200ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/argv.h" #include "tig/repo.h" #include "tig/watch.h" #include "tig/options.h" #include "tig/view.h" #include "tig/search.h" #include "tig/draw.h" #include "tig/display.h" /* * Navigation */ bool goto_view_line(struct view *view, unsigned long offset, unsigned long lineno) { if (lineno >= view->lines) lineno = view->lines > 0 ? view->lines - 1 : 0; if (offset > lineno || offset + view->height <= lineno) { unsigned long half = view->height / 2; if (lineno > half) offset = lineno - half; else offset = 0; } if (offset != view->pos.offset || lineno != view->pos.lineno) { view->pos.offset = offset; view->pos.lineno = lineno; return true; } return false; } /* Scrolling backend */ void do_scroll_view(struct view *view, int lines) { bool redraw_current_line = false; /* The rendering expects the new offset. */ view->pos.offset += lines; assert(0 <= view->pos.offset && view->pos.offset < view->lines); assert(lines); /* Move current line into the view. */ if (view->pos.lineno < view->pos.offset) { view->pos.lineno = view->pos.offset; redraw_current_line = true; } else if (view->pos.lineno >= view->pos.offset + view->height) { view->pos.lineno = view->pos.offset + view->height - 1; redraw_current_line = true; } assert(view->pos.offset <= view->pos.lineno && view->pos.lineno < view->lines); /* Redraw the whole screen if scrolling is pointless. */ if (view->height < ABS(lines)) { redraw_view(view); } else { int line = lines > 0 ? view->height - lines : 0; int end = line + ABS(lines); scrollok(view->win, true); wscrl(view->win, lines); scrollok(view->win, false); while (line < end && draw_view_line(view, line)) line++; if (redraw_current_line) draw_view_line(view, view->pos.lineno - view->pos.offset); wnoutrefresh(view->win); } view->has_scrolled = true; report_clear(); } /* Scroll frontend */ void scroll_view(struct view *view, enum request request) { int lines = 1; assert(view_is_displayed(view)); if (request == REQ_SCROLL_WHEEL_DOWN || request == REQ_SCROLL_WHEEL_UP) lines = opt_mouse_scroll; switch (request) { case REQ_SCROLL_FIRST_COL: view->pos.col = 0; redraw_view_from(view, 0); report_clear(); return; case REQ_SCROLL_LEFT: if (view->pos.col == 0) { report("Cannot scroll beyond the first column"); return; } if (view->pos.col <= apply_step(opt_horizontal_scroll, view->width)) view->pos.col = 0; else view->pos.col -= apply_step(opt_horizontal_scroll, view->width); redraw_view_from(view, 0); report_clear(); return; case REQ_SCROLL_RIGHT: view->pos.col += apply_step(opt_horizontal_scroll, view->width); redraw_view(view); report_clear(); return; case REQ_SCROLL_PAGE_DOWN: lines = view->height; /* Fall-through */ case REQ_SCROLL_WHEEL_DOWN: case REQ_SCROLL_LINE_DOWN: if (view->pos.offset + lines > view->lines) lines = view->lines - view->pos.offset; if (lines == 0 || view->pos.offset + view->height >= view->lines) { report("Cannot scroll beyond the last line"); return; } break; case REQ_SCROLL_PAGE_UP: lines = view->height; /* Fall-through */ case REQ_SCROLL_LINE_UP: case REQ_SCROLL_WHEEL_UP: if (lines > view->pos.offset) lines = view->pos.offset; if (lines == 0) { report("Cannot scroll beyond the first line"); return; } lines = -lines; break; default: die("request %d not handled in switch", request); } do_scroll_view(view, lines); } /* Cursor moving */ void move_view(struct view *view, enum request request) { int scroll_steps = 0; int steps; switch (request) { case REQ_MOVE_FIRST_LINE: steps = -view->pos.lineno; break; case REQ_MOVE_LAST_LINE: steps = view->lines - view->pos.lineno - 1; break; case REQ_MOVE_PAGE_UP: steps = view->height > view->pos.lineno ? -view->pos.lineno : -view->height; break; case REQ_MOVE_PAGE_DOWN: steps = view->pos.lineno + view->height >= view->lines ? view->lines - view->pos.lineno - 1 : view->height; break; case REQ_MOVE_HALF_PAGE_UP: steps = view->height / 2 > view->pos.lineno ? -view->pos.lineno : -(view->height / 2); break; case REQ_MOVE_HALF_PAGE_DOWN: steps = view->pos.lineno + view->height / 2 >= view->lines ? view->lines - view->pos.lineno - 1 : view->height / 2; break; case REQ_MOVE_WHEEL_DOWN: steps = opt_mouse_scroll; break; case REQ_MOVE_WHEEL_UP: steps = -opt_mouse_scroll; break; case REQ_MOVE_UP: case REQ_PREVIOUS: steps = -1; break; case REQ_MOVE_DOWN: case REQ_NEXT: steps = 1; break; default: die("request %d not handled in switch", request); } if (steps <= 0 && view->pos.lineno == 0) { report("Cannot move beyond the first line"); return; } else if (steps >= 0 && view->pos.lineno + 1 >= view->lines) { report("Cannot move beyond the last line"); return; } /* Move the current line */ view->pos.lineno += steps; assert(0 <= view->pos.lineno && view->pos.lineno < view->lines); /* Check whether the view needs to be scrolled */ if (view->pos.lineno < view->pos.offset || view->pos.lineno >= view->pos.offset + view->height) { scroll_steps = steps; if (steps < 0 && -steps > view->pos.offset) { scroll_steps = -view->pos.offset; } else if (steps > 0) { if (view->pos.lineno == view->lines - 1 && view->lines > view->height) { scroll_steps = view->lines - view->pos.offset - 1; if (scroll_steps >= view->height) scroll_steps -= view->height - 1; } } } if (!view_is_displayed(view)) { view->pos.offset += scroll_steps; assert(0 <= view->pos.offset && view->pos.offset < view->lines); view->ops->select(view, &view->line[view->pos.lineno]); return; } /* Repaint the old "current" line if we be scrolling */ if (ABS(steps) < view->height) draw_view_line(view, view->pos.lineno - steps - view->pos.offset); if (scroll_steps) { do_scroll_view(view, scroll_steps); return; } /* Draw the current line */ draw_view_line(view, view->pos.lineno - view->pos.offset); wnoutrefresh(view->win); report_clear(); } void select_view_line(struct view *view, unsigned long lineno) { struct position old = view->pos; if (goto_view_line(view, view->pos.offset, lineno)) { if (view_is_displayed(view)) { if (old.offset != view->pos.offset) { redraw_view(view); } else { draw_view_line(view, old.lineno - view->pos.offset); draw_view_line(view, view->pos.lineno - view->pos.offset); wnoutrefresh(view->win); } } else { view->ops->select(view, &view->line[view->pos.lineno]); } } } void goto_id(struct view *view, const char *expr, bool from_start, bool save_search) { struct view_column_data column_data = {0}; char id[SIZEOF_STR] = ""; size_t idlen; struct line *line = &view->line[view->pos.lineno]; if (!(view->ops->column_bits & view_column_bit(ID))) { report("Jumping to ID is not supported by the %s view", view->name); return; } else { char *rev = argv_format_arg(view->env, expr); const char *rev_parse_argv[] = { "git", "rev-parse", "--revs-only", rev, NULL }; bool ok = rev && io_run_buf(rev_parse_argv, id, sizeof(id), NULL, true); free(rev); if (!ok) { report("Failed to parse expression '%s'", expr); return; } } if (!id[0]) { if (view->ops->get_column_data(view, line, &column_data) && column_data.id && string_rev_is_null(column_data.id)) { select_view_line(view, view->pos.lineno + 1); report_clear(); } else { report("Expression '%s' is not a meaningful revision", expr); } return; } line = from_start ? view->line : &view->line[view->pos.lineno]; for (idlen = strlen(id); view_has_line(view, line); line++) { struct view_column_data column_data = {0}; if (view->ops->get_column_data(view, line, &column_data) && column_data.id && !strncasecmp(column_data.id, id, idlen)) { if (save_search) string_ncopy(view->env->search, id, idlen); select_view_line(view, line - view->line); report_clear(); return; } } report("Unable to find commit '%s'", id); } /* * View history */ static bool view_history_is_empty(struct view_history *history) { return !history->stack; } struct view_state * push_view_history_state(struct view_history *history, struct position *position, void *data) { struct view_state *state = history->stack; if (state && data && history->state_alloc && !memcmp(state->data, data, history->state_alloc)) return NULL; state = calloc(1, sizeof(*state) + history->state_alloc); if (!state) return NULL; state->prev = history->stack; history->stack = state; clear_position(&history->position); state->position = *position; state->data = &state[1]; if (data && history->state_alloc) memcpy(state->data, data, history->state_alloc); return state; } bool pop_view_history_state(struct view_history *history, struct position *position, void *data) { struct view_state *state = history->stack; if (view_history_is_empty(history)) return false; history->position = state->position; history->stack = state->prev; if (data && history->state_alloc) memcpy(data, state->data, history->state_alloc); if (position) *position = state->position; free(state); return true; } void reset_view_history(struct view_history *history) { while (pop_view_history_state(history, NULL, NULL)) ; } /* * Incremental updating */ void reset_view(struct view *view) { int i; for (i = 0; i < view->lines; i++) free(view->line[i].data); free(view->line); reset_search(view); view->prev_pos = view->pos; /* A view without a previous view is the first view */ if (!view->prev && !view->lines && view->prev_pos.lineno == 0) view->prev_pos.lineno = view->env->goto_lineno; clear_position(&view->pos); if (view->columns) view_column_reset(view); view->line = NULL; view->lines = 0; view->vid[0] = 0; view->custom_lines = 0; view->update_secs = 0; } static bool restore_view_position(struct view *view) { /* Ensure that the view position is in a valid state. */ if (!check_position(&view->prev_pos) || (view->pipe && view->lines <= view->prev_pos.lineno)) return goto_view_line(view, view->pos.offset, view->pos.lineno); /* Changing the view position cancels the restoring. */ /* FIXME: Changing back to the first line is not detected. */ if (check_position(&view->pos)) { clear_position(&view->prev_pos); return false; } if (goto_view_line(view, view->prev_pos.offset, view->prev_pos.lineno) && view_is_displayed(view)) werase(view->win); view->pos.col = view->prev_pos.col; clear_position(&view->prev_pos); return true; } void end_update(struct view *view, bool force) { if (!view->pipe) return; while (!view->ops->read(view, NULL, force)) if (!force) return; if (force) io_kill(view->pipe); io_done(view->pipe); view->pipe = NULL; } static void setup_update(struct view *view, const char *vid) { reset_view(view); /* XXX: Do not use string_copy_rev(), it copies until first space. */ string_ncopy(view->vid, vid, strlen(vid)); view->pipe = &view->io; view->start_time = time(NULL); } static bool view_no_refresh(struct view *view, enum open_flags flags) { bool reload = !!(flags & OPEN_ALWAYS_LOAD) || !view->lines; return (!reload && !strcmp(view->vid, view->ops->id)) || ((flags & OPEN_REFRESH) && !view_can_refresh(view)); } bool view_exec(struct view *view, enum open_flags flags) { char opt_env_lines[64] = ""; char opt_env_columns[64] = ""; char * const opt_env[] = { opt_env_lines, opt_env_columns, NULL }; enum io_flags forward_stdin = (flags & OPEN_FORWARD_STDIN) ? IO_RD_FORWARD_STDIN : 0; enum io_flags with_stderr = (flags & OPEN_WITH_STDERR) ? IO_RD_WITH_STDERR : 0; enum io_flags io_flags = forward_stdin | with_stderr; int views = displayed_views(); bool split = (views == 1 && !!(flags & OPEN_SPLIT)) || views == 2; int height, width; getmaxyx(stdscr, height, width); if (split && vertical_split_is_enabled(opt_vertical_split, height, width)) { bool is_base_view = display[0] == view; int split_width = apply_vertical_split(width); if (is_base_view) width -= split_width; else width = split_width - 1; } string_format(opt_env_columns, "COLUMNS=%d", MAX(0, width)); string_format(opt_env_lines, "LINES=%d", height); return io_exec(&view->io, IO_RD, view->dir, opt_env, view->argv, io_flags); } enum status_code begin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags) { bool extra = !!(flags & (OPEN_EXTRA)); bool refresh = flags & (OPEN_REFRESH | OPEN_PREPARED | OPEN_STDIN); if (view_no_refresh(view, flags)) return SUCCESS; if (view->pipe) { if (extra) io_done(view->pipe); else end_update(view, true); } view->unrefreshable = open_in_pager_mode(flags); if (!refresh && argv) { bool file_filter = !view_has_flags(view, VIEW_FILE_FILTER) || opt_file_filter; view->dir = dir; if (!argv_format(view->env, &view->argv, argv, !view->prev, file_filter)) return error("Failed to format %s arguments", view->name); } if (view->argv && view->argv[0] && !view_exec(view, flags)) return error("Failed to open %s view", view->name); if (open_from_stdin(flags)) { if (!io_open(&view->io, "%s", "")) die("Failed to open stdin"); } if (!extra) setup_update(view, view->ops->id); return SUCCESS; } bool update_view(struct view *view) { /* Clear the view and redraw everything since the tree sorting * might have rearranged things. */ bool redraw = view->lines == 0; bool can_read = true; struct encoding *encoding = view->encoding ? view->encoding : default_encoding; struct buffer line; if (!view->pipe) return true; if (!io_can_read(view->pipe, false)) { if (view->lines == 0 && view_is_displayed(view)) { time_t secs = time(NULL) - view->start_time; if (secs > 1 && secs > view->update_secs) { if (view->update_secs == 0) redraw_view(view); update_view_title(view); view->update_secs = secs; } } return true; } for (; io_get(view->pipe, &line, '\n', can_read); can_read = false) { if (encoding && !encoding_convert(encoding, &line)) { report("Encoding failure"); end_update(view, true); return false; } if (!view->ops->read(view, &line, false)) { report("Allocation failure"); end_update(view, true); return false; } } if (io_error(view->pipe)) { report("Failed to read: %s", io_strerror(view->pipe)); end_update(view, true); } else if (io_eof(view->pipe)) { end_update(view, false); } if (restore_view_position(view)) redraw = true; if (!view_is_displayed(view)) return true; if (redraw || view->force_redraw) redraw_view_from(view, 0); else redraw_view_dirty(view); view->force_redraw = false; /* Update the title _after_ the redraw so that if the redraw picks up a * commit reference in view->ref it'll be available here. */ update_view_title(view); return true; } void update_view_title(struct view *view) { WINDOW *window = view->title; struct line *line = &view->line[view->pos.lineno]; unsigned int view_lines, lines; int update_increment = view_has_flags(view, VIEW_LOG_LIKE | VIEW_GREP_LIKE) ? 100 : view_has_flags(view, VIEW_DIFF_LIKE) ? 10 : 1; assert(view_is_displayed(view)); if (view == display[current_view]) wbkgdset(window, get_view_attr(view, LINE_TITLE_FOCUS)); else wbkgdset(window, get_view_attr(view, LINE_TITLE_BLUR)); werase(window); mvwprintw(window, 0, 0, "[%s]", view->name); if (*view->ref) { wprintw(window, " %s", view->ref); } if (!view_has_flags(view, VIEW_CUSTOM_STATUS) && view_has_line(view, line) && line->lineno) { wprintw(window, " - %s %d of %zd", view->ops->type, line->lineno, MAX(line->lineno, view->pipe ? update_increment * (size_t) ((view->lines - view->custom_lines) / update_increment) : view->lines - view->custom_lines)); } if (view->pipe) { time_t secs = time(NULL) - view->start_time; /* Three git seconds are a long time ... */ if (secs > 2) wprintw(window, " loading %lds", secs); } view_lines = view->pos.offset + view->height; lines = view->lines ? MIN(view_lines, view->lines) * 100 / view->lines : 0; mvwprintw(window, 0, view->width - count_digits(lines) - 1, "%d%%", lines); wnoutrefresh(window); } /* * View opening */ void split_view(struct view *prev, struct view *view) { display[1] = view; current_view = opt_focus_child ? 1 : 0; view->parent = prev; resize_display(); if (prev->pos.lineno - prev->pos.offset >= prev->height) { /* Take the title line into account. */ int lines = prev->pos.lineno - prev->pos.offset - prev->height + 1; /* Scroll the view that was split if the current line is * outside the new limited view. */ do_scroll_view(prev, lines); } if (view != prev && view_is_displayed(prev)) { /* "Blur" the previous view. */ update_view_title(prev); } if (view_has_flags(prev, VIEW_FLEX_WIDTH)) load_view(prev, NULL, OPEN_RELOAD); } void maximize_view(struct view *view, bool redraw) { memset(display, 0, sizeof(display)); current_view = 0; display[current_view] = view; resize_display(); if (redraw) { redraw_display(false); report_clear(); if (view_has_flags(view, VIEW_FLEX_WIDTH)) load_view(view, NULL, OPEN_RELOAD); } } void load_view(struct view *view, struct view *prev, enum open_flags flags) { bool refresh = !view_no_refresh(view, flags); /* When prev == view it means this is the first loaded view. */ if (prev && view != prev) { view->prev = prev; } if (!refresh && view_can_refresh(view) && watch_update_single(&view->watch, WATCH_EVENT_SWITCH_VIEW)) { refresh = watch_dirty(&view->watch); if (refresh) flags |= OPEN_REFRESH; } if (refresh) { enum status_code code; if (view->pipe) end_update(view, true); if (view->ops->private_size) { if (!view->private) { view->private = calloc(1, view->ops->private_size); } else { if (view->ops->done) view->ops->done(view); memset(view->private, 0, view->ops->private_size); } } code = view->ops->open(view, flags); if (code != SUCCESS) { report("%s", get_status_message(code)); return; } } if (prev) { bool split = !!(flags & OPEN_SPLIT); if (split) { split_view(prev, view); } else { maximize_view(view, false); } } restore_view_position(view); if (view->pipe && view->lines == 0) { /* Clear the old view and let the incremental updating refill * the screen. */ werase(view->win); /* Do not clear the position if it is the first view. */ if (view->prev && !(flags & (OPEN_RELOAD | OPEN_REFRESH))) clear_position(&view->prev_pos); report_clear(); } else if (view_is_displayed(view)) { redraw_view(view); report_clear(); } } #define refresh_view(view) load_view(view, NULL, OPEN_REFRESH) #define reload_view(view) load_view(view, NULL, OPEN_RELOAD) void open_view(struct view *prev, struct view *view, enum open_flags flags) { bool reload = !!(flags & (OPEN_RELOAD | OPEN_PREPARED)); int nviews = displayed_views(); assert(flags ^ OPEN_REFRESH); if (view == prev && nviews == 1 && !reload) { report("Already in %s view", view->name); return; } if (!view_has_flags(view, VIEW_NO_GIT_DIR) && !repo.git_dir[0]) { report("The %s view is disabled in pager mode", view->name); return; } if (!view->keymap) view->keymap = get_keymap(view->name, strlen(view->name)); load_view(view, prev ? prev : view, flags); } void open_argv(struct view *prev, struct view *view, const char *argv[], const char *dir, enum open_flags flags) { if (view->pipe) end_update(view, true); view->dir = dir; if (!argv_copy(&view->argv, argv)) { report("Failed to open %s view: %s", view->name, io_strerror(&view->io)); } else { open_view(prev, view, flags | OPEN_PREPARED); } } /* * Various utilities. */ static struct view *sorting_view; #define apply_comparator(cmp, o1, o2) \ (!(o1) || !(o2)) ? !!(o2) - !!(o1) : cmp(o1, o2) #define number_compare(size1, size2) (*(size1) - *(size2)) #define mode_is_dir(mode) ((mode) && S_ISDIR(*(mode))) static int compare_view_column(enum view_column_type column, bool use_file_mode, const struct line *line1, struct view_column_data *column_data1, const struct line *line2, struct view_column_data *column_data2) { switch (column) { case VIEW_COLUMN_AUTHOR: return apply_comparator(ident_compare, column_data1->author, column_data2->author); case VIEW_COLUMN_DATE: return apply_comparator(timecmp, column_data1->date, column_data2->date); case VIEW_COLUMN_ID: if (column_data1->reflog && column_data2->reflog) return apply_comparator(strcmp, column_data1->reflog, column_data2->reflog); return apply_comparator(strcmp, column_data1->id, column_data2->id); case VIEW_COLUMN_FILE_NAME: if (use_file_mode && mode_is_dir(column_data1->mode) != mode_is_dir(column_data2->mode)) return mode_is_dir(column_data1->mode) ? -1 : 1; return apply_comparator(strcmp, column_data1->file_name, column_data2->file_name); case VIEW_COLUMN_FILE_SIZE: return apply_comparator(number_compare, column_data1->file_size, column_data2->file_size); case VIEW_COLUMN_LINE_NUMBER: return line1->lineno - line2->lineno; case VIEW_COLUMN_MODE: return apply_comparator(number_compare, column_data1->mode, column_data2->mode); case VIEW_COLUMN_REF: return apply_comparator(ref_compare, column_data1->ref, column_data2->ref); case VIEW_COLUMN_COMMIT_TITLE: return apply_comparator(strcmp, column_data1->commit_title, column_data2->commit_title); case VIEW_COLUMN_SECTION: return apply_comparator(strcmp, column_data1->section->opt.section.text, column_data2->section->opt.section.text); case VIEW_COLUMN_STATUS: return apply_comparator(number_compare, column_data1->status, column_data2->status); case VIEW_COLUMN_TEXT: if (column_data1->box && column_data2->box) return apply_comparator(strcmp, column_data1->box->text, column_data2->box->text); return apply_comparator(strcmp, column_data1->text, column_data2->text); } return 0; } static enum view_column_type view_column_order[] = { VIEW_COLUMN_FILE_NAME, VIEW_COLUMN_STATUS, VIEW_COLUMN_MODE, VIEW_COLUMN_FILE_SIZE, VIEW_COLUMN_DATE, VIEW_COLUMN_AUTHOR, VIEW_COLUMN_COMMIT_TITLE, VIEW_COLUMN_LINE_NUMBER, VIEW_COLUMN_SECTION, VIEW_COLUMN_TEXT, VIEW_COLUMN_REF, VIEW_COLUMN_ID, }; static int sort_view_compare(const void *l1, const void *l2) { const struct line *line1 = l1; const struct line *line2 = l2; struct view_column_data column_data1 = {0}; struct view_column_data column_data2 = {0}; struct sort_state *sort = &sorting_view->sort; enum view_column_type column = get_sort_field(sorting_view); int cmp; int i; if (!sorting_view->ops->get_column_data(sorting_view, line1, &column_data1)) return -1; else if (!sorting_view->ops->get_column_data(sorting_view, line2, &column_data2)) return 1; cmp = compare_view_column(column, true, line1, &column_data1, line2, &column_data2); /* Ensure stable sorting by ordering by the other * columns if the selected column values are equal. */ for (i = 0; !cmp && i < ARRAY_SIZE(view_column_order); i++) if (column != view_column_order[i]) cmp = compare_view_column(view_column_order[i], false, line1, &column_data1, line2, &column_data2); return sort->reverse ? -cmp : cmp; } void resort_view(struct view *view, bool renumber) { sorting_view = view; qsort(view->line, view->lines, sizeof(*view->line), sort_view_compare); if (renumber) { size_t i, lineno; for (i = 0, lineno = 1; i < view->lines; i++) if (view->line[i].lineno) view->line[i].lineno = lineno++; } } void sort_view(struct view *view, bool change_field) { struct sort_state *state = &view->sort; if (change_field) { while (true) { state->current = state->current->next ? state->current->next : view->columns; if (get_sort_field(view) == VIEW_COLUMN_ID && !state->current->opt.id.display) continue; break; } } else { state->reverse = !state->reverse; } resort_view(view, false); } static const char * view_column_text(struct view *view, struct view_column_data *column_data, struct view_column *column) { const char *text = ""; switch (column->type) { case VIEW_COLUMN_AUTHOR: if (column_data->author) text = mkauthor(column_data->author, column->opt.author.width, column->opt.author.display); break; case VIEW_COLUMN_COMMIT_TITLE: text = column_data->commit_title; break; case VIEW_COLUMN_DATE: if (column_data->date) text = mkdate(column_data->date, column->opt.date.display, column->opt.date.local, column->opt.date.format); break; case VIEW_COLUMN_REF: if (column_data->ref) text = column_data->ref->name; break; case VIEW_COLUMN_FILE_NAME: if (column_data->file_name) text = column_data->file_name; break; case VIEW_COLUMN_FILE_SIZE: if (column_data->file_size) text = mkfilesize(*column_data->file_size, column->opt.file_size.display); break; case VIEW_COLUMN_ID: if (column->opt.id.display) text = column_data->reflog ? column_data->reflog : column_data->id; break; case VIEW_COLUMN_LINE_NUMBER: break; case VIEW_COLUMN_MODE: if (column_data->mode) text = mkmode(*column_data->mode); break; case VIEW_COLUMN_STATUS: if (column_data->status) text = mkstatus(*column_data->status, column->opt.status.display); break; case VIEW_COLUMN_SECTION: text = column_data->section->opt.section.text; break; case VIEW_COLUMN_TEXT: text = column_data->text; break; } return text ? text : ""; } static bool grep_refs(struct view *view, struct view_column *column, const struct ref *ref) { regmatch_t pmatch; for (; ref; ref = ref->next) { if (!regexec(view->regex, ref->name, 1, &pmatch, 0)) return true; } return false; } bool view_column_grep(struct view *view, struct line *line) { struct view_column_data column_data = {0}; bool ok = view->ops->get_column_data(view, line, &column_data); struct view_column *column; if (!ok) return false; for (column = view->columns; column; column = column->next) { const char *text[] = { view_column_text(view, &column_data, column), NULL }; if (grep_text(view, text)) return true; if (column->type == VIEW_COLUMN_COMMIT_TITLE && column->opt.commit_title.refs && grep_refs(view, column, column_data.refs)) return true; } return false; } bool view_column_info_changed(struct view *view, bool update) { struct view_column *column; bool changed = false; for (column = view->columns; column; column = column->next) { if (memcmp(&column->prev_opt, &column->opt, sizeof(column->opt))) { if (!update) return true; column->prev_opt = column->opt; changed = true; } } return changed; } void view_column_reset(struct view *view) { struct view_column *column; view_column_info_changed(view, true); for (column = view->columns; column; column = column->next) column->width = 0; } static enum status_code parse_view_column_config_expr(char **pos, const char **name, const char **value, bool first) { size_t len = strcspn(*pos, ","); size_t optlen; if (strlen(*pos) > len) (*pos)[len] = 0; optlen = strcspn(*pos, ":="); if (first) { *name = "display"; if (optlen == len) { *value = len ? *pos : "yes"; *pos += len + 1; return SUCCESS; } /* Fake boolean enum value. */ *value = "yes"; return SUCCESS; } *name = *pos; if (optlen == len) *value = "yes"; else *value = *pos + optlen + 1; (*pos)[optlen] = 0; *pos += len + 1; return SUCCESS; } static enum status_code parse_view_column_option(struct view_column *column, const char *opt_name, const char *opt_value) { #define DEFINE_COLUMN_OPTION_INFO(name, type, flags) \ { #name, STRING_SIZE(#name), #type, &opt->name, flags }, #define DEFINE_COLUMN_OPTIONS_PARSE(name, id, options) \ if (column->type == VIEW_COLUMN_##id) { \ struct name##_options *opt = &column->opt.name; \ struct option_info info[] = { \ options(DEFINE_COLUMN_OPTION_INFO) \ }; \ struct option_info *option = find_option_info(info, ARRAY_SIZE(info), "", opt_name); \ if (!option) \ return error("Unknown option `%s' for column %s", opt_name, \ view_column_name(VIEW_COLUMN_##id)); \ return parse_option(option, #name, opt_value); \ } COLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_PARSE); return error("Unknown view column option: %s", opt_name); } static enum status_code parse_view_column_config_exprs(struct view_column *column, const char *arg) { char buf[SIZEOF_STR] = ""; char *pos, *end; bool first = true; enum status_code code = SUCCESS; string_ncopy(buf, arg, strlen(arg)); for (pos = buf, end = pos + strlen(pos); code == SUCCESS && pos <= end; first = false) { const char *name = NULL; const char *value = NULL; code = parse_view_column_config_expr(&pos, &name, &value, first); if (code == SUCCESS) code = parse_view_column_option(column, name, value); } return code; } static enum status_code parse_view_column_type(struct view_column *column, const char **arg) { enum view_column_type type; size_t typelen = strcspn(*arg, ":,"); for (type = 0; type < view_column_type_map->size; type++) if (enum_equals(view_column_type_map->entries[type], *arg, typelen)) { *arg += typelen + !!(*arg)[typelen]; column->type = type; return SUCCESS; } return error("Failed to parse view column type: %.*s", (int) typelen, *arg); } static struct view * find_view(const char *view_name) { struct view *view; int i; foreach_view(view, i) if (!strncmp(view_name, view->name, strlen(view->name))) return view; return NULL; } enum status_code parse_view_column_config(const char *view_name, enum view_column_type type, const char *option_name, const char *argv[]) { struct view_column *column; struct view *view = find_view(view_name); if (!view) return error("Unknown view: %s", view_name); if (!(view->ops->column_bits & (1 << type))) return error("The %s view does not support %s column", view->name, view_column_name(type)); column = get_view_column(view, type); if (!column) return error("The %s view does not have a %s column configured", view->name, view_column_name(type)); if (option_name) return parse_view_column_option(column, option_name, argv[0]); return parse_view_column_config_exprs(column, argv[0]); } enum status_code parse_view_config(struct view_column **column_ref, const char *view_name, const char *argv[]) { enum status_code code = SUCCESS; size_t size = argv_size(argv); struct view_column *columns; struct view_column *column; struct view *view = find_view(view_name); int i; if (!view) return error("Unknown view: %s", view_name); columns = calloc(size, sizeof(*columns)); if (!columns) return ERROR_OUT_OF_MEMORY; for (i = 0, column = NULL; code == SUCCESS && i < size; i++) { const char *arg = argv[i]; if (column) column->next = &columns[i]; column = &columns[i]; code = parse_view_column_type(column, &arg); if (code != SUCCESS) break; if (!(view->ops->column_bits & (1 << column->type))) return error("The %s view does not support %s column", view->name, view_column_name(column->type)); if ((column->type == VIEW_COLUMN_TEXT || column->type == VIEW_COLUMN_COMMIT_TITLE) && i + 1 < size) return error("The %s column must always be last", view_column_name(column->type)); code = parse_view_column_config_exprs(column, arg); column->prev_opt = column->opt; } if (code == SUCCESS) { free(view->columns); view->columns = columns; view->sort.current = view->columns; *column_ref = columns; } else { free(columns); } return code; } static enum status_code format_view_column_options(struct option_info options[], size_t options_size, char buf[], size_t bufsize) { char name[SIZEOF_STR]; char value[SIZEOF_STR]; size_t bufpos = 0; const char *sep = ":"; int i; buf[0] = 0; for (i = 0; i < options_size; i++) { struct option_info *option = &options[i]; const char *assign = "="; if (!enum_name_copy(name, sizeof(name), option->name) || !format_option_value(option, value, sizeof(value))) return error("No space left in buffer"); if (!strcmp(name, "display")) { name[0] = 0; assign = ""; } if (!strcmp(option->type, "bool") && !strcmp(value, "yes")) { if (!*name) { sep = ":yes,"; continue; } /* For non-display boolean options 'yes' is implied. */ #if 0 value[0] = 0; assign = ""; #endif } if (!strcmp(option->type, "int") && !strcmp(value, "0")) continue; if (!string_nformat(buf, bufsize, &bufpos, "%s%s%s%s", sep, name, assign, value)) return error("No space left in buffer"); sep = ","; } return SUCCESS; } static enum status_code format_view_column(struct view_column *column, char buf[], size_t bufsize) { #define FORMAT_COLUMN_OPTION_INFO(name, type, flags) \ { #name, STRING_SIZE(#name), #type, &opt->name, flags }, #define FORMAT_COLUMN_OPTIONS_PARSE(col_name, id, options) \ if (column->type == VIEW_COLUMN_##id) { \ struct col_name##_options *opt = &column->opt.col_name; \ struct option_info info[] = { \ options(FORMAT_COLUMN_OPTION_INFO) \ }; \ \ return format_view_column_options(info, ARRAY_SIZE(info), buf, bufsize); \ } COLUMN_OPTIONS(FORMAT_COLUMN_OPTIONS_PARSE); return error("Unknown view column type: %d", column->type); } enum status_code format_view_config(struct view_column *column, char buf[], size_t bufsize) { const struct enum_map *map = view_column_type_map; const char *sep = ""; size_t bufpos = 0; char type[SIZEOF_STR]; char value[SIZEOF_STR]; for (; column; column = column->next) { enum status_code code = format_view_column(column, value, sizeof(value)); if (code != SUCCESS) return code; if (!enum_name_copy(type, sizeof(type), map->entries[column->type].name) || !string_nformat(buf, bufsize, &bufpos, "%s%s%s", sep, type, value)) return error("No space left in buffer"); sep = " "; } return SUCCESS; } struct view_column * get_view_column(struct view *view, enum view_column_type type) { struct view_column *column; for (column = view->columns; column; column = column->next) if (column->type == type) return column; return NULL; } bool view_column_info_update(struct view *view, struct line *line) { struct view_column_data column_data = {0}; struct view_column *column; bool changed = false; if (!view->ops->get_column_data(view, line, &column_data)) return false; for (column = view->columns; column; column = column->next) { const char *text = view_column_text(view, &column_data, column); int width = 0; int maxwidth = 0; switch (column->type) { case VIEW_COLUMN_AUTHOR: width = column->opt.author.width; maxwidth = width == 0 ? column->opt.author.maxwidth : 0; break; case VIEW_COLUMN_COMMIT_TITLE: break; case VIEW_COLUMN_DATE: width = column->opt.date.width; break; case VIEW_COLUMN_FILE_NAME: width = column->opt.file_name.width; maxwidth = width == 0 ? column->opt.file_name.maxwidth : 0; break; case VIEW_COLUMN_FILE_SIZE: width = column->opt.file_size.width; break; case VIEW_COLUMN_ID: width = column->opt.id.width; if (!width) width = opt_id_width; if (!column_data.reflog && !width) width = 7; break; case VIEW_COLUMN_LINE_NUMBER: width = column->opt.line_number.width; if (!width) { if (column_data.line_number) width = count_digits(*column_data.line_number); else width = count_digits(view->lines); } if (width < 3) width = 3; break; case VIEW_COLUMN_MODE: width = column->opt.mode.width; break; case VIEW_COLUMN_REF: width = column->opt.ref.width; maxwidth = width == 0 ? column->opt.ref.maxwidth : 0; break; case VIEW_COLUMN_SECTION: break; case VIEW_COLUMN_STATUS: break; case VIEW_COLUMN_TEXT: break; } if (*text && !width) width = utf8_width(text); if ((maxwidth > 0) && (width > maxwidth)) width = maxwidth; if (width > column->width) { column->width = width; changed = true; } } if (changed) view->force_redraw = true; return changed; } struct line * find_line_by_type(struct view *view, struct line *line, enum line_type type, int direction) { for (; view_has_line(view, line); line += direction) if (line->type == type) return line; return NULL; } /* * Line utilities. */ DEFINE_ALLOCATOR(realloc_lines, struct line, 256) static inline char * box_text_offset(struct box *box, size_t cells) { return (char *) &box->cell[cells]; } void box_text_copy(struct box *box, size_t cells, const char *src, size_t srclen) { char *dst = box_text_offset(box, cells); box->text = dst; strncpy(dst, src, srclen); } struct line * add_line_at(struct view *view, unsigned long pos, const void *data, enum line_type type, size_t data_size, bool custom) { struct line *line; unsigned long lineno; if (!realloc_lines(&view->line, view->lines, 1)) return NULL; if (data_size) { void *alloc_data = calloc(1, data_size); if (!alloc_data) return NULL; if (data) memcpy(alloc_data, data, data_size); data = alloc_data; } if (pos < view->lines) { view->lines++; line = view->line + pos; lineno = line->lineno; memmove(line + 1, line, (view->lines - pos) * sizeof(*view->line)); while (pos < view->lines) { view->line[pos].lineno++; view->line[pos++].dirty = 1; } } else { line = &view->line[view->lines++]; lineno = view->lines - view->custom_lines; } memset(line, 0, sizeof(*line)); line->type = type; line->data = (void *) data; line->dirty = 1; if (custom) view->custom_lines++; else line->lineno = lineno; return line; } struct line * add_line(struct view *view, const void *data, enum line_type type, size_t data_size, bool custom) { return add_line_at(view, view->lines, data, type, data_size, custom); } struct line * add_line_alloc_(struct view *view, void **ptr, enum line_type type, size_t data_size, bool custom) { struct line *line = add_line(view, NULL, type, data_size, custom); if (line) *ptr = line->data; return line; } struct line * add_line_nodata(struct view *view, enum line_type type) { return add_line(view, NULL, type, 0, false); } struct line * add_line_text_at_(struct view *view, unsigned long pos, const char *text, size_t textlen, enum line_type type, size_t cells, bool custom) { struct box *box; struct line *line = add_line_at(view, pos, NULL, type, box_sizeof(NULL, cells, textlen), custom); if (!line) return NULL; box = line->data; box->cell[box->cells].length = textlen; box->cell[box->cells++].type = type; box_text_copy(box, cells, text, textlen); if (view->ops->column_bits) view_column_info_update(view, line); return line; } struct line * add_line_text_at(struct view *view, unsigned long pos, const char *text, enum line_type type, size_t cells) { return add_line_text_at_(view, pos, text, strlen(text), type, cells, false); } struct line * add_line_text(struct view *view, const char *text, enum line_type type) { return add_line_text_at(view, view->lines, text, type, 1); } struct line * PRINTF_LIKE(3, 4) add_line_format(struct view *view, enum line_type type, const char *fmt, ...) { char buf[SIZEOF_STR]; int retval; FORMAT_BUFFER(buf, sizeof(buf), fmt, retval, false); return retval >= 0 ? add_line_text(view, buf, type) : NULL; } bool append_line_format(struct view *view, struct line *line, const char *fmt, ...) { struct box *box = line->data; size_t textlen = box_text_length(box); int fmtlen, retval; va_list args; char *text; va_start(args, fmt); fmtlen = vsnprintf(NULL, 0, fmt, args); va_end(args); if (fmtlen <= 0) return false; box = realloc(box, box_sizeof(box, 0, fmtlen)); if (!box) return false; box->text = text = box_text_offset(box, box->cells); FORMAT_BUFFER(text + textlen, fmtlen + 1, fmt, retval, false); if (retval < 0) text[textlen] = 0; box->cell[box->cells - 1].length += fmtlen; line->data = box; line->dirty = true; if (view->ops->column_bits) view_column_info_update(view, line); return true; } /* * Global view state. */ /* Included last to not pollute the rest of the file. */ #include "tig/main.h" #include "tig/diff.h" #include "tig/log.h" #include "tig/tree.h" #include "tig/blob.h" #include "tig/blame.h" #include "tig/refs.h" #include "tig/status.h" #include "tig/stage.h" #include "tig/stash.h" #include "tig/grep.h" #include "tig/pager.h" #include "tig/help.h" static struct view *views[] = { #define VIEW_DATA(id, name) &name##_view VIEW_INFO(VIEW_DATA) }; struct view * get_view(int i) { return 0 <= i && i < ARRAY_SIZE(views) ? views[i] : NULL; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/src/watch.c000066400000000000000000000156301332650737300143600ustar00rootroot00000000000000/* Copyright (c) 2006-2015 Jonas Fonseca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "tig/tig.h" #include "tig/repo.h" #include "tig/refdb.h" #include "tig/io.h" #include "tig/options.h" #include "tig/watch.h" static struct watch *watches; void watch_register(struct watch *watch, enum watch_trigger triggers) { watch_unregister(watch); watch->next = watches; watches = watch; watch->triggers = triggers; watch->changed = WATCH_NONE; watch->state = WATCH_NONE; } void watch_unregister(struct watch *watch) { struct watch *pos, *prev = NULL; for (pos = watches; pos; prev = pos, pos = pos->next) { if (watch != pos) continue; if (!prev) watches = watch->next; else prev->next = watch->next; break; } memset(watch, 0, sizeof(*watch)); } struct watch_handler { enum watch_trigger (*check)(struct watch_handler *handler, enum watch_event event, enum watch_trigger check); enum watch_trigger triggers; time_t last_modified; }; static bool check_file_mtime(time_t *last_modified, const char *path_fmt, ...) { char path[SIZEOF_STR]; struct stat stat; int retval; FORMAT_BUFFER(path, sizeof(path), path_fmt, retval, false); if (retval < 0 || lstat(path, &stat) < 0 || stat.st_mtime <= *last_modified) return false; *last_modified = stat.st_mtime; return true; } static enum watch_trigger watch_head_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check) { const struct ref *head; if (check_file_mtime(&handler->last_modified, "%s/HEAD", repo.git_dir)) return WATCH_HEAD; // FIXME: check branch if ((head = get_ref_head()) && check_file_mtime(&handler->last_modified, "%s/refs/heads/%s", repo.git_dir, head->name)) return WATCH_HEAD; return WATCH_NONE; } static enum watch_trigger watch_stash_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check) { if (check_file_mtime(&handler->last_modified, "%s/refs/stash", repo.git_dir)) return WATCH_STASH; return WATCH_NONE; } static enum watch_trigger watch_index_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check) { enum watch_trigger changed = WATCH_NONE; struct index_diff diff; if (event == WATCH_EVENT_AFTER_COMMAND) return check_file_mtime(&handler->last_modified, "%s/index", repo.git_dir) ? check : WATCH_NONE; if (!check_file_mtime(&handler->last_modified, "%s/index", repo.git_dir) || event == WATCH_EVENT_SWITCH_VIEW || !index_diff(&diff, false, false)) return WATCH_NONE; if (check & WATCH_INDEX_STAGED) { if (diff.staged) changed |= WATCH_INDEX_STAGED_YES; else changed |= WATCH_INDEX_STAGED_NO; } if (check & WATCH_INDEX_UNSTAGED) { if (diff.unstaged) changed |= WATCH_INDEX_UNSTAGED_YES; else changed |= WATCH_INDEX_UNSTAGED_NO; } if (changed) handler->last_modified = time(NULL); return changed; } static enum watch_trigger watch_refs_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check) { if (event == WATCH_EVENT_AFTER_COMMAND) load_refs(true); return WATCH_NONE; } static struct watch_handler watch_handlers[] = { { watch_index_handler, WATCH_INDEX }, { watch_head_handler, WATCH_HEAD }, { watch_stash_handler, WATCH_STASH }, { watch_refs_handler, WATCH_HEAD | WATCH_REFS }, }; static bool watch_no_refresh(enum watch_event event) { return opt_refresh_mode == REFRESH_MODE_MANUAL || (opt_refresh_mode == REFRESH_MODE_AFTER_COMMAND && event != WATCH_EVENT_AFTER_COMMAND); } static void watch_apply_changes(struct watch *source, enum watch_event event, enum watch_trigger changed) { struct watch *watch; if (watch_no_refresh(event)) return; for (watch = watches; watch; watch = watch->next) { enum watch_trigger triggers = changed & watch->triggers; if (source == watch) { source->state |= triggers; continue; } if (event == WATCH_EVENT_AFTER_COMMAND) { watch->state = WATCH_NONE; triggers = watch->triggers; } watch->changed |= triggers; } } void watch_apply(struct watch *source, enum watch_trigger changed) { watch_apply_changes(source, WATCH_EVENT_LOAD, changed); } static enum watch_trigger watch_update_event(enum watch_event event, enum watch_trigger trigger, enum watch_trigger changed) { time_t timestamp = 0; int i; if (watch_no_refresh(event)) return WATCH_NONE; if (event == WATCH_EVENT_AFTER_COMMAND) timestamp = time(NULL); for (i = 0; i < ARRAY_SIZE(watch_handlers); i++) { struct watch_handler *handler = &watch_handlers[i]; if (event == WATCH_EVENT_AFTER_COMMAND) { changed = handler->triggers; handler->last_modified = timestamp; continue; } if (*repo.git_dir && (trigger & handler->triggers) && (changed | handler->triggers) != changed) changed |= handler->check(handler, event, trigger); } if (changed) watch_apply_changes(NULL, event, changed); return changed; } #define watch_trigger_unmask(triggers, set) ((triggers) & ~(set)) static inline enum watch_trigger watch_unchanged_triggers(struct watch *watch) { return watch_trigger_unmask(watch->triggers, watch->changed); } enum watch_trigger watch_update_single(struct watch *watch, enum watch_event event) { enum watch_trigger trigger = watch_unchanged_triggers(watch); return watch_update_event(event, trigger, watch->changed); } enum watch_trigger watch_update(enum watch_event event) { enum watch_trigger trigger = WATCH_NONE; struct watch *watch; /* Collect triggers to check. Skkipping watches that are already * marked dirty to avoid unnecessary checks. */ for (watch = watches; watch; watch = watch->next) trigger |= watch_unchanged_triggers(watch); return watch_update_event(event, trigger, WATCH_NONE); } int watch_periodic(int interval) { static time_t last_update; int delay = -1; if (watches && interval > 0) { time_t now = time(NULL); if (!last_update) last_update = now; if (last_update + interval <= now) { watch_update(WATCH_EVENT_PERIODIC); last_update = now; } delay = (now - last_update + interval) * 1000; } return delay; } bool watch_dirty(struct watch *watch) { enum watch_trigger old_index = watch->state & WATCH_INDEX; enum watch_trigger new_index = watch->changed & WATCH_INDEX; enum watch_trigger index = watch_trigger_unmask(new_index, old_index); enum watch_trigger other = watch_trigger_unmask(watch->changed, WATCH_INDEX); bool dirty = !!(index | other); watch->changed = WATCH_NONE; return dirty; } /* vim: set ts=8 sw=8 noexpandtab: */ tig-2.4.1/test/000077500000000000000000000000001332650737300132715ustar00rootroot00000000000000tig-2.4.1/test/API.adoc000066400000000000000000000023221332650737300145310ustar00rootroot00000000000000Testing API ----------- file(filename, [content, ...]) [< content]:: tig_script(name, content, [content, ...]):: steps(content, [content, ...]):: stdin([content, ...]) [< content]:: tigrc([content, ...]) [< content]:: gitconfig(content, ...):: in_work_dir(command, [args, ...]):: assert_equals(filename, [whitespace, note, ...]) < expected:: assert_not_exists(filename):: assert_vars(count):: test_todo([note, ...]):: test_timeout(seconds):: require_git_version(version, [note, ...]):: test_require(git-worktree, address-sanitizer, diff-highlight, readline):: test_setup():: test_tig():: Set up a controlled environment and report the test result. Input to be processed via stdin is passed and stderr is captured and can be used for later assertions. Example -------------------------------------------------------------------------------- test_tig show 1a2b3c4d5e6f -------------------------------------------------------------------------------- test_graph() < expected:: test_case([--before=, --after=, --script=, --args=, --cwd=, --tigrc=, --assert-stderr=, --todo=, --subshell=, --timeout=]) < expected:: run_test_cases():: tig-2.4.1/test/README.adoc000066400000000000000000000047701332650737300150660ustar00rootroot00000000000000Test Overview ============= All tests can be run with `make test`. This will run all scripts that end with `-test` in the `test` folder and summarize the test results using the script `test/tools/show-results.sh`. To run individual tests, use `make ` e.g. `make test/tigrc/parse-test`. Alternatively, tests can be run directly via the test scripts as long as `PATH` is set to include the directories `src/` and `test/tools`. The latter directory is where the test helper libraries are located, the most important of which is `libtest.sh`. The test suite requires `stty -tostop` to be set in the running terminal, which is typically the default. Options ------- Tests can be configured by setting the `TEST_OPTS` environment variable. The variable should contain a space-separated list of options. The following options are supported: verbose:: Whether to print individual test results even when all assertions passed. The default is to not show results for passed tests. no-indent:: Do not indent test output. This is automatically set depending on whether `V=1` was passed to `make` to show verbose output. debugger[=::: Only run test files or cases matching a shell-style glob filter. A colon separates the file glob from the case glob. No colon, or trailing colon, is equivalent to trailing `:*` (all cases). Leading colon is equivalent to leading `*:` (all files). The file portion is matched against a path fragment from the project root. Example: -------------------------------------------------------------------------------- $ TEST_OPTS='filter=*:*default' make test/tigrc/width-test -------------------------------------------------------------------------------- :: This option is a convenience for development against specific tests. Test files and test cases are filtered, but not assertions. Thus some assertions are expected to fail in the presence of a filter. Testing output originating from `make` is also not filtered. trace:: Show trace information. todos:: Run TODO tests, which are otherwise skipped. valgrind:: Run tests and verify memory access with Valgrind. timeout=:: Set the default timeout for each invocation of tig under the test harness. The default is 10 if unset. 0 means "no timeout". Individual tests may override the value. tig-2.4.1/test/blame/000077500000000000000000000000001332650737300143515ustar00rootroot00000000000000tig-2.4.1/test/blame/default-test000077500000000000000000000165531332650737300167120ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh tigrc < AuthorDate: Tue Oct 29 18:46:52 2013 +0100 Commit: Sébastien Doeraene CommitDate: Tue Oct 29 18:46:52 2013 +0100 Update for new groupId and package structure of Scala.js. --- project/Build.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index 560bca1..1713681 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1,7 +1,7 @@ import sbt._ import Keys._ [diff] 74537d9b257954056d3caa19eb3837500aded883 - line 1 of 24 75% EOF assert_equals 'blame-with-diff-no-file-filter.screen' < AuthorDate: Tue Oct 29 18:46:52 2013 +0100 Commit: Sébastien Doeraene CommitDate: Tue Oct 29 18:46:52 2013 +0100 Update for new groupId and package structure of Scala.js. --- project/Build.scala | 2 +- project/build.sbt | 2 +- tracer/App.scala | 4 ++-- tracer/Engine.scala | 2 +- tracer/JSTypes.scala | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/project/Build.scala b/project/Build.scala index 560bca1..1713681 100644 --- a/project/Build.scala [diff] 74537d9b257954056d3caa19eb3837500aded883 - line 1 of 76 23% EOF assert_equals 'blame-parent-of-74537d9.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo index 65f914a..3aa4320 100644 --- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala +++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala @@ -15,7 +15,7 @@ object Benchmark { val benchmarks = js.Array[Benchmark]() val benchmarkApps = js.Array[BenchmarkApp]() - val global = js.Dynamic.global.asInstanceOf[js.Dictionary] + val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]] global("runScalaJSBenchmarks") = runBenchmarks _ global("initScalaJSBenchmarkApps") = initBenchmarkApps _ [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 100% EOF assert_equals 'diff-u4.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo index 65f914a..3aa4320 100644 --- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala +++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala @@ -14,9 +14,9 @@ import scala.scalajs.js object Benchmark { val benchmarks = js.Array[Benchmark]() val benchmarkApps = js.Array[BenchmarkApp]() - val global = js.Dynamic.global.asInstanceOf[js.Dictionary] + val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]] global("runScalaJSBenchmarks") = runBenchmarks _ global("initScalaJSBenchmarkApps") = initBenchmarkApps _ def add(benchmark: Benchmark) { [diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sca100% EOF assert_equals 'diff-u5.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo index 65f914a..3aa4320 100644 --- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala +++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala @@ -13,11 +13,11 @@ import scala.scalajs.js object Benchmark { val benchmarks = js.Array[Benchmark]() val benchmarkApps = js.Array[BenchmarkApp]() - val global = js.Dynamic.global.asInstanceOf[js.Dictionary] + val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]] global("runScalaJSBenchmarks") = runBenchmarks _ global("initScalaJSBenchmarkApps") = initBenchmarkApps _ def add(benchmark: Benchmark) { benchmarks.push(benchmark) [diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sca100% EOF assert_equals 'diff-u10.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo index 65f914a..3aa4320 100644 --- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala +++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala @@ -15,7 +15,7 @@ object Benchmark { val benchmarks = js.Array[Benchmark]() val benchmarkApps = js.Array[BenchmarkApp]() - val global = js.Dynamic.global.asInstanceOf[js.Dictionary] + val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]] global("runScalaJSBenchmarks") = runBenchmarks _ global("initScalaJSBenchmarkApps") = initBenchmarkApps _ [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 100% EOF tig-2.4.1/test/diff/diff-highlight-test000077500000000000000000000037161332650737300177700ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh in_work_dir create_repo_from_tgz "$base_dir/files/scala-js-benchmarks.tgz" file bin/diff-highlight < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Changed by diff-highlight --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo index 65f914a..3aa4320 100644 --- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala +++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala @@ -15,7 +15,7 @@ object Benchmark { val benchmarks = js.Array[Benchmark]() val benchmarkApps = js.Array[BenchmarkApp]() - val global = js.Dynamic.global.asInstanceOf[js.Dictionary] + val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]] global("runScalaJSBenchmarks") = runBenchmarks _ global("initScalaJSBenchmarkApps") = initBenchmarkApps _ [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 100% EOF test_case diff-highlight-custom \ --tigrc='set diff-highlight = wc' \ --args='show master^' \ < 2014-01-16 17:43 -0500 Jonas Fonseca ∙ Bump Scala.js version to 0.3-SNAPSHOT |AuthorDate: Sat Mar 1 17:26:01 2014 -0500 2014-01-16 17:39 -0500 Jonas Fonseca ∙ Integrate app code into the benchmark infrastru|Commit: Jonas Fonseca 2014-01-16 07:47 -0800 Jonas Fonseca â—─╮ Merge pull request #4 from phaller/patch-1 |CommitDate: Sat Mar 1 17:26:01 2014 -0500 2014-01-16 15:32 +0100 Philipp Haller │ ∙ Fix link to Dart benchmark harness | 2013-12-17 00:02 +0100 Jonas Fonseca ∙─╯ Update links to reflect project name change | WIP: Upgrade to 0.4-SNAPSHOT and DCE 2013-12-03 23:35 -0500 Jonas Fonseca ∙ Use Scala.js 0.2-SNAPSHOT |--- 2013-11-26 23:39 -0500 Jonas Fonseca ∙ Extract the benchmark list variable name; fix p| common/benchmark-runner.sh | 5 +++-- 2013-11-26 23:31 -0500 Jonas Fonseca ∙ Solve the easiest sudoku grid | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++------ 2013-11-26 23:22 -0500 Jonas Fonseca ∙ Disable phantomjs by default | common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala | 2 +- 2013-11-26 22:55 -0500 Jonas Fonseca ∙ Exclude Sudoku when running all benchmarks | common/start-benchmark.js | 9 +++++++-- 2013-11-26 22:52 -0500 Jonas Fonseca ∙ Fix reference setup to work for node | deltablue/exports.js | 13 ------------- 2013-11-26 22:03 -0500 Jonas Fonseca ∙ Move benchmark registration to Scala | .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala | 7 +++++++ 2013-11-26 20:13 -0500 Jonas Fonseca ∙ Rename projects to be grouped together in Eclip| project/Build.scala | 13 ++++--------- 2013-11-19 21:56 -0500 Jonas Fonseca ∙ sudoku: use iterator instead of Try() | project/build.sbt | 5 ++++- 2013-11-11 21:56 -0500 Jonas Fonseca ∙ Add verification of sudoku solutions | richards/exports.js | 13 ------------- 2013-11-11 21:50 -0500 Jonas Fonseca ∙ Use stream to halt when first sudoku solution h| .../src/main/scala/org/scalajs/benchmark/richards/Richards.scala | 3 +++ 2013-11-11 01:11 -0500 Jonas Fonseca ∙ Add initial version of sudoku benchmark | run.sh | 2 +- 2013-11-05 23:20 -0500 Jonas Fonseca ∙ Reformat code using Scala IDE | sudoku/exports.js | 13 ------------- 2013-11-05 20:41 -0500 Jonas Fonseca ∙ Update exports.js files to use new Scala.js cla| sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala | 2 ++ 2013-11-03 23:48 -0500 Jonas Fonseca ∙ Add support for PhantomJS | tracer/exports.js | 13 ------------- 2013-11-03 23:11 -0500 Jonas Fonseca ∙ Make the engine stubs file optional | tracer/index-dev.html | 2 +- 2013-11-03 22:44 -0500 Jonas Fonseca ∙ Refactor the benchmark shell code | tracer/index.html | 2 +- 2013-10-29 17:29 -0700 Jonas Fonseca â—─╮ Merge pull request #2 from sjrd/patch-2 | tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala | 3 +++ 2013-10-29 18:48 +0100 Sébastien Doeraene │ ∙ Remove workaround to support Node.js. | 17 files changed, 42 insertions(+), 76 deletions(-) 2013-10-29 18:46 +0100 Sébastien Doeraene │ ∙ Update for new groupId and package structure | [main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48 58%|[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367 7% EOF tig-2.4.1/test/diff/diff-stat-test000077500000000000000000000063171332650737300167740ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh export COLUMNS=181 steps ' :save-view view.data ' tigrc < Date: Sun Jul 2 15:01:24 2017 +0200 Diff stat examples --- added | 40 +++++++++++ remove | 124 -------------------------- updated | 14 +---- rename.from => rename.to | 0 dir/{rename.from => rename.to} | 0 .../truncated file name | 11 ++--- binary add | Bin 0 -> 1234 bytes binary update | Bin 1234 -> 2345 bytes binary copy | Bin binary del | Bin 16787 -> 0 bytes unmerged | Unmerged 42 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/file.c b/src/file.c ... EOF assert_equals 'view.data' <] line[ 2] type= selected=0 line[ 2] cells=1 text=[Date: Sun Jul 2 15:01:24 2017 +0200] line[ 3] type=default selected=0 line[ 3] cells=1 text=[] line[ 4] type=default selected=0 line[ 4] cells=1 text=[ Diff stat examples] line[ 5] type=diff-start selected=0 line[ 5] cells=1 text=[---] line[ 6] type=diff-stat selected=0 line[ 6] cells=3 text=[ added ][| 40 ][+++++++++++] line[ 7] type=diff-stat selected=0 line[ 7] cells=3 text=[ remove ][| 124 ][--------------------------] line[ 8] type=diff-stat selected=0 line[ 8] cells=4 text=[ updated ][| 14 ][+][----] line[ 9] type=diff-stat selected=0 line[ 9] cells=2 text=[ rename.from => rename.to ][| 0] line[ 10] type=diff-stat selected=0 line[ 10] cells=2 text=[ dir/{rename.from => rename.to} ][| 0] line[ 11] type=diff-stat selected=0 line[ 11] cells=4 text=[ .../truncated file name ][| 11 ][++][---] line[ 12] type=diff-stat selected=0 line[ 12] cells=7 text=[ binary add ][| ][Bin][ 0 ][->][ 1234 ][bytes] line[ 13] type=diff-stat selected=0 line[ 13] cells=7 text=[ binary update ][| ][Bin][ 1234 ][->][ 2345 ][bytes] line[ 14] type=diff-stat selected=0 line[ 14] cells=3 text=[ binary copy ][| ][Bin] line[ 15] type=diff-stat selected=0 line[ 15] cells=7 text=[ binary del ][| ][Bin][ 16787 ][->][ 0 ][bytes] line[ 16] type=diff-stat selected=0 line[ 16] cells=2 text=[ unmerged ][| Unmerged] line[ 17] type=default selected=0 line[ 17] cells=1 text=[ 42 file changed, 5 insertions(+), 2 deletions(-)] line[ 18] type=default selected=0 line[ 18] cells=1 text=[] line[ 19] type=diff-header selected=0 line[ 19] cells=1 text=[diff --git a/src/file.c b/src/file.c] line[ 20] type=default selected=0 line[ 20] cells=1 text=[...] EOF tig-2.4.1/test/diff/diff-stdin-test000077500000000000000000000053001332650737300171310ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh steps ' :save-display diff.screen ' git_init test_tig show < Date: Sun Jul 2 15:01:24 2017 +0200 graph: Optimize initial and merge calculation The initial and merge flags do not depend on any column-specific information, so calculate them only once. Signed-off-by: Sven Wegener --- src/graph-v2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/graph-v2.c b/src/graph-v2.c index 4cf3d9e..ced6838 100644 --- a/src/graph-v2.c +++ b/src/graph-v2.c @@ -683,6 +683,9 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas) struct graph_row *row = &graph->row; struct graph_row *next_row = &graph->next_row; struct graph_row *parents = &graph->parents; + int commits = commits_in_row(parents); + int initial = commits < 1; + int merge = commits > 1; int pos; for (pos = 0; pos < row->size; pos++) { @@ -692,8 +695,8 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas) symbol->commit = (pos == graph->position); symbol->boundary = (pos == graph->position && next_row->columns[pos].symbol.boundary); - symbol->initial = (commits_in_row(parents) < 1); - symbol->merge = (commits_in_row(parents) > 1); + symbol->initial = initial; + symbol->merge = merge; symbol->continued_down = continued_down(row, next_row, pos); symbol->continued_up = continued_down(prev_row, row, pos); EOF assert_equals 'diff.screen' < Date: Sun Jul 2 15:01:24 2017 +0200 graph: Optimize initial and merge calculation The initial and merge flags do not depend on any column-specific information, so calculate them only once. Signed-off-by: Sven Wegener --- src/graph-v2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/graph-v2.c b/src/graph-v2.c index 4cf3d9e..ced6838 100644 --- a/src/graph-v2.c +++ b/src/graph-v2.c @@ -683,6 +683,9 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_ struct graph_row *row = &graph->row; struct graph_row *next_row = &graph->next_row; struct graph_row *parents = &graph->parents; + int commits = commits_in_row(parents); + int initial = commits < 1; + int merge = commits > 1; int pos; for (pos = 0; pos < row->size; pos++) { [diff] 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0 - line 1 of 39 71% EOF tig-2.4.1/test/diff/editor-test000077500000000000000000000266451332650737300164070ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh tigrc < | AuthorDate: Sat Mar 1 17:26:01 2014 -0500 5| Commit: Jonas Fonseca | CommitDate: Sat Mar 1 17:26:01 2014 -0500 | | WIP: Upgrade to 0.4-SNAPSHOT and DCE | --- 10| common/benchmark-runner.sh | 5 +++-- | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++---- | .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala | 2 +- | common/start-benchmark.js | 9 +++++++-- | deltablue/exports.js | 13 --------- 15| .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala | 7 +++++++ | project/Build.scala | 13 ++++----- | project/build.sbt | 5 ++++- | richards/exports.js | 13 --------- | .../scala/org/scalajs/benchmark/richards/Richards.scala | 3 +++ 20| run.sh | 2 +- | sudoku/exports.js | 13 --------- | .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala | 2 ++ | tracer/exports.js | 13 --------- | tracer/index-dev.html | 2 +- 25| tracer/index.html | 2 +- | .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala | 3 +++ | 17 files changed, 42 insertions(+), 76 deletions(-) | [diff] Press '' to jump to file diff - line 25 of 367 7% EOF # This settings doesn't seem to apply to `git-show` test_case mnemonic \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.mnemonicPrefix true' \ --after='git config diff.mnemonicPrefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git a/project/build.sbt b/project/build.sbt | index 87c2e66..122abd0 100644 | --- a/project/build.sbt 220| +++ b/project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case noprefix \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git project/build.sbt project/build.sbt | index 87c2e66..122abd0 100644 | --- project/build.sbt 220| +++ project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case default-conflict \ --before='setup-conflict.sh > config.setup' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF test_case noprefix-conflict \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF run_test_cases assert_equals 'editor.log' <>>>>>> conflict-branch +2 conflict-file c' +5 conflict-file >>>>>>> conflict-branch EOF tig-2.4.1/test/diff/maximized-navigation-test000077500000000000000000000054321332650737300212340ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh export LINES=12 steps ' :save-display split.screen :next :save-display split-after-next.screen :view-diff :save-display maximized.screen :next :save-display maximized-after-next.screen ' tigrc < AuthorDate: Sat Mar 1 17:26:01 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 17:26:01 2014 -0500 [diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367 1% EOF assert_equals 'split-after-next.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 25% EOF assert_equals 'maximized.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 41% EOF assert_equals 'maximized-after-next.screen' < AuthorDate: Sat Mar 1 15:59:02 2014 -0500 Commit: Jonas Fonseca CommitDate: Sat Mar 1 15:59:02 2014 -0500 Add type parameter for js.Dynamic --- common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) [diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 2 of 24 41% EOF tig-2.4.1/test/diff/start-on-line-test000077500000000000000000000030461332650737300176030ustar00rootroot00000000000000#!/bin/sh . libtest.sh . libgit.sh in_work_dir create_repo_from_tgz "$base_dir/files/scala-js-benchmarks.tgz" steps ' :save-display position.screen ' #test_tig show master~18 +42 test_tig show d92a308941e6ccb79cb02f96417cab7b67b998c2 +42 assert_equals 'position.screen' < ' setup_submodule_project() { create_repo_from_tgz "$base_dir/files/repo-two.tgz" git submodule update mkdir -p repo-two-a/src/subdir } test_exec_work_dir setup_submodule_project work_dir="$work_dir/repo-two-a/src/subdir" test_tig show 8cc26dd6e80e2fa7fa98d12f4670d8983bc83678 assert_equals 'diff.screen' < | AuthorDate: Thu Jun 4 16:19:40 2009 +0000 | Commit: Committer 5| CommitDate: Thu Jun 4 16:19:40 2009 +0000 | | [repo-two-a] Commit 3 | --- | include/api.h | 1 + 10| 1 file changed, 1 insertion(+) | | diff --git a/include/api.h b/include/api.h | index f2eb956..1da0f3f 100644 | --- a/include/api.h 15| +++ b/include/api.h | @@ -1 +1,2 @@ | include/api.h | +include/api.h [diff] Press '' to jump to file diff - line 9 of 18 100% EOF # The file is called include/api.h and contains its name on two lines assert_equals 'editor.log' < | AuthorDate: Sat Mar 1 17:26:01 2014 -0500 5| Commit: Jonas Fonseca | CommitDate: Sat Mar 1 17:26:01 2014 -0500 | | WIP: Upgrade to 0.4-SNAPSHOT and DCE | --- 10| common/benchmark-runner.sh | 5 +++-- | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++---- | .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala | 2 +- | common/start-benchmark.js | 9 +++++++-- | deltablue/exports.js | 13 --------- 15| .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala | 7 +++++++ | project/Build.scala | 13 ++++----- | project/build.sbt | 5 ++++- | richards/exports.js | 13 --------- | .../scala/org/scalajs/benchmark/richards/Richards.scala | 3 +++ 20| run.sh | 2 +- | sudoku/exports.js | 13 --------- | .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala | 2 ++ | tracer/exports.js | 13 --------- | tracer/index-dev.html | 2 +- 25| tracer/index.html | 2 +- | .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala | 3 +++ | 17 files changed, 42 insertions(+), 76 deletions(-) | [diff] Press '' to jump to file diff - line 26 of 367 7% EOF # This settings doesn't seem to apply to `git-show` test_case mnemonic \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.mnemonicPrefix true' \ --after='git config diff.mnemonicPrefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git a/project/build.sbt b/project/build.sbt | index 87c2e66..122abd0 100644 | --- a/project/build.sbt 220| +++ b/project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case noprefix \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git project/build.sbt project/build.sbt | index 87c2e66..122abd0 100644 | --- project/build.sbt 220| +++ project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case default-conflict \ --before='setup-conflict.sh > config.setup' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF test_case noprefix-conflict \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF run_test_cases assert_equals 'editor.log' <>>>>>> conflict-branch +2 conflict-file c' +5 conflict-file >>>>>>> conflict-branch EOF assert_equals 'exec-env' < | AuthorDate: Sat Mar 1 17:26:01 2014 -0500 5| Commit: Jonas Fonseca | CommitDate: Sat Mar 1 17:26:01 2014 -0500 | | WIP: Upgrade to 0.4-SNAPSHOT and DCE | --- 10| common/benchmark-runner.sh | 5 +++-- | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++---- | .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala | 2 +- | common/start-benchmark.js | 9 +++++++-- | deltablue/exports.js | 13 --------- 15| .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala | 7 +++++++ | project/Build.scala | 13 ++++----- | project/build.sbt | 5 ++++- | richards/exports.js | 13 --------- | .../scala/org/scalajs/benchmark/richards/Richards.scala | 3 +++ 20| run.sh | 2 +- | sudoku/exports.js | 13 --------- | .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala | 2 ++ | tracer/exports.js | 13 --------- | tracer/index-dev.html | 2 +- 25| tracer/index.html | 2 +- | .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala | 3 +++ | 17 files changed, 42 insertions(+), 76 deletions(-) | [diff] Press '' to jump to file diff - line 26 of 367 7% EOF # This settings doesn't seem to apply to `git-show` test_case mnemonic \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.mnemonicPrefix true' \ --after='git config diff.mnemonicPrefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git a/project/build.sbt b/project/build.sbt | index 87c2e66..122abd0 100644 | --- a/project/build.sbt 220| +++ b/project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case noprefix \ --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script="$script" << EOF | - ) | - | lazy val parent: Project = Project( 200| id = "parent", | base = file("."), | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build { | ) | 205| lazy val common = project("Common", defaultSettings) | - lazy val deltablue = project("DeltaBlue", benchmarkSettings).dependsOn(c | - lazy val richards = project("Richards", benchmarkSettings).dependsOn(com | - lazy val sudoku = project("Sudoku", benchmarkSettings).dependsOn(common) | - lazy val tracer = project("Tracer", benchmarkSettings).dependsOn(common) 210| + lazy val deltablue = project("DeltaBlue", defaultSettings).dependsOn(com | + lazy val richards = project("Richards", defaultSettings).dependsOn(commo | + lazy val sudoku = project("Sudoku", defaultSettings).dependsOn(common) | + lazy val tracer = project("Tracer", defaultSettings).dependsOn(common) | 215| def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project( | id = id.toLowerCase, | diff --git project/build.sbt project/build.sbt | index 87c2e66..122abd0 100644 | --- project/build.sbt 220| +++ project/build.sbt | @@ -1 +1,4 @@ | -addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0. | +resolvers += Resolver.url("scala-js-snapshots", | + url("http://repo.scala-js.org/repo/snapshots/"))(Resolver.ivyStylePatt [diff] Changes to 'project/build.sbt' - line 224 of 367 61% EOF test_case default-conflict \ --before='setup-conflict.sh > config.setup' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF test_case noprefix-conflict \ --before='git config diff.noprefix true' \ --after='git config diff.noprefix false' \ --script=' :view-diff :7 :edit :10 :exec !vim +%(lineno) %(file) ' << EOF 1| diff --cc conflict-file | index 86c5a05,b4c3de6..0000000 | --- a/conflict-file | +++ b/conflict-file 5| @@@ -1,1 -1,1 +1,5 @@@ | ++<<<<<<< HEAD | +c' | ++======= | + d' 10| ++>>>>>>> conflict-branch [stage] Unstaged changes to 'conflict-file' - line 10 of 10 100% EOF run_test_cases assert_equals 'editor.log' <>>>>>> conflict-branch +2 conflict-file c' +5 conflict-file >>>>>>> conflict-branch EOF assert_equals 'exec-env' < AuthorDate: Sat Mar 1 17:26:01 2014 -050 +0 Commit: Jonas Fonseca CommitDate: Sat Mar 1 17:26:01 2014 -050 +0 WIP: Upgrade to 0.4-SNAPSHOT and DCE --- .../benchmark-runner.sh | 5 ++- .../Benchmark.scala | 11 +++--- .../BenchmarkApp.scala | 2 +- common/start-benchmark.js | 9 ++++- deltablue/exports.js | 13 ------- .../DeltaBlue.scala | 7 ++++ project/Build.scala | 13 ++----- project/build.sbt | 5 ++- richards/exports.js | 13 ------- .../Richards.scala | 3 ++ run.sh | 2 +- sudoku/exports.js | 13 ------- .../sudoku/Sudoku.scala | 2 + tracer/exports.js | 13 ------- [diff] ee912870202200a0b9cf4fd86ba57245% EOF tig-2.4.1/test/files/000077500000000000000000000000001332650737300143735ustar00rootroot00000000000000tig-2.4.1/test/files/refs-repo.tgz000066400000000000000000000175151332650737300170340ustar00rootroot00000000000000‹*pyUí} |K×ÿiË´µ±ÒÖãBQOm“Ü<´f&*]“n#©UŠ{on*YÛ´IJƒ¯¯Ô‚‰y¸we Óm¨¦öd˜/F™}Í0›ÙïÜ´”(miãÿß÷¾_¯Ï«Isî9çžÏçóþ|ι'!G¥O jZ0ø\nÕ_^Õ_€;}ŸYl.Äcóø<&Äd±ØlnƒÛÄýò¡H§‡µ FR“¯ÃPø¡å&ŽÇ°Ü@t(°H ôjò•ªœ&kƒR0Ãy˜þYL¨Fÿ x&‹Ía±‚Ì&ëÑ=ø×ÿ(T£Å²ÃZi±N¥×h J6ÖOÀ´:•&ŸñƒÖJ©ÊÅò4 |Ók‹°°V¬¥¾(á\ø–«Éssµ˜²¨@ë1ÝÝbªœ|P; ëjŽ,ß5y -¬(_…ÞSç(-hB1ºk´ªU~wЧ"m.øè€ÄD¬Î+ÈÅ4ÚœDª¯ñš|P›Ó£ãA™~ q]âx Vèûð}©ªN—XU]bß°QˆÎ¥»çÁ:=¦íî;i_“/1ª …µÊô9Ô÷{ª«*6ªH‡iÁ!ùpU E“—§ÒS?´Âò`ÕO4áÎÿßél>¦¯9¯<¸8¾@3±ªåªS¯×èî9902‰”?Þ-Z¯3¼[ú¾“,HTb°¾H‹Ýw¢÷Ô\Û¹Þ=(ìiÛ%ÀÀÇÿ©Â)icÓ„‚¡MÒFüÏäÞá‹Ã§øŸËcÒüpQâ°Ø0cò0.“—Äar’¹H2 FѤ$.âÜ$„Ïn•¯ÑǃÐï£VÕ4WÅŽq ’‘¨)Ð'êU9‰€“ÀÀ%€ó«JÆO€µñ¾î2P^£i©Õö¯Ôjò^zÀLÂb¯ªòÁúñ°žA¡ž1Q¥éplƒZB5yyX¾^—J¦j´ ˜Q Õ¨1TÏÈÓèô¹†*Ÿ‘ÒŽ1”šÜ\ÍDU~c¢¦(WÁ@0PšJi:L²ZPCu«Œ˜Z`É×1zåW·@U‘ÇP)Mc"LýCÃ(Òa¾ÿ÷î›0JgS¦ÒÍ5Š¥’€¦i£®ù?ŸÃöãˆÉåÐþÔ{þÿ`ŽXï©{í+ŒÉ\¾’ Ê'a<%ÌEA†ÀWB<„Åá°0ˆÍg'cKFï;\ËJ`†!.Âå39(ÄQ ÊU*’’Ü$‡Ë†’` âÁH üd%°ÿÐâ°† Ôƒk³5hµTS3€õ^¶xxUUëynÕ+ëÔäñÉj¨šz¯øêÐÃ9>s¢âDmÉw脆›ÒãXa0¤dsQ˜Ëå¡,S²0%3A=J®ƒ14‰—ÄG“8H²ßqàHV2‡ËU”Æa%æÁ|жBÁä@(¬äÂ|&à ¶âÞ#Ù §\Âç&1!.8ODÁBa„±0–tŸÎÿý7Ý"P]ù?›Ïñ×?øHÇÿ@€YO0êËð ±&Ö”ß7œŒÕã:¸@«ÒhÁ,A—«AáÜA â0ÙÌdŸÑj¡š«ÉÇ0¨ùF-ëØÀN}‹ÕºšË¿O{ìþ ¨ñ_àh’6Àÿwæÿ,ˆMó à§ÿª”·‘Ûhxüç€ä˜Ö P«þ«òFk£áñŸËá@tüèøÿ¿Úý¿ QCÀcð?¢¯ÿÓõ"S£´Q'ÿóüõÏc³èëÿA½ù¿¾ —5·Æ2Ö~Kl-Ô_uÒFŠ˜¦¨Šµ.z>íñú§¡Vÿ§–Ù±:ýŸó ÿ³éûÿ‚zû}—ØÏÿ}+ôO{|þéx˜ÿ³ØÖÆcø?ŸGÇÿ€ Þþ_ßKeêÿu]½¢ñ¤x¸ÿ7Z ÷.“O?ÿÐþÿ¿ ?ÿ¿sgF£¶áóû]ÿáðXLzý'xˆþkæÞÐFôgý‡ A´þ:õßׂêŽÿþ×ø|.=ÿêÿë}ýçqâÕSîwnC§×h©©|”Κuûÿ“_ j8ÿó©4€æÿ >úÒkA æ6“˦Ÿÿ êÍÿMzý‡æÿ§…úøÕS߯ãä|úþŸ€ Þþ_ß§Mhÿÿÿ ñÿê's§†ç<“žÿÖã<R'ÿ?pÿ' Ñ×ÿ‚zó?}ÿç?>ÿ× ÔƒùMö`ÃùL)84ÿ÷鿉ÞÓpýC<½þ<¨ÿ}³q_QWügòxÜÿǡׂá Jßñ¼dLÉM‚!” ˜ÏãÃ<„£D¹0Ì„06›ÏB8\&¬L J‡Ñ‘÷ƒûüŸRîÿ#üϤŸÿ ÔÃø@¥¨û>1JÁœ‡ó?‡ïÿb1é÷ÿ뇡àOóê¯Íª?Sì'! ¡÷HËjy¦ZZ ¿G"(­ýäÙ'”çj‘6@ÚÞ#ÏWKd-ÒH{ Q,ÑÕã'!ï‘Nõ”ÎÕÒå!ÒµZ^ðF=¥Û#¤{µÄVK‡H¯GHÞÕÒ§žÒ÷!Ò¯ÒH|’p$ÖC(šdÕ"ìZªŽ¿4Sè5¹6üòЈ-¿Ê²¸‰|Ôüôù~mF –lîºá•¯2—ñN. I,\-ëÞ{ý[û7*ú÷RžøRîˆ{敎o~Ôú_=ž?=5NjD—ˆtAláØ•Š¾¿­ZýuÜ÷!7È .®‹gd¼òß)Ëö8oKs0õeôæÄXƦXEŽp؆Ö3Òç|9òlî5FfÏIÃó +O˜úÞ¼ Å`LîaÇåÏ]0óÓŽ¼?ŽŒá¿z¬ëÖ‘½Ÿï±ß&Xõç°˜›£nµ½™˜·üÖòÞ)Ÿ|={éž3¼]%—6/noY?祱)H˜úŒÒt¹_øÞ.Sž›>ž¿O¸úØé=Ïw“|²eZ× àùÙ#^ô\1õøuÉö‚q¢…¢Ýß&§§—d6d¾wŸsé7¾±ÎúógQÈpøÒʰ´EKŽíåwžôÎ`äÜ?•H>È Ûo{絺®]8GoÍ»ÈÏ~eÄ÷Voó-†å}£,‚RVVOqX&$Y0ýjÔ¢ïËn¿0Ñ®ÝÚbüQysæA?/ªdOÌmPDÍ9ö7:z£ ï˜çZ¼²ÈÛñ‹YÃùe³µÙË2GeÜë·‹£ÿùÅ¡­±–¸uaT{˜ˆlóÎ…¿LWwO'÷­:ÞVWùõâÎÛf%m+È:Ú­²ÛÀÏ» B&~|»â!';eÆ^º¼bÖ®öÆEEMýìö‹^Ïêp£ušøÇU;Z¾ÿ›~ªñe"͹éÔ^>ÊQöôÚÍ‹„³ú›9R…¥§kd¥æÛM¿¹ï87㛲Lƒõ¥­7Ú<(íÈ•âgFÜØÒnì<¹¾,ûÕë×OàÛ ý»ožÆñiÑ¿yî¡]ÙÚåç~ÜCÄÍ jCî½-žöÑŽsžÕð°N+¯Žvdry@Ëë'×>~Ê[^×'±_w}}à¯ù6wÀÅ¿oOs Þ»ú½5½èü°ïmg–êÌC΢­yôè¤Ã¡ÙY;oIÓÇÙ?Ž»:Ï»©÷Ì¥oW¾­ÞZ2¸Ùù=¯_|å·M£F†ìzmû«c.ËúJš´.R}ZùшÉm_AV6çVœŽX©¸Tqc§lô¶VDå,`þy)¤2½¾MÞi\ôÉßøõ÷Óƒ¼÷õ¿“?»º<'í¹ }?ox÷[¬Ã&ž[µ©'aÕcS”ïåö«8´*æ¥?O/5F,Ýü×ôß­ùÜ}®ßê+9ò^¹~l×ÈwŽZn³];‘°¬(µ‹´sšN4_sf…mgñ¥ƒ‡-˜®É}{ξÏÒzg;Ñk̺›]V%´+_rxÒ@ݹŸÓ®•…ü»ëk£[·ØÓÎpRËì·öÆerŸBöÛÖÉÇû$ô2ç/éÁüõÙ‰G.µìEN}ƒèŸ÷š{WèÊ®á7ÿp¯Ù­ß4öæ—mãn~v û¤èzÌŸ³ŒžÂÄ“?þö‹fÏWó‡Y0¤¢¦ìΕŒØ³ñ×Ìq7“KJ¿Ëˆ-)ùYÜE¦™³hf§ï¯>uâ§sˆãN™p0e–b0ºþwMj¯¾é;· Éšóó„ÞñW‡,\7ÛÓ[oùWäKØñø% mþXÓ¶m¥Sn¼˜ÚŽ;ñ«|ñÇ;/ïšöî £X³÷C•Ë®„ä}cKÊo÷ËgÈ©ö#âg¿±(‚myÁ¯U:»Ïc,ê="ÕÓ6Žƒ–˜vŒúãjË‹C*goÎ\sòÖ “3×±o&.cïm7®Ù¡Õ­ˆãÿ#™ÜývÚ*~¯£ƒ†^¼x®Õª _>Ðv Hiz‚TIJ6ƒ‚‚ž€˜n)ˆ£aŸ‚0=¤à¸v nE,)‘¤&›@ªB‚ï—A= Ž0Ó„ÞuüÊ.~vH@½m³@=ûÀçÓà÷à¸LÐÞ^Ò€2*P¾”¿Ú¿·9Âó: 'xü¯õëàÿ&ðwøí è³úüÜtпo@¹Ã ÜlÕ嬕_úkuΪM·ä+u/Ü4|îøÿùÅÑaq¥dLÿiIi“9 óƒêÀ“æÿTéºÚxtþÏb3ý¯ÿ°!6ýþßÀ`¸ %=¨*ßç,|¶¸4oöö°Ìv©¿N°XÅÿqn»¶¥ßʯà_É ý3%Í=_Óå¿g?˜238.®í\ãœí™½ZÄ퀒Ú̶­|çÚŒ5áÝ/4ûº\4ã½¼ˆö‹g¬›>¯Í¡ã§ÒçY>ò$]3÷LòËŸ•%n»0aJú‘¿n?2âÙÖwÇHçü8õÐÚÁ?©¯®˜øþë»Ý—ßMÞ°[µ²WÔË'/ ®¾+Ï>xiÌĆ×íƒ~Ц”] Ö·¸tò7f–8gXLx¡Tnv ­¡Çà²"VìrÂr¹]$¶ŠH¡Ëbð`ö½åYytÁPJ8´ÿ«’=|•±dK³6…ÉçÏW*÷ŽéØ{«¶YÐ:] VJÄ~ÖëÁ¬6©§O®^Úµy}Þ2w»nC׬ñN»t“?{g~÷=iФ„ÔCû޹ÎÝÀŸV¶æ¹Ì•7äÝÅû:wì+‹Z8rYß½L·ë˜(~NÔÆˆ…-N¯+Û—YRØ*vèa»2× =õò5çák¿|qœcÉÍkÓö·ŸpE¶Ê[Qüé+c*4G^YÞâ……®a±_v«»¾©ÿ†í+ß^•ýý­›¼ þ>ñóD»ñǽ-ë”öÒ²ÖTŸ_ kÎj7øð µÅÛ™gߘõÌFë¶³¦¶¥Ïu f/šûQA¿Ÿ?Û‰õž•aX{¼T>kðÊ%½„k±¡éG[ä'w˜û]Üqñeèù¿É›9 =Ôáࢽϳð˜C}Ýû,›2oyïÞ9Ö ýûo~7là ¿{½ÅŸEÄ7ËwZॿ*¿4äXæø¸ä™]þ.?ÉX-wþàûA¼OþóKÚõùʱ!%){NþøúÐ1ïR£û‹êiÈ¡A«ol¿Ç•¸wBÛþf_§[="ÛxãÛÞcöêŠYÑCû­&ûœüª-cÞŽKo÷wìͤy=ÿù®8dë—ïU°‘5ŠÖ>¥¹t[±jãÆ¼ ò¼È¼03¥Çñ÷Îfþ¾Ú2!f̰c/Ÿ8:‘™$Еç¬ÿeÁí)Cu¢×¬=;üÜi׺UÄrûçåç6#e6ÄK¯]zùå·_œþùxùZþ âÅUŽ‘N9FÐïÉ»‡w-\ÒΜµ­¤ë©žᎩÏô)ž2ª|}é×Læfæô¹;¶–"ÛYÐô°ö/vš¹ÀÍíaùnË>³)lXû9{¾ZàX0 KºQÆá& çÍë¤Éèu€•”8~Ý|ïàÄÓ §·¼ùŠvÑäm¿¼óÙ¹Ýì?tØ$˜Ò°öT¯DY+N8 B¦½XžÎËС:`’ã˺õ½_¯Ì‘”Õ KŠîy!ïª/¯Ò«K%öX•“Xl'$.£WEªìƒ–tÌ6ƒ½Ðã-týHÑL¡é×Í€Þ;è=yü…˜g+CDúª§K%.Øå•XmF§·9 V'¬FHÜkÁ1³[æ˜O—Ïæed¤GN¯R+áWyJ­·Qχ–Œ¬Q«Ê ì›PYUb©ËŒE ˜Ì!“KµZ³Àj²Z-n È}d¤@áèµq3ƒ²øÉ3cZ‚Ú³îêu†Åi°;2³vÉÄ“S‚˜ËD¸C"Öš-FƒÕ‚{ª3DF ž^,íC©µO^”§ºïUj¦6«HÜMXvà™‚0©Ô€”R6<Òä&vS\€BéPøµÚ¸ôh‰Ž.« ×鎷¤Ñév/R{@¾'öìÀ‚¤fŽÛ Vœ(ìØFF›sƒ¸Ä)=ªéÖ&bzïÔ,z‰nj~¾/!Jb£ƒºZˆ ß]WI¦Íbi¥vÛerVÚ„¤C%•{l0é23¦–{0`]2ccc3âÿ¢ˆÀßS}1OÀˆžp.tFß»*Dâ—×`–¨ÍF¯…Àì—عÄ#3ƒ &£²»a׎ò]fJdxz5‡…ûÊ”F;ÚQé«üŽF6"91àI‘CÀH«Ih­2Iì*$„DJ±{f°.Ý/£ºîï¨>v—6^jïS£Q§‘€Õb»[`ÇM§ÃR ‡Û ƒÑǬ¸8–Jލ­¦ÃTÜ Na [¨˜ª¸?¦® {}tsMtąЯÜõÒ*«Ì ò—»Pír¨\„ÛJ{q !  S! "'‰+”—F¦Ç†Ç.¬ÝKûR^š•=ìBè’ä»^šªU#™G"ÕªÍ;a3ŠåR,¶b€|‡ÐJÅwáUŠ~#ÃAà»V»Ÿú’ͳc6ê“j"“11µ¶Ãd¡Ø#qaf/H‘`³Ó{p“0Ž›0;°õ ÷ENj暘J­*2úµ ¡‹Ñ»A;UíL[hǸÁɬòÌF™Ç 2LìòZÜF‰D¯ÝGê€b¨"`£ï)½ŽË‹ü¾8¦&j#ZR"6êµzU.¯H²<ØeqÌF`Ð+ð'DnÞA0ãË£Gôgr©àqâþàñj»Ò­A nÇt4 «Q¬Aí‘É]…R—Iäršli˜q“qav™Ç8F@=.RùiŒ‚¸ZK~ Fä§£ÎFçUQØ_5Ù€Eƒ ,PäPæ2Vœ ,¸7Eb¹Ýhªð‘{d8ž²«¶2ÆUÿ˜ÐþÌ}ô›ª&Aºe'p§M€2ìâ©ØjqH\^£…Úe.ày÷Š~#SÐX´ÖTŒ™IiõµEÑm@í™5ÎêpÛ¼NƒÕm4ØåCÁ éÄÌ*³HK‚(‘ü4E¿(šAµ¦b1¾¨úBO*+y£ÆY-n‹ÄP7ƒáuŠä)0›‘U¨5».Óvnr~G±o,§×š‰®öí䊲&H¨‰© •Gåq Í î©@æ‘È= û°»Ä*iª©“ïÿD=ÿM¯ÿ7=b«îÿ¤TïÛ¿o£œ'õ ¦¢Ü\C|õ—zïïTËV²õ~pøÉ¶ cø½¿´Þ{;1xñáãZÿm³MØC«iø6a¨ªÛ„1j{”¬›|1“/Æ}›n5Ծɗßq Øä‹qÿf]õÞäËï¸'yMšÿ›nëpÿoõû¿èý…ý7ÉÖ/><Æýßl.­ÿ€À_ÿ¼õƒsÿ?Ÿ¾ÿ? ¨Ñ“¼úчÇÑ?—~ÿc@ð þõÕ>4\ÿ 碟ÿ ¥ÿÆŠ ×?M¿ÿ#0xPÿúêÃÿYíÿÁCõ߈ÛS ~äóßÿù—K¿ÿ50ªð¨õš§Ý?M‹ÿ÷-'5I‘ÿ³ :ÿ§Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAãü"¹WæÈtig-2.4.1/test/files/repo-authornamechange.tgz000066400000000000000000000166051332650737300214050ustar00rootroot00000000000000‹Î=Xí=kŒ$Gywà€¶YŽ€rïævg==Ó3;3»·çÝóÞîÙ^¸‡u ÜíÝõt×Ì´·§{ÜÝs{kß!£$” XˆHç!‹_„ ($?áˆ($X$"ü !„<ˆRò}_U?ffïf÷¼;kì.éngzêñÕWß»¾ª.ìyÑu}¶Zeô·&þêåŠø+ +Íè¥Ù2<¯éL/•ʳ¥¬º÷ 8Ð BÃPÚ¶kܪTk4nñ»œGü÷礊…¦î-ìhýË3°þåÒL¶þ#)rý—OŸ<¹zîòñ•Õs'Ï>°Ëc>j•ÊÍ׿’ZÿR­ë_)—õLße8¶,/ñõ_öÚm;deeœ=äp#àŒ»!÷YØâÌ¿µyMΞÏ6½®ÏÌ–á6yP`'l— ÚnºØ°Ã›Ÿ„ŽÃêœÙM×ó¹•g†kÁ?ÆÛp3îѨ{~¤Æ*@§]V÷ ×l±¶(ðè¼ú†¹Î-Ö°Ì+ãc>ošÏ;^!l>Fß;žæ¹<ý5܈~ LÃ1´G­Î¡ã¶á¯âe¿ñ¿ßEò¿é¹ »¹Gc ãÿr©󿮣üŸ™Ñg3þE¹`®)Ä0zþ&°yÛ¯r?°=—-0]C®k{‡o¡ßåÊXÝðñKÃpøæxMÃq€#»ËA"DÕ÷›(U¢Gøîµa,Þum3Õç~#â%Z$ÿ[<0}»Â’ïþÃø¿4Àÿ•™Z%ãÿQ”ó®k´A±&ü„q ´~زR·l2E“,ô¶ ¥4*düûóY$ÿ?x|ieÏÆÆÿzy¶ÿËÕjfÿ¤€ÖžghL[ܰ‚¢´¹÷¬¬Œ¨HþoyÞz°WQ Ä¤ý_FþÏâ?{_äúۮůíÕCí?=eÿÍ–pýKÕÌþIYY=³ ^†ŸÏ9~þ¼á€Nß[~}íËÇžq¿ð©+ß{Ëÿ<û‘üïWïð¿yôÚ÷?Uþô;Þ7ûõïÖ¾õúû?ûïû ~Vžg‰ù¿áíÙ&ÀmȽ–Éÿ‘¹þŽ×Ü3õ¿£õÕOë?[ÉÖE®¿W„›á‘ÀŽÖŸöfª³ÿ¤Èõ'p¯Æ¸-ùŸñÿHJzýE`÷ÇØ9ÿWJµr¶þ£(éõ½1vÎÿ½œ­ÿHÊ ÿ‹ànŽ¡‹ÿVK}ü_™Íüÿ‘”RÕóoþæGÿáûÿñ‘•çžûñÛ~ÿû×~çίԾöÅßä‹­÷¼ê‹ç­·yqð³Ýµ—ügïþƒ¿}î?}Ù~lùéýÆÏ‹½ ƪ:oè³F­6×°Öl¹R3jf©\Ò­¹Ry®®[úÜÜì®êÿr©Òÿ)ë³³™þI¹vðƒ¿½¤ÿ_û×»‚ƒÏTN}㎕;ÖÆ{bâ“ÏþÝ—ï;ñºï|G}Ó—¾ùÄ+?ô“åS¹·¶ŽüÙSï{ÃWßøÔO?µúЧÿþ¿ôöÿꉧÿ¸ÒøÑ_Y~ï…[xÝÜG_QøÙµ¿žùÁgž{Ó_¿ûÙ¯>}èŸÃwýî«~øG?ø­÷kÓ+ŸûFõí_øRuñW¾ýí?Yù¿Ïk§þü+ß}yé—羷߸x)–tþÏ^Їÿ…‡ýù3ÙþÏHоÍÂÀ$Û–b`'‘ì”ÑìÚuvï#|}ÓqîkrÏ´C›Ók/²ReìÊòì\izU×ÇäIã)Û…Z†“›gò\rIÙö¸ÛÝÉb'ý{pÓâC ›+Íõ@ÃT~1í…¥ù¯’€ôÛØÿ™™Éâ?£(ë¿I@;_ÿj©4›­ÿ(ÊMÖW“@v®ÿk3ÕR¦ÿGQ2ýŸéÿèü¿f:]‹ïúÃø¦6¸ÿƒú?ãÿ½/ã –Ÿ9F7ë0MóÂ÷ñƒ¤­á{í…"QÆåí?aËÅ@Éí?x;2 wïô¹ßó™Á:¾‡A&Öö‚ÐÙd¶Ë–ót@ÃsoÃv›lÃë:Þd°¦çY,à!óЃ•uŒô’°©®+GÀ.ÚÌnàÝDlÃÀëtCA;7§ )ĵ è+jÛöÀžl†tM#ü|öô±!Ä®>{`õÜå¥óç<}æòêÊñSçØu°Þ,¦¹l2(^º8U˜^¼˜+LO{¦1Ï.–ŠÉtטöhÀÔKе R­¤²ë×7[€*ñlq‘+¤B´ˆZM”¹`ZÝŽc›¸ÐƒØSTˆQUe å/Ž8y© I9°2ƬÚë¬ëÚ2ÍŒfÄÙdñÒ6¶6]Âÿ‹ÖdŽà|\#P•ÙÊ­á#ú-)7öÝí‘ÿ°Ì5q‰ßn*€aö_y¶Ú/ÿg3ù?š²]ù/ºqâ&Öäî7º.ï*ÝÖjuÛuú†tðz×ÊÄ¢P$…Œxv”Ãhè‹î;ó¼J/ÿƒHLØ‘ùµj¿ýþ_–ÿ1’²]þž³›l­44'ê^—ž×#;ŒèTÜ ÔÜ©êa…-<9q‘-ô¼ O®[V=ž\ÜEÚ“K=Ü™'w{e€ÿ%ºFèÿÍ”ªåÿ/‹ÿަì&ÿó]/vƒAŸŽ¢¼Û•7‘ÐÇ.Ë9à/ýl.‘‚ySl±hñ«E·ë8¬¼x¨¤À°®2f4 Û Â¬¢pº-{œ­Š].í+Yv£ÁdÍä’üÐç`RQ^fÒO¥¾½ãJÃFiµ7*N^,ávéìòê*ÍçP &®œ-ãѽÜ…A#0m[:|âºxÀ@Ýó!ä =õr8úp•}Œø­t¹¡Å}¿ ¬ºxJXoÙ÷‚€u#Ļǣ}XAî’Ãi\õlk+° Yzȉâ¼-NX–pWû.*fs ³ŽãI/¾a˜¡>÷hÊ >¾å@lmŠÚX¿_€àC3 H|­@ª mÇŒ¥\IÞƒ•Ý >'bTek î‘Ny!‡tß}ö5Žè{]|i,ƒ–¸¥Å}žgSv8`'8˜ß£]›Þ³€¶8šÝFÝvl¤"õXÔ€•ôÉ€»Oú¹< l×$’¤¹=ÚE _,ŒW¹·€Ñ`è¦óÁØVµxn­ ^ŠÀuaÉšóŠÂXŠ·`@q©>¢&Š5ÄgÀi´– ËF$ÍA^?ê5@ÙNŒº€è½¶\!ñËhEéþP\s2^ûxq5-sÖ^eÀþëtƒÝóüDbÿ•«z¥ßþ+ãý?™ý·÷%±ÿn×üC‚Ûõ™~¨Já52ÝDpŸäêeRÊmT€Â¡è:o`¬Ùp7AääÁ&`Ѹ²3†$À Cé&Õ¯1`6ºžè'z‘ìD: Òúc¤ v¡Å{RÀÖÉSÀ×A³‰3v*µ!ç £e›¢=„ý [Äò\4-&ÊØôü™Ãë I¿ðÃ"œ„?NS¾²AŒÛò‚d%ˆç &ሩ®ºâ¥.øB¹t±QHHHõIQÐ؆ϰ ŽÈöði,„  ª¹hÚI»‡hbì^ǬâÝò‹Ñç e”à‹\üQþ”¬‹@èlà"mÈ$Úz_€û~Ôg8|zOZØmÑ;©Ô‡WRÙit€4~Ó‡Š9ÐÅ€ÚVèú|(«ŠòXE_зYPˆ#7,F3½ s“Ÿ`br¥è¡üOËSƤ©Wʼn ›­EEFgª4º Cx2:\‰¨yÒiº}ÔZš|C¾T+OŽ{GhÎIb%²ãÒ ÀS9 ôpž¢¯´ÿuÍðu_º0È&À ½½£E‚}/“Ñ€–+¬’ì~á•+‘×åØhH¸ PnÝ@}Ü®¡¡Ô+B N´#®ö "ÞžQï'Û:‰b"^º< ŽˆûTj)l(‚ÿ—*ôTÿ¹¶lô¿ÏëF°«Û?Cô©T­ô¿ÿ§VÕ³üŸ‘”ÞøÏ²×Ùôíf+dSàjÁrÔòøÿ{s×µ=¶ ¢¨m¸^ÀUŠQc]êw]ö 5Òæª``QIºÓäçP´&`xuñ~@ty"!)(r8Ы‡^]’:›¤ò#µ}ô)ý¾ðòm(wòÆ;Aò¼-”X? ü6@ ÂŒè=„R!Vé´Y/ÞY(T¨˜­Å¦@¦‰h()W<ûó0»®ïãLEÃ\a{Ê/ô:¶)ÛDÙ—´/ç öÁ ¬6÷›"ò1éòkáda±ÉÃ0 X]\øÀF„²ÜD&hÈ®C¢1\²±âÍX¼J‘ÏpT» Í ‚Yì½OŒ£Ž*Kž¦³ ¦N öjGüFâ?Øl×=Ç65T¡K»Â®_—ž­ÎŽÀè:“Ô¶ñõ•~·&@[<î(EáPëÐ+éÔ A…&J €£G‹Ó9eìÈÿÜz‘,[ Ú<0L4¢O¡O/ük‹ND¨ÈI­]/¡@3ƒ,´kÄÙ ´t4›O¿Eİ"|?ªP–‰2¢KXÇÙšù¨B²!di&óìËQPOËt‘¬–JN@Ó1c4º8DB\Ê£ ä²í^_û•µd†›  -)_å’¨ƒt%¦ í1xØÓ—*I$W4BŽÞ˜#€TL&#ë*"«ÏF® I„-â vç¿ø\sÍ@.……(VÍXÏO†~”‘À£XÜÂBÚ¨ó„î0âŒa¯ËØàr©91..Eë3ñ¸d¡˜jâùá•TóòMš'e‹æ ×¥àÙ/©ž#LKô§ø.-R {…Lו‹(H\[-]$Aº-ô42*‰=¢E»­‹,Ui‘¡‰&žHÀp¢C‰3…À„@ÇŠ^ÏG!MÙá¾S-€ù‚y@0b{S2ZÞKgxë}íˆ|Þšˆëé¨yÀÒk‰ð ɇù‹®*»™úµÔ$rÐaÛè #/M]еÆÖX»'ÇŠXl tØÂ"+åðÛ €N/ºÅ¼¯´F?¡¹0‚SÑfSq—}}N¦s¢ã± ¢ç‰2Ío˾Ëk¹œè¨cênH›HÁÿ8 ¨-–nȪTq}AȳçVŽŸ9CXŒÍ"-ypC¨­²h€ÒšD!Uƒ“‰$TÓ ©ƒ’'3•$¥Œ?Ï"ÃÎA:¾b4x³ ^t°¥^oW¹$ê6µÃáó ôb(žÍ)XÝ@.1‚ ‹áÉ$+žf§]“÷k 4eÑ¡*'ž?{¡ÜS@²H4cöŸØªbSܦX¸Øãq e»Ñ7ô¬o2n,¿MÀÀÄKƒC‹pºp}eô%®ËÏÔ»6ˆ‡DwÚ"YÕó lÏ ß±Qz%ë<Ècø„o @d7†"z…x![‡: -kw¢`Oí_b’%™ÀôômB‚ËM @ø›$ªä Ú82~à ðåÚ[çàÀÒÛ´¥Å C íaŸ¤tÒs%i‹Û;‚zÞÅM¿ã”pĈŠò­ò€ ¡Vл¨ GÄÑòѶYÌýù¾¢7a*1¬ÄÆ ½ Ù,Ö °qw8I5¯Ó¦ˆØªèú´¡?*˜1º²zF¾{`ŹØØÕÊÃÂT‡ž"²Î‹ÒÑþ nŸyO•r¬P(àîM¥¡¼%4"¥$­–ðíÀ@MDY?ÿ¡+Bì„ÝŽmÅä“‚Â7ü©±ép¨ßíDDàS86„L3µ°€±Yw‰í¥00”d´y2HÁ)JÇ•“;S´SS;‹á!÷‰‰%H ‘Ô‚!$ p0Ù-ÊTùVX%„ö[a1oPÇçÐã‰w²ˆåUŸD±ãŽ™ <“ﳡ¨õŒ ŽVzŽ@Y›±•3«A,!ÝçŽ&;Áb&0ƒŽÌŽv¨›¨y" Áº³Sâ¦ÑõixÉry‰YisÊÁQx¤šs¡et‚Äù 0rŒÌ“ƒµK:f¸ùLt(DM‚Jå'æ ¾0ä&½äÐy ŸAOÓ´¡ÿ$ÑS‹¢´£¿Ÿ±>0 %þ«³¥-+ûžmQ'õÿ™Ð[ü¬YLýKÊÅŠézuq¹§¦¬Wd·î²HXßDFV‚¢,åa ÈáËäïõ !Ê—ˆ_ðDþ&6ÜEŽJqÈD&Q›cÔ¦a»v´çÞ„ëdÛHi#(Rã¼ð+dˆE„¬Ž4)³L½¢è—Hj`t£(æ}RWØâ˲¿8€¯u)/s"Àp÷&WŽ |t»Óy¢‰xKÇæ’À&E¶®! Õþ`åBˆaéÄäNM쬞L/ Lyé‹„n•ƒµOqHÜ\îw€oHÙ"þkrûênçÿßêüwI¯ œÿªeïÿMÙnþ™q2EIlÀÑûàéx7Z‘Q3²b7ȩ́cS=µO‹cźa®/LbZ¯‹AG‘ü5划ñ-~TÓ}"÷\Öí$÷IZ—Ù}"š{Gh™>tþ샗O?tnõô©Ë˧ϟ:EIì]~2¶b«Ls›·þ1~ bþëò…‹U¡ÜòqIªDqIC!a4R†TTú?²Xj*ÎxžM1<‰¾¯ßÁ;ØâünÒZ$gÊ#‰Ìu¼YvQ^¦ÂD”凷¥ŠúØNœNe(¹tý ¢ ³ÂåEIô ÛÂøÂ&ó{ uÙsŽ êt^ŽN¼Læ!¢B=9ñ´Éizè/$Cñ(qÒTb/åóÊ + ü q»HDÎ÷l“ê¦])j£Ên…_C×1HØq±å~$Ž„;‰ëÈ=pFÛ˜îùâ;f,£‡SOjóPì[15–lçu^P¥I§Œ‚0J¥²l}ŒB~>,X9ò–¸|c‡ 4>-.r˜p;>hTä=òxDj$úH ã!& à\d“R”w`ªQ^mtH¤ó¨Ÿô#vlŒ•†¹3ðû&ÛðPÕÉJJÁ""bÐ÷H¨e m Æó¢í ß„£SÈƦF”L¹Ý´wfY!5(u‡qÎ[Í]DJ·;ýxWd÷P`qwSìüm ‘ÊŠ;—4ã­`‚mI[2'úæ [BΉW-Ý3‰¡´OÉ#"‹ xÄçWEŠ2°‰ø<£F Ï nŠ${q ’3äF›ÊÖŽ°TNºBøÀt½tB}V0S`dA4dS©“RbûFäiPÂø&“Ò`Øoc6¡cÚ7&‹ùÀ1™Å\T3Ù~O¦!1¡2ÍDëä»èd`š]4ìæo1êà Ñ:$éÃÎ@¦ªæ”jÖ:]7§ôè-Z÷Wí˜w{CEÙ0– ÃÆéЧ's»^ÚgSä±N|=F7é”L(´˜ª¯æ"ƒ:Õìjõ¼€ˆ8KÓQUsÑ’OOO³‡äu“i¿‘4¸œBpbïÞÕOgò ˆ{¯6;ý FIeȹ¨è …þÁ}€Iô0¤3zÑ–'fÿ7 ú êvO¨ÑÒˆ¤1c »H·øé2‚¶ È”§ÔréŒî÷dZÁŸKçAFœ•¤Æ"™¼~:/ï0 ¤ý®«õ(Hx´Àý½ ¬‰Çå§ññ¤É¡…~^é9!Mr,µ èÕõšg=£æ£„ŒÝ@{`1­DѤçó€…IDê86P“°µI¢cR»és¡xòÜh¢¥œô•>@¡Ö4ÞÄò¼I²K£"æ¿¡ˆX‰4¢PÊ;˜ñ-¡$Fû×5 eÌìýšûÇG4ÅYßÁø¾ãbia“Q“ÉxW_ä¶X±“Æp0t©Dòo/K£ Æ@¤pnRQ'ú%/U¸Åú-GÖƒ‘J@z~KA¿¥õOb@Ëì„Þv ^aIõã;Ä£ç‰Yµuƒ­˜i Ýn̵¯×ç5éiïRt°%5XQAt;ýühNéNâ䕨Øéº˜ôä’B°\7>–…ÉÞ1Óa|kôŠs] \Ÿ¦»_¦¼N5e%+YÉJV²’•¬d%+YÉJV²’•¬d%+YÉJV²’•¬d%+YÉJV²òÒ*ÿIÿý«Ètig-2.4.1/test/files/repo-one.tgz000066400000000000000000000151021332650737300166440ustar00rootroot00000000000000‹2{Uí\ XçÖFÀVE7ŒÆ„q©‚$´b‚Eq™„'”¨µ;êÄÄu¦HM$jÆ­‰Ë5­¶U°*V\[×z Ü®ZµîVÿoŠE¬r¯Ðÿ¹7ïó’I†ó¾÷;ï9ß0Ip*’âÒ¸`pÙìêGNõ#ÀóGÇsf(›Åá28aa,“Êv¡±9.rÔÙŠFsIQf¨a9ôÚó¦N‚á´¦¨iLñ/SAòI°º‘Bøgs8a€ƒÉqòßpð/Wf¤ ©6E0Hì×òÏf³êðæBc4ZD/áœÿ±r¥ çÙJg*ÕH¶R¥IQªÒ¡ì)°J(3hCh ÏV)Hœ®L†ÁQ¶*öl%ƒTÔA ”¦GiÊT(-M§äd&CÙ°úÅiHjð.‡Ôµ¿™ Ž•é`,8'‘¿äs¬ ‘ Óz(UH*’ÑÄ”£Jï†(3³C²‘Ôà°6/YÛkWùk¬Ã;6ßó«cþa_²Noik¬Ëk¬kÔ±noi´¿°î5Ö£Æè¯±^a½õ©±¾oiý^cý`À¼Á‚^²à·0ªb3ê1f=Zc¬ºÖLñ•}ìh˯›QÞ;~—Œûõ¡ìk×òKmÆðVlØ2¢ç‡ŒUœ_޵Ñiò×­?éÙ®|fÆ‚hï®Þ±øÉ0ïñ û(èúϘe+Îäv™öù0Yå£ky¢$ºMÜÝeƒ: kØé'‹®rÇ=ÞúÈ`wÝ¡)ìï«ç0{ =X¢üÙ·}—ý\ô´Ûh™jÃÎæ“M_°ˆucYUèÔTÁ–dß¿x>“'måõß¼²ùgîËì~˜7Š[4_5nUÂØqßô¾w5iùãŽî¤Û˜ÂÖY¾ ܧÍç—ÿ@oçÎ&Jמk«®úqy—]óÂwe&žî^Õ}ðžûÔož–}<üBçúõ›«çwÐ.Ëùcæ÷O]™ØñAëᕵ{Z|y/{¦ö<Ʋ헃 ¤§ôíòÑ#×þükÏ‹§•é{‘cª”§¶=›¼ë´0þ§¢nè°ì‚ÖÛnsüVîù‹KüÆlmaÒv‰’Ý]5îûwÏc»³–}ÈY¤4—ó)Ǫ*¬¼²ï3×¥ qð©pÖ×{*m©È¯P\ç5·“Ì {ÊnÝŒhá~÷Âæ“f|f'¿¥{ÿ0rðïF&;âê³§³,¼·6Äæ\ŠûÙX±âhŽì¢|ËÑÍ$%…ó—¸÷‰8v¢é›>·Ù·õ»riÕRÅÎ"÷aÍ.uìu÷êˆ{ÛÆŽq/þh÷‡N¯J<)ßä£(Oùzôô¶#dk\ÙeåÞk’¯—=Ø+IÚõëjßÔ|ÆãëîU±ý°]ÒÎý.|óñï÷ˇÞxÆð¯éßß.LyJÿŽíûÇCÜÔʵÛzá†lxFJYÙÆ´À²£ký‡<.?W õ^¹ýكϬ?`­ \w+uð5[Ö­'^g‹Ç|~öh¡Ñxç|ðªœè®â.1jA¶¾bµqoÃâòg+Ó–.(ý>¦obåùÞã7=ìº6¸ÅéŠ#ÜcÓ«+oÄÜ)rÿ4ࣤÖÍ÷·×\P17<¸I”&‹<ïítŸ~®_pfo]ÆŠžŒßß›züz‹ÞÄÌñéY‹=Öx=|d]¿/{Û„‡'ÚöyøýuøÛœ»þçimY!®ÜûM¹ÿäâ¸ãùÃËZÁ)=Ø¢Ñû·6Óù쎧çåÝv•(,›Ûyï—«}‡˜N-z¸{Æ”#“RŽ‘o¾¯ÔzªØ»cxb‡ ÁGûÝ>ù‰òÃu?þN¶ùö♟íΘ€îJ~"Ø>(º={êÉ á7{o–FÅ|ÑíË9$«jÕ-÷ôŸŒ—þø5ræønO»GÞ=ÙÇòEKv§ÊÒcóHNßýˆžÂ‹•¾ƒWýncù²OËÓ'O)XYµ½ã>±¹rPùÍkŠôî—«·Æ/Mï!?5kí)Zëݧ,CAmö:îâÒ* ”ÞÑ mÙÚ;(Íç«Û7¼OÕC8Ê0Ðã¥àq7h €–º‚ºíƒóJÀñBG¯ÐÊÚPgÚ¬¥û0(õÀÇ{Åàøh—R€ïOA«"çÌvø½À{ giüÎþîƒ÷¿¿ z¶`Ü–à5ï׃V"œŸ^»ž“À¨k^Ùà\%x­_û¤i÷†2‡äÌÒšNûÍà?9pèTÑÈOðŽyé‡vüý)¥Ðûë@pþ¿ÿ´ÿ§Î~ÓÝÿ3™\VhþŸÅ ®ÿ9ûÿÆÇ(^$XƒŽþžex/· ýÐ!ϽŒ6hù'…²{ÃÇ‘m¼íg FˆöŒoÙöñƒ„’̓?¿£üÆÀwÁÓNŒ˜Ë±ùÜã j­2]ÐÄ.MtßÍž;@Þ,6Q}µ³,ÎÚal‹{Ñ–ˆ¿+dêOsÍê?øPziæ{^IkW$_®:Òql·äVÅOò¥§†øŸS¤ØzÐî‘ûÿæ;?öÛ0A9méíB\×”]H;Õ¶À%s¤³Mtù…u+úw­²¶ïµ~½}Öõ‡Üù{3zìÉdM ŽîÕü]öõï'¬y í!,íÒ‘WZä»dÌ*O¶o•ºø¬ hïVï%ÍË7•&äeµ¢GŽ+NØ4г¨³2¾÷afxȤM‹íÃBʃËwL¡Z6}×oŸ_¹/ôð¯·ñ_Ðlø¥ˆS’°?uSÒ/ÓW\<²xzÅ£K¾ÿlµ-oü ß=‘1Wôù+¨ˆ6ÀÍ#ÝöK…ªìÈáÃD_ŽÎ,wuéæûí%Ïç|}(w.åÝlÖÛQ»V <Ël°”˜PžXlƒHÄ Çí8LZq£€€Ž—$æpâ}X^ñ'°q¾â6ËëÆ®næÒóšïK³3AìG,Þ£M`J•Éb‘Ø •‚€D–Ik× D¨)l(Žjl¨ÀPY’ËñQËé^k0õ€úb¯pu™ûÓ€÷®ÀûæQÞu°‰oã Ò"›4„·g©bƒÞÔÆ e6«ÅƒØÇqä±±j·C˜O½Þ/ººÌœàß¿Ê#o ð~€¢ÿ CHj2‹ f­È€ÛÍ0)2~˜¶YTo˜x%‰]9r:+R¾û£ž‰éK‘Ú¼«oï*y©/H6`ˆÁ&ÂfÅ: œÂ: _‡YôV¾Lg´Jd¤?HM ÇÓã·b¬æï¼åuBE‘ѯS¥Ç¼¶/HýÊlÑ"ƒç“© ±iæ+Ó–'O’ÉV*Ò’3’qBA(ðÁÌèÙ?=¿÷¸J¶ÎÜ~%4qõêt÷¤¤²‡v;ÞËÓ׳,ÉÅõ„ov•ÇÜáµŒŠ Lc01;.2Yµz+¢RFžÊdÅ !à˜oÓ[ÌÈmÀhB¤[¼O1¶5®~%pÀ(7ÅUå1GY˨L&&ôVžJgH™¥"0‰Â–½Õ’%SȤR)‰òLf ¬õq nòH¯%ØËÅç`u'=Lºü7¿½—=æô{Ψ%ðÇ3A6½O fË$­UBHlfŒ¯RÉl8†êQË>¨œøØx/úìßãm–ÿì~e #Qã|ïÕ¸?\¨Ybƒˆ0¢½€À̱dÌl¶bæ,“^ß+AR aÌŸ–>¹woɪ o/¤å¡½Ãxç\ZîÜYpG­fŶÿ¡CÒNz+ßÉÀy_@i±ƒÒh©EQ¬m£H*T0!!´©M£Ãø„@ªÓ›µ˜HEjA&±9ñ^‘‘‘k°UTì–º±S‰ªÞì·¹&öýÕ´ÚP#¢ƒlˆAcÀÍà°kHÄ$1`€KJ!0Ü¢±áÕÕ’D/N¼Z®2°5¨¨ûúŸyeŒ¡x ÷ëÜ÷wH¤ƒWÚô8¢ 3$4á"RkGÄdÖ¨«FgÔ˜²lö,ò •Lñ,–<öH&½ù•èÁÌcÝüß«òÈûB ­ˆ„H»È`ÔZì˜Ñ¬1X …ŒÀìz $˜ÖY%$OW^2i'>>ÖÍgv5­xçý(ZŸð|»\ªÖZHL1 B1©‹E2Ê,‘ŠU*Ï€ê³ z«A)¥¿ñ‘,/ù¯õé/#žJÕésý[ï‰/x£·hL­Dg‡H‰Ð†ZD2&QÇÌ"¡J§×j zÌnF*(ýõñB3»>ý]Ù¢µ_º¯­&öjZç]„:„À¬¸žg’¢ÇqQqà‰mfH§±ñÔŠï£ôWΊeyÝ©OAì€U™Ÿ_Q•Ç¢ú‹Z‹Õ ²HaÓØ`¡Mc+H¬C1̈Z1<«S ·àÌbÛÂXa§•Ý[C¸ßI]šù­PÏÌÈHÁòð<ºŸK×Ó¾«¾HÕ9zÔ¨× Tb“ƒL©A@ù„KmFˆ0‹‰VHm0X]ètzüìJêfª£¤òh~S*«—c5¥ÓŒGÚ5:‘B§µëqؤ!-`‹l@h€À’ALVˆÜSâ¯NˆôñŠ­_¯:³ò1ÅhÇÓ¾{ªΟ3ª5Jdb™Á ^`‚e`¦†ñT e’Y„‰©Ššà¦Ž—ÂVQ¡×MTGE»ú-«z9QÁi8¤š¬<†š-f ¨qf«³0-H,D*SÐc”þº¹EÒä;(mOþ³¶¯õ™äÂXïç}Ùcá¨Y:1Ht  ’Ö,iFHܪgÛ1XFà€S>žLJà·¨,õ‰¥{Ñ—ÔŸ¥ý©,MèwÙce³Y­RÈl›H¬Rèx&܈f ¥b` ><›™o Š 5ë6%¿>^ Ù¸Sž:JêöùþÛ.{¬ˆ¨-©B™N +L "²„6 ëì ƒt=dÃP;a CaXëñ ×9Ð $¬NMeˆ(ZÂï£ËËá55ZA¥Í2aZLC€â¤Cl^,¯Èâú:%GU}4¥CÅŸä7ZA€ׄc#OFH@/iÄBƒÞ,"íZ=Î7IH3ÐyëJ~}"åty½í/#bõ£e~m€÷„Úd5[v‹Æ`ÕjL@rÀBÁpauˆN "@…’ ƒJ^Nɯ\ËbÕÛþú;ªj·^Tû›÷qm²ê­z¨¡VÓkHeO‡â_¥³Z4$&Qu…ZÎPêKg±Übëí~Aè@};“¾ Áµ5U„±!6+_êšG›Hj݇ç™D Vi=_AõÖã"céñÅÕ½’ù•ÐÁ´Guñ‹ÞƒjIÕX¢³˜qH%¶m_l³kA{Šê!׳T6"1£ö %À‘‘^±5\'Wý5µíßTà}@mMå‹b)aÕò LEšzDf‚K¤:A %$`8Ô UPí¯›O¼üN½í/CL‘:%Ö¿ÝeÂ6µ{-ŠÙAÕ‹ »:Û¢x»8þ¶NK`^qIW;I NÞNÀ¯*®n^*^v*Àš7În*À)«4R_ÚÿJ^[]*R¼HöÀÒ‹jxªØSdOµ‘£+öT]±Š¯åh¼—t&xzQ<$GvdãKÅGâêLñ°£}þÛêF—æµôö¤xâBp¦-°ÒÕÙÙÁ‹öÃTŠ3ÁVc’ò—ï–S|ÎnNeН¥§78ŠÞNÀN~©¸¹U"Ð_ ‘ÉÕ鯆ÄäjH¼¬>!~‘ø¿ZKsÕ$ncœø‡#qßă‚â?ñMNcuµ @bÄÿ|²úþ4˜êÿcq´þŽ€úÿ`ðÕþ“׌ÿ‘8ô·öÇ¢ þ?(ÀDœJ¡‘d*C«RðxMÄ’Tá ެР Ix ‡G!Èâz®.OqíÑÃ)®þ×q]îæáàêAððòTvr%œ–‰#Ð(4 Ç ñâ‹i[˜Jrru¡¨‰S=\ëô³úØýà«ÿt&e?qÿBAñ ¾±ÿh'p‚·Á|ûF"ÑýÁ€®ýG/&lÌ·ÿ4µÿ`µÿÿm¾ñÿ/÷J'tÌ·ÿh,ºþ…Øÿ¯{å³ æÛ,ÿÂØöŸ˜{Ì·ÿX µÿ`µÿÿmFütpÒn3×þch÷ÿpÐý_pø‡ý¿Ž2Oè©À„ýÿšÿ…Æb‘ýÁàGöŸÈ)aÌû?…æÿÂì?‘SÂÆëÿaèoí,õÿÀ`Rçmuõpôò ÐUVVý÷·™LàÍ£m ¼b¬¶)3üÈÿ'r4x<ÿ‡cßø?…€æÿ€FOFSÐd<‹AR‘x ŽˆÃSÉhª*DS d"N¡’¨¿ÕI Á0?òÿ‰œÄ|ÿƒEá þŒiÿ jÆ‹ÿX$òÛþ ÅP€3ˆ8£ ó÷ÿTòþЩc¸R ÔÞžBrtõöRwvÝâàb7º£=Bq/W†krC;¦ÿOД Ÿ¸þÇà°PüƒñíÿëS‚˜·?ºÿŒÚÿW¦×þ#gÿ‡ý‘ˆ‘ñ_¨ýŸ|~ïöŸÕGï÷g|ÿÿõ)ALÇ$‰æ‚ãöÿù)AÌÛACó¿AiûÿÄ=æÛ$ÿ€Ôþÿ·ù‘ÿ»7SH^s ˜™øÃ"h×ÿ($ÿAa<û»HŽ¿z0Ýþ#pH4tý ÙŸöŸ•„E (@ÇGâ?œˆ%Ðx …LÀáT Æc‘h­ì@öùç6hFÿ¸ý|ýöGà0€ÿ#±pÚý?¨ýŸ|>{“€v7Éö·ÂÎDáøÅ2(œT¸~²pÿDáù«L£ÐzB|?Q¦SÆ(‚“P„X\¦ÿ‹Ë ËL QDè”YóJ³ý"Ÿë…¼6Zl¸òpqæþΠ|ÑãÝ]i¾»^ l/>ß?÷°þ\¡ ¹pî»$–W±ß7±jxß.Nÿ\uxÝápþ?dÖ Ö+cZUÛBZküÉεªGýom™¥—Úw\ðe”/÷¶ææŠ´èþ MlÍ»&óp#Ã0ŠŠ\ÛåÈšþµR Bo+¨šêy+ °ºB:½VÍøt™}aUö"‡Ž¬:íoÇ+ ø&Ø  k“)ysêätÅp£ì·ƒ¡EÄ3aÒ*…eæ'.0 ¶M©íqPè­RÞ{§ò¢œ€Öûn:×¶ ¨¤ÄU©h»ÕÇ-¹ƒõ9ñ`@RÍ&NíñÙɦMkCß^å¾}w|IùÀÇÕÄ–klH•SD%Ív­õN\ýë0íòЏ ÎG~±ï;£)ˆ(YYÙËA¨:âËO¹¹žw—¤?¶ß¡7¿IuºìUô¹juõÒ MN=×Ϭ«ì$¸ÍqU#5ísþÅ„'Ø jíÓÄm0ámß›í»ÿY®~²Ì–]µ o6ÛJŇƖ-.9g¥Mué{¿]aÅçl™5DßõTGJe©œ˜È™µW„‡­ËÙ6o¦j"ªø ¢r°iߣ‚‚ŠbóäørMcÑb‰Ý@¸âBf#î>á÷ð>x/œ+À÷\¥Àû%@9”{Àï³ßû€ïó€°¾X&xô¦^“× {¯S>Ĥu.¼çsN~êÞóÇj¢ÎªYî±^÷ªg'‡§Çª>è6 ßqJc &¡ÿG[úÛ¯ÿ‡F`¾íÿ!QÐø(¬Ñ\©í_Í:"à“è¼Ï˜]BøÖÛí¡[#E¼/­Û˜Ô¾¸F^M½GWsÛ==òßÃtÕ!j\üÁqé…ù[ìõNxímhwª¼ðÚÀîÐò ëóî_vºm@b;´VÚì´VT¢3BR{C€Ì‡Ï‹T!6•:—º=u{áf‘¥sý¦±šoO¿¦ºA‘@2rÅê3‡v„§1¢oRÖì~9PXðÉ2Òl8ã‘tµ:Ш`|†Ôw\çë¤T6âÆæ"¸Ðª·¡ù±<,tó¤œ(ØŸ¸BÀÑA‹ÏÛi׊þ,‰.yO?þk 6ã#asPÄüj¦AÙ¯B¥£fX,à qJ¥žóp^.ß³ÌN…œ¬²€W§Ôʦ’;Jþ è 󅫻ΈÌ3š±øyÓ‹íw5"»µ£ÃUöì½ØØÎï'½Ù¡¤©6ùfŸö`²ÍµG\¼Ï!ó¶Ûâï« ;Íý"Q{áèÑÕçeGqö©j½-ÞŸŒê/ÝP}¥ì·ÆmÙ®½b6Ü5Ñ®ë„kÎÏÝ䪪óüˆ€@•¾b÷^RŽyª²\²vHüºå‰ÅåÖ{[':¾äZÜrýæãx™éyó‚ñÅ}ñÈWè˜Ëê³®wF6–Fíé—Q3*âRŠÌÙR[Xz-õÉ–+1’s{ù¼×~öIבÜì]Š4î|Wë?¼ vzvl”öùÑÊjÒN­>µâW+wi¿ßçÌ“"±Á~ɰhÉ?ðتÛEí/¼´Y*v­é´ÿªPs9O ±|áûíÞ^!{ž>Üs'ÀhõæYé~Îk¤6áEBÈ- ß·Hf‹„^·Ø£­Êós/Uo"¸67ܬ›¹•èÚ+¯Ñ#Qí±öð‹ŽÊ=G+§µÛ>¯hÔV{ñf³aÙæÓ¹ó‡Ó˳^"]ž”V4qïç쾫cy„ïŸW¥õ‘ä5«ºf{I+ôZu#n†É‡ngͼ÷ç¸ïŸ æ @›”íC®=Ù‘ ï }½ÜdI“¼WU°&Rã¡¥rf›Û3·M™}þÏ«R»4Õ_\äLG[4ðÊÚ.z‘õèÔ¶³fO3MöGÖ èö—ß¾ÝX³ÁåSë ,(Öäo<Å㓈B±öa™‘á½2]ÊGÿþ*˹Ӭô)q>ÜŸ‘çDò,J’¹ó°ª¸.º9Øq£@CÅЉK§TÐÞeÙO2Ž:aSxã}益ȧóÇT,9f®{7ŸªzþÅêø¸ËÁzì{CŸ%‘w?n²Úµ~kwú“¬: 7j¹L‡*ò,4£©ê“ØýW ZÙaB÷8äq>‰|Þ^]ÞÀgîl¶Üìÿ«ëjÅ;5÷l÷[½ëZsÙ¿9_§îó¡Ä×Jò™\°Rƒi»¯±ù$Þ+Ó¿/o¨ûИ¶ðÓÒUÍl°³© I_Ws§LéN•>õÝðÐfém=E{Ú6 åÞ®Ê. €5ç væëY¬¬W[1²ä m8›åîd.FÛ-0²û §ž©É\Åc[—å›DÜVîa]~‰på‹>Ê)$R¬u—ÿRAž€ìÙ7/LóI矖%>ð$±•«Èõt°9ú$êëÆ ‰›¸¥RO¾¾xu;ÒÁÑrÝÌ¥;õ±ÁÒ«ø¥¾ß§Êï ;Â’Š´NyjÎô¯H©XÃ+y;mÕ’ì;l./GñÏí@BÀFÛ€Þ:ÁÈdÙmIsÂ?ÄJw¨­0ž-nL4l?øþعc¯¸ªâé öÜWÞë;;~üà·ùt3ÙÛ»çµáíº(—ÀÂû½s`×9ø_/ûÖŒì0¹óSÞw¨ÅýðS.GÛÉì ÖžÖå!p^G”Õ1 øQÿÖ‰£•h#€¿¼ñÆÿÔ·÷á´ü_¨ÿ7ù,éÜÓì,¾ÕÁË^MÜ ØO Yœêíää«ôׯ'ÚÒ2þ Ó¢þ3üÈÿ'R ùñ ÿ€Â˜öŸ 5@æíÅ! ùß À€ýY p¼öÿ»üO$í 0PûÿÒ´Óÿ'H ð'æ þ(0dÿ_TdÚþH8åÿ‚3öÿÙtàqÛôwó¿‘hü¾>ÿºhÿ/2¦ÿ{&Dâ'®ÿ08¨ýúö'²^ÿšÿ ?²?Ëõÿ ýOPø‘ýY®ÿõÿ@uúD0õÿˆþ}~äÿ,×ÿƒò?AO ª"©*‰ÆÁá(U,O!"d4CA£0X2‰@Á£à˜ß꤆`˜ù?«õÿÐÐõ(ŒiVêÿAñà "ÎhCbþ?‘—áJPûqôÿþ¥ í˜þÏJý?hüÆ·?‹ôÿ û À¨ýA×ÿƒòÿAá÷nÿY}ô~Æ÷éÿAÏÆí²þ¤ÿ LÛ,ý?hü öÿ¿ÍüŸåúPü…ñìÏ2ý?èú²ÿHŠ(œŠ§RUqh*IBRád8CÆcÉT$ ' È•B&#HXæõÿ_ŸÿDÀQ4ý—‘ü?¨ýŸ|þúÌè÷ýjùU-?f5û&¢Œ¥û÷­à·…žæ?…žàdèþý[ «õÇÒ%dFÿžÆß˜…Qý?1X ¾v·!Òï6Ã!¥6ë-zš€ôôÿ–]” Ëë<zvpv˜ÜÙVVZºž¡Å1®"Þ«U®ÕTל®]ZÔk _î¶[²M¸‡o“‰Br›|â,=M@zZÞ˜G·Œ‰ý6ó—mX“l¸3ZôØ}¿º³K¥nG½zz7=Aàܪýí‚yiô´þvgïR;QÓ+w’í´ºi¶þÔ·A¡¹* %u`ªÔˆ,¥åÖ+×7žÛÉIOë¯-úÂéFQëGf…Q²µ¼"‚BM ëÿívÍÝY¯y3SxÑŸÏÝvõD?¤§ øEëoþíõ4½?šÖŸvwp¶æàb{?3šÞMçï:áfá< !Þ¸ìÌSp‹M¦4¿£ŸU¾hýµwEÒôþ€°–„Æ'£œ2Àû @hv^ØÌá „³…Àû~à75à5ø œ‹\<£ñ³ø/í¿$à}ðÝUà·(ÁÈ~¯Š*Ó¦XínRÜ{âIàëªÛšzÕf˜›=´Ì)_o¸3 ƒ`9“ÐÿcZÿƒF~ÛÿÃAχ¿éÿ‰Œê¨Ý é’­zÛšv¢\¦ƒk•p ¦ñ3‰r—5™94Ñ7‘š(O?þîS³¦gžXz—ó­g§šÝY]™¾¥E s-’-³6̺sv…vBl€8â ¨¶ØYdµ›·£¥>Ýç|[Váú"Í¢áð3io¬\ZæîéPP /šgñÜBÿ†)G5"¡¡ÙäŒpý}ô‡ØÀ^× -Eà ž_Xv›8 ¾ÃT%ØY»å/շЛ˅´úB‡<§§&žäÃi'¦·á„­½Å‡Ús¬Êm–.»¶á‚‚—°\GÒ¥ðò¥ãœ) Úˆf©O¸¼Qvù"< õ¶ÂÓE°/®†IIèÍT5>¹jªnYW~b*ÿ6A ±×ÆÌ‚Á¾ÜjÙÈîuCðpË´Ø„†K"§).¾%úò ÍïRÊŸj|ºäj1œõ§|§úÙ{$‹{omØ*óa«ùWË~§¨G‰” – -8¾Øá,#·ÑrÅ* NïV+QDË0ž[·[ŸhÛÅËç6ÆÝ™ò(Ë[ÞÔmiÎÁ“kQ³s×ï¯x²ëöGôš÷-Þr•5ZÌ4Ùi †"”†ºö Eêíëëó³HÕ®¹1Ü‘ÝZàá‹ÅŸ¯Z–YXWs/¢Í"¥°WçÏãŸÎœ7ù\ór ùhLÏ2¥Áçml~ìÞWµo|w*¢þÌ‘^û‰siÈÃì$[ç©Ó‡ü§É¶}ˆk6¼{úirìêð]Q3ôí1YwBÒÃD²´Âo”eîú-~*ì.¶òôÊòÿEÂóÔu3¨G]Q»²þ ÒC¥ Qtûæ“›oÂÔçÄ:”­ö>Ïdo›››´[h¾¤ìµ›¼Ê)°¦§÷žÆà©ÖHgóTws±çH1 Á§å|iO´ þ:´¡ìˆ‘CûXp÷éÐh¯{Ÿ©´ëmjY[ÎoÐ`¸·½íÌñs›¸ï;¯Q›ž2#壦…û»àÛÊ®{f¼:((•OzèÉá.;'³»lž½*ÌÝ›jDÁUDD×ƒí©¼–|Ü|ƒ²ç’òëSÛ•"º «‡;Šo 8.0½¹ a/¶å“£áâWË.–ö–Èx­ï±®Í¡ê\µäkÁå/.ëj%Ñ‘ÿ;5•vh­B¤D³l ¦š~•ÿK å©ÝMN6BÌ£̹­Ox|øÏ^¹K|Öæ±›^IóÍüS?˜cjOuÕÓ™6-bM‘‚-é-¢«SŽlջĎ%ŠvÛ›yÓ=E¹káùž™ÆåÊ"%*Ï »`7–5KáŸÓSÿK»z½v}k} NÐè\bñåû”›|Ã.æ—Ø´IÔÊßj®õ•Ý­™C -V˜–|Rï,?Ý/õüøþøØDÓ„ƒ¥¶ý׺;¢5:ÆtoŽ8âk™öAqGšœ²UîŠiöPUo«†•FüÅKgO‡½!] ôp1Ø—Øþ¦ÿ÷>[:̵4@&Õò&帹U¾*bïÌ.Øî#µôÑÌbûäEݺéIIWäâO<5*ïÕiˆýì5D~P›sZÆ+VŽ6[ûjÄô&E’»|™bæ²ÁÎ=:¢–®Ý§=pï —¨„BhØÁ¹¼ojœ/ô×Ë8;ŸÙœdç‚„ÁŽW` ¿S˜ìô ¢‚ôz¾¬náÇæGý?–ëÿA÷ÿ@Aý?†Gÿ )ß‹ù?Ëõÿ ñPÓþ¬Ôÿƒæƒögþ¤ÿ ÿÒ´ÓÿY©ÿé€Cö_ÿ ‡òAûƒªÿåÿ€¤ÿ÷ßfLÿg¥þÔþƒ}û“X¯ÿÍÿ…ÙŸåúÐó?@áGög¹þÔÿÖéÿ‘ÀÔÿ#Aúôù‘ÿ³\ÿÊÿ šˆÃ#ª‡&’à$UG¢ITžJBP°$8Ž@~«“‚a~äÿ,×ÿƒ®ÿ@aLû³RÿŠÿ gqF óÿI¼ W „Ú£ÿ÷/mhÇôÖéÿAã? 1¾ýY¤ÿÝÿFíºþjÿÁà÷nÿY}ô~Æ÷éÿAÏÆí²þ¤ÿ LÛ,ý?hü öÿ¿ÍüŸåúPü…ñìÏ2ý?èú²ÿHŠ(C&aqx žL!¨’P…‚& T2Y•ŠÀªâ‰D4G¡R~Qÿö;’6 jÿÁ`õÿØ,ì?YÕ œˆò3:‚“UÕ#œ mAfõ÷2Éò­6âÏF´§3X¾hŽU„aßèÿ YôŠn›;gaÕÉöºUåyòrô4éiý­|ß|BFóØ®[ê«fE%„ÞÔ|å˽­¹¹"-º?Cd󮉞†Ÿ3;õI$LDÍ"eÁn–çÞl ÿ„Þ•ž®= ¿rͽ6IW\On…‡]]W²9V7¼¬‰{Ö}Þ'®é[¥ø&n|lõ¼ziËå ¹/gë–ô»IUÌù$æÄæưÖ]¿Á[ýJ¯_LaßIáâP0ó\*œOü¤„— ×}A^Ï#“Vñ4ý•UÞ9¸q%M¦ý‡Ô—­;Z\rަùýdš,M÷/'&r&Móoï–0õó F4Í¿'iïM:† _Ÿp¥Ìÿ¢ýGÓý£¶v­ŒàµŠ fº’ ýãÔB‹3roïC€" |¶>ç g)þçËàï†F}f ð'‹¦ßMIBÌNÍ%WÖ\šò&ñ ‚åLBÿiý?$þmÿÊÿ‰ïõÿ4G…ÉT‹_¥H`ŽÈü!º¡2úJœÁ)šD]¨XïËÒ?uŸòôÕùîÞ÷ˆi}f©srCâx¬xömÿC k~¸f•ùN<æR_}µÚ@NjÌêÊy I\p”¿"óñV†½r,¢È¨hmQs¸h‡yAëú£h\•ºÀü´:ûwp­§Æ[¼rSÒB¾ ¬É~þº~¿éÓ‡ŒRRÆÇO¾03•ÇB«ŽÖµœV×]o}CóÃ$ÃçË%}äõ›!Ø@ÞtI:¹ýyCŸ‡ÑÂ"S>þð4Ç·—ˆ"¯î“Ç^ìšõ0·ú׊Pí}f×JèD)Î3ë®ä4ºóc}¢k";©0K×JÖþt݉B뛺7ÝoÄ´HÅz”¨¼,YrÿÁ²ò¶¯ãÊìµ™&ž·{/[ä6ë8²~$x.ÐÉ]Y] s`Am×{_˜ì“—:‡F*ñµ²ú+85‡Ê]:z«HæÏã¶<òO_ªšI Æ Çߨ“˜e¿×+ò„²ÒÜ”ýü½š¸v³{7bˆ§îØ-žõ>s<ंÝ#Î=W{|Oõå>±Ø\úÏT©³§¶‰,9¶©œ£À!î˜âú•fìÆ‡ 6k2MÍ%óŠIG¸=Në~_b¹­åCªÒ¹mé«Ï§¿»ü–}N[§‰Nä·R…ú+­ gÇ–ïêŒÙQäР!“/u³ïËÇóHió_Õ¬;€mW—^©G¾(˜%p“×(ø–LZ8SWÎqf®¹cF•t~>E6eIªXÙœŒŒk¾Ó|³ù1ÌÿE§ïq\ou”Ï‚Á¥«)1Iïô I÷4ôNð§†?¾xíG´6špûôµÛ O®s®yÅ¡n©“ûR¡Džóƒ)£¢•„ÃNkGE+•ìïw ÊÔ*´\W/Sg>{ï’ØýRqíþZ+Öu&W…ÎS½w6o‰3£äa_IŠÝ¿Xe·Iµ»UIMŽðÅÛc:÷Î7'7ãŸïî1­h5zÒ¹µÊ½ýò3’xØÂRƒµ¦ Mzø÷c×~öÉZh2\ÿ2‘² ¶“ñ¼u–¶ìÄ-©£Ò÷°êD𨇭>µˆ÷ö¡ýI%—9_ñ°ÌZ¡HbaãÆÍU•/6×åÛ>÷·´,Qþöi£‹|‘u‘n‘ûíûk+Þ'±{´†Íì0Þƒì’ߋīȼ(Þ÷6{Hoë)ÚÓ¶Á`(÷vU†üpQ¬9W°3‡í" Úp6ËÜ!l}-ï^9è~Óì@ÐLÃBg›áêž(]Ë†Ó ís7%ñà ñ÷ü²á+¶ CÚ†êoã׿®N¦¯˜‰¿ú·QÓ£×du{ùÿõÿX®ÿé?ƒƒú þAR¿?ò–ëÿAã? 0¦ýY¨ÿ‡„æƒögþ¤ÿ ÿÒ´ÓÿY©ÿé€Cög…þ”ÿ ÌØTý?(ÿ ý¿ÿ6cú?+õÿ öFì?‘“½éÀŒýGç#±X¨ý…ØKœ”S€9ÿ§é?¢8èþ(|k,Y•D@’àH* I@±p…&RðdšITñdª*ƒb²c6ÒÅküñ¿ñ8ƒÉÿ„Có@Á‡M¿ô®± µÝ«¬lXZn,_®»n‚žÒ:%ùŠ:C³ÐÖgŠ«ï®É\·œÇÃ=fV+LëǦdÍÛ¿«|‡”—”;Ls£¢%«wâ'ø‡ÿãPÿšøÝÿ‡oíOƪb)H4Š@ a(ªDU¼*‰EáðT,M!ñT"žˆÄ1·ñâ?ükþï—øÂBÏÿ…/ñEa2ü³¹ñÌVbuí!~•øÿD${Ò©øÅÑâ?ÿƒÂ÷öìOÆHT* …#£UáHŽ$°T<Ð.¥Š'PИï“=é0NüG!Ðߨ‰Äb üOP˜ÀüOFa4Ot¬¼Ñ_ÉëüÕœËñò0¦Œ•‹ÉË`áû…2Qù“7I/Or"Ë·9—¿cù’ÊHè—\PaFs=ç·õº4dÖº²¹ÎÚQ,‚=–×NuSBñQ¡ÉÝ3Þ×§Ì'¹( ñ«Ép$½\÷–k·`xDѲæiÑ•Ì^y¼_{w˜YËi‡ø7ï3œiÁ¦h¬~‰xåRå3 Z FóOqFÙ;ÙD|V¶*É7?„°â²Š©éŽ™¯±]ڶʳx wÏlù™¾< 羡—OJ/w4ðˆWÕ%³Žýæ(øÇ™ÜýER5ôrGg¾{¼ôÁ“∫ÈôY¶OéHoØd¾¢Ùã´iÆçŒäG{7òæÒËe4׳'œgõ›Y7ç'XwW·{Ãë†;•†¬§¶ïiɹËÖöhžApêNÑ}GÕÑ´<Ï!Ù½vìSªŸq‹#/Sž®-|(þ’¦ÂKËý¤å}ŠL}Ñå{R^iƒÈ÷ÛŽ?hyŸ_ò<Š~¸‡{„ÀϹŽ¡4q÷0j„Ãv ,f!¨ø-XFx¥MõªÞ‹¿±iŠ%ðÐ+䢽ŠË&ÐbƒhhÅ'\Í~Åã ·?N_4û$))G±ÄÔ]=£¯eå±›õeUG‘g­ ÌÖvth·Ýµîï}rüóµrËbk£Ó'¾¦þfk+Ù«NædPR:Ÿ*_8ç¸qÝ~š"5\ÙüÅ}þ¼oÝÉݯ±šg­71մضuÁògÊ©wRßwÝV™"öêXFßQJzÙ~«WÉì®t¾G·ÚsZð -&½VOŸ*öjšù gÖø:…ßÅLhG”,ó¸£e[à­t?î¸}Œcú»ôfË"‡¢æ*÷84ìãÞd˜Îíµ½jXØÊs“×2=GÔErSs§a^²Í§-‘ŠŸ¯<4nMÏh½œØŒçµQÐÝ¥ûâ1U‰ãÚÇÏ“r/1-‰v \Óe$¿qYñ«3Q·HÄ©Bä΄GÍ]-ѨÜ¥XZàç÷ ºN’ý…nú¬gÛ«ÁOBç,u÷Êd¦º$ç T‰dÔŠv5ƒ;Y„sæ~/W7žšsåÍéìui¯×:¤gã7âÍ?Z¸Ï]~ÎC¥CV€ØÖ5Ï™»¨Kø?Ef×»¯‰f/™í¼m°â¼ßŒÓÃo%=‡k üw“¤}à83 ŠŽÝãË~~¦þÐaZiØ×”×0‰ò{\¡rÃAçn¨iÝÀJ'··5miµè;TÆ/¢-•]t•DÊh´¨%[:²ké(Ȳ0]¬]¦.œy$¤Åì•Ïv³é˜EœÏIß9±AyŽÍ œ›Bß¡f¹fÉæk¶;=†©¿›?Øuyj»`4Ö:Þ61(“)’#ÁµŠûüÄøœ0 Яš_¸Þ¹µñNÔžµð¢yÝíá²v¶jͦ=úgMlû²±ç?¿9\£qYmVümJÀ¾Ô Áõù°æÚçÓ’]Ãôš ÃúT‹Â$ ®Ë¬YÕÅ{uÆlÝ[Aà˜v9kæy¬/*¬Y1eï²yé$íø´*¼¼Á¶¢S²ég·ò:_<[fÜs”o>Q5qÖkõcgô}èuðŠT}½\ÁyžÓÙ™™ÓQNçÒ¢ylè”üÜï§‘>œû(¥2îrOôù¦…Saîëðgÿ—zX©_¡xwäF§5s_¼·×Ñ‹â)ØƸ=Ù¶Ž©ïæ¬8Ô/CM=Ey‘Œô_výSûÙ}\*ƒ1A/ó j­r²T)ã&´N+/Ô 5á{ï­_Úí=s®ä¶!ÿ<ÓÌQ×·ïQkZëœÿèk«Z'ðz]»ÁÃ.Ó ³!­S¨mÁ;+Ôâ«§É»eKÙ„l[ˆÎ^ÞzíÖÂÜÚ‹÷¦¥Éò¾©q ¼Ðo\g,ãì|fs’[óm"\Ïæ÷I cî>îɬ¹_Æñ8ñ¹‡ÙîÖó¯~ÁÛ[ !ô}’í¤$Õ2™èÊZSβH!‹h½¬}l®×GbÏ{òö EgCô­w¹JvÝÓŽ ¯œ¿êÐÛeÊöýj¹= 4[fGˆv…miQ±ì©9¾mC{WFÇÑ|;qe=ªÜÓ졪ÞV +ø‹—Ξ9zCºkå´ öÃÎ'‘M ÖüyˆmˆmŠp[ô…-Ò¢ÖÌ ¢dkyE…šä®zµ\`ï %`Y,ìîè²Ââam2%oNœ®n”ýö@^˜ž>Î&±¢°ywŸÄÁ{qȵ:? P… q¼%Ïü…ô]z—¬îî@|ÃHÿ"“}é@ëä©ÿ‹Æ~{ÿ…†æ€ƒù¿T …ˆ$SÉ \•‚Çã(h"–¤ GPpdUMÂc8< A¦ó4Dæþš… .#þ?‘ɾt`~þ„hü¾Ú‚’}éðã¿4I0Èþ ðÕþ”ìGæý……žÿßÛÿ“ýèÀ¼ÿcÐó?Áá‡öŸÀ@×ÿÿgþÍÿ1 ”ÿ Pþß›¯þ?AÉ~tø‰ö=ÿ‚yþ'Ý‘7htig-2.4.1/test/files/scala-js-benchmarks.tgz000066400000000000000000002624741332650737300207500ustar00rootroot00000000000000‹'ÐûSì»ePѺ÷Ù·à œàîîÁIp‡àAƒ„à\ƒ[pH€`ÁBp ÜA‚»×Y9'wê̺óÖ[S÷̇¹«êG³ww¯õÈÿyz}ØÍjeãÆý÷v0øxxþyäýçŒÿ8þãN.>^>n>>.ˆ|â†(yþ›íúÇxåêfêBI ½p|éjinú_^çamiiÿï0èß;Xÿä_^FBú¿q? æåæþ¯óÏÉ÷ùçåcÿGþyy¸ JöÿF›þÏñÿóü»X¾¤\Ù¬-M-\ÙL]Ý,]Ðþ¿6ëÆ¿iü£þÍl-ÍÝ\ÿ»žÿûýŸ“\ö?ýÿß0þ/ùw25·ûoÁÿ~þ¹xÙ¹þ'ÿÿŽñÏÿŸ?,ìܦüÜ\fü–/8MùxùÍøØ,^ðpñóòsr𛛚 ppp™²ÚXxþ/×ø“`îÿòùÏÅÁÎýGþ¹¸ù vNN^°%øŸçÿ¿aÜ»©šƒ€@ Ð,@ Hdr%€@ 0˜Ìy`p8ÿÂàüE Hýå϶T (ž”ª5€&àà9@ ÷ýÁð/Æ€?96üñÛ`ý/Øìþò'Ûq¸ÜžÿÂkÀ€Ï_üþ€@@  D¢ÿˆ$Rÿé€L@6 ÷/y€B@1 PöŸ(Tþ¥ú/5€z@#à   Ðü/´Ú]€@/àû_CŒÆ€IÀÔ¿ð0 ø ˜,–+€µ¿lv»9ýåp ¸\nwš„!€a`C z„=`þè† Àù .ÿ/@§0Ð&Œ@ x  €FaŒ Q <õ`@“0nÐ$Œÿ/@—0 I˜@ì/âÿÐ' è& Pü Ð' èô Sh´Ú KÐ# èfú CÐ!ìh4šƒ9œ@w°W€7àÍ_€Ö`@g°· 1Ð,ð—w€dÐì=h–(üK àã_J!’¯³Æ ;{wôêÙW"éŸò@Ló)~ÄìÍ¡ÈÕx‰Ïg4S:ÙKsFtÃ)Ž1Na †ªFÀÄ0jÔílq®ä mÒ*”žŽóÁTݹ¢¿©š–NB¶6OU \ØËྡ­Ô~Ó“ÜÇð~ô†)gîš"¹ˆ$ä^øƒ×É"ñ/ε0RøýÁE¥ˆÇH3µÙ[Üle‘ö½Qä>‰k¡”e;Zß‚ƒ„è÷–4¯öyë±=Uë·è6£Ü3RO¤{t>'‰4n9¿ÉuGáGd¡}ÎdNs´¦ÞiÇn‰ SñÌ™GzÈkŽÛNRNÆ<•­!3Ú*v±½„”@*Zs3ÔÔõõ<–»Ã+ìC®Øßªuñ>/¹›y·]êðܸ%ˆ ‘6»îIró¯G¡ò!+(C»+¢ìF]~F*T›Ì.VÏZQÝnV• /JT}Éïlï³›hGÎPƒÂÌØÑóê‡k|ç ‹S%Åý$SY`‹~ ž›%zP.ìQ» Þ 2ñi|Vª“*æµÄ™…®íš˜Yå[%ñì`Á¼â[¶"ëé<]Ú‡9¿—‰°“Ùå}6tetѤ•Ÿ.±EOpÇÁDÅ 0ŸR8•¢rÑ×®UË5Áy\ÛCeN6¼QŒ²Âb¬L9s¼ˆãFó-ND¤{÷ñU»g’±‡k{Î)νÍâ'‘<Âõm8E°ó„¶.S3¢Í¥Ý†Ï“Ák f‚ç§#žˆo~¢RÂ|i5+Z¯ßíûÎ~M4ù±÷Ý›ʆž~?k|†_¯?nÍ&¥Ãs› ÙâI?$øÂX#ÁêÄJU1J2°óÝ÷žÏš„Y.gðاg¬ÎJž->H4-3Àƒ!ãâ1ÞÞ’žr»…1Ñ2©ËY+¦bÔñ –[Òð›…°ÏÄjŸt©w½ÑnÌôÄB޲ω«>h*eríH9†+Ë/ËÙ=›ô¼U7rõGÃ|…9ËÒ6OòtÏéEy^µÃwHúܼD*jüÕ/2Kp V% REBjö-ÃÔL»vY=k÷NT°x¯ÓÆi6Í\ âØ¼=#Jų!Ã:÷Æxt©¥(³îæ7eØ&B.•¬O¶lÈŸ|Yy“I©gE“#±sU7ajIÎÿ-‰ºÏ&¢Uƒ½zMìøÓØ3=oòïšÆµÙ/é‰÷«,1QˆÇ”cŠ4öéà<'dŠ‘oµûˆ‘S1ðÁ¿$êÊÂxp0ãKoT4{³L¥ô Žž¥Â»§~ë³(®ðäg{‹j¨Ž-® ng4.dEkKÏ«à…`?5¬M‘Q¡×Âá·|Ràê-ø,ćú]Ç‘)9½áÒüP|; :§†&*uÙ´÷©ÅuhëÚÌ|]d¡Î ?õ¯˜W–žÒi‡×S• ÊrÆ‹~É竽¾V¶OÎ1…Ü]rªÌò>>ÌÂGsÌ{Íî*²ž†EŠrÓýh./Ÿn¨†•A;%FÇ>ô¼.ïü±ºÒ˜T•üæÏƒ/S¶íT¹–"XaYÃ?az~jû#ÐS5zyK†£¦ØS4í¯Š}»²^á:M\ÃPÆÑ»yjÚbçÁ6ÖØŒþuQ§jRÙŒHjg‹ ¡×n•aƒ‰À¶¥TåƒÃã'^§äæÒ7LaÙ R«›/¯Uæ‘Þymo¿°žC¾2* ‰‹ÂUeÞ(>ïs–sÁÒy×Siî<°¥®Åà§´rcÿþ¦~8Üôæã£oÍê6"5 ê¶-spªÏBƒbvgÑG4ÌãÅ$Ï8ÖÀ’TÍ4hØû5M3gfÛæøB®QF*¤W4 Ç#$­rò…Æ~ ·âÝ jÓ*hü 7»È<— h`ƒIóéYdҧ¨Ó…|oqοsPÂŽÞWÃVd:Ìöã_r¦£æÒs u7ãàˆ&Æ?ûÊå:Ô߇?Ÿ¯5D( sY÷_šÎ~ÒiF«£ŸC¬µÄ[ñ@=‚£gdL«WL{ôkM1´œ#¯ã™’™Mº(¾©¢ÃVçÿ3e[¸îÕMŽqÖ0ªnG]•Ù} kÛЬH ÿ{Y/Õ7º&اRKå xp畽¦qQ<Òu-Gî6ç¤W½rˆÚL–@×gù䉃lTHáHÔõU¶ôëeÀо´ ÛU5íN+=Ηý–H¬çšX,úS¿^Àò]¼k-t ”¡³0ˆ÷‘¤0Û=ÄaãìR²‰µ&6D¢Lê- èÞϳÇu=j‰34 ÜŽ¬é¸fgTNßÇ5 (‘7ô7±sù·Œ—óÎtB]tNq¥vÔ0¸޹×÷H˜1no1áí«ºË’R#£kéÁ(Üåe 'ÇöÏ­Ïyd^ÅÍk7,X$®.«q¾Ú8”d3Úš7¯/E2rg¬ )¥yê€R6n‡ÓþUìºÛEð¬’ĵ¢É¡43»ÑÉ! ó»qnNõ Ú“{ÍÞæ_/¦Ü6X®X~Ê+Íþ–œyËÿÚüBYž"6é@(C¶vû ‹ÇÉœ=ËB(xØ|¬±&3eôŘo~3vÛLœÅO:ý…ç<Ó‰"Ø–.­¢ù¯ÐЧ9¤7ªú¥c^ Yž‰å®%2àÞ9u_ölRgzcy‰_þóÙ¤ædÎbŒzM‹AÝ*ÿüî•|gÙW¹*xÓùqqU™uk¡²½¹Ðàˆ·çƒÝZÐ+]«AkÉüi³R'337;øä²AápÖ¥‚o+ S‹²±\è{¶p¯môˆyVåòË?gª—[A+ãš±ùÀFÙ ñ”®mÕ:þHâ½±•9žx’eâš¿íNQ6™&Wì®gëVM‹¢ä=¯—€ÙpÅ%ôÉÕv‰1nÔäÔÝ÷½ÖÕ¦öS}?É ÛóP hílÿ|'²ßÌŠ•£û¾ÍîõA;·ù]â£|ø(’%ê÷£˜Žm|Ô­¯ˆÞ! !¬yää âÚ:ÑÑC'L£(ܺbÃ$“};ú:‰5U_ˆk¼þ`u+e@<ÇÅ¿â4Y†‘2K+ûµ61¶‘éc‹LÔ©‹ÕÆHîCáW܆^¸<}®©íÇ.ÇœŒ¢¢\Ã×ýQ˜&}ž‹<²:¹nš>´^ZˆÂ‰wøùÔЦƒ^ àšÌv~„u<êxEE¾zºc±’ý–<Ûà0¿5AÂü‹ŽfΫØO:ƒùqEܪµ)¬ôþ¸ë¯F~¹¬;© êùp5$6³Ç³.p¹û1ˆ‘\veå`(~. ’íž™ôÀû{¿ˆ?ÉJZjWƒ¼û«ÔÓ´²'s©Êú&øCkÇž2IÃ[òX¾h(îéo3Â%±¼8 ¨c’ë .½6­¢æßeðy]÷¹sšíR=ê/ 7.¹nBÝc²BØy¸.F!þ^ßíqO‰zSuŽ2ú±‰ÝŠH)º„€Œ“®Ù§b-i®-޶%aißKƒ€0Ó‘Ïç$ZàµÞ÷£»ë]k--n~Z=_¾÷•G(ûnxϳøvµÐ5š}%»Ó )öæYúlsØñÕzÖ¨Hv|[¤NbX²G£?VoBvƒ>¢~Ž>F5¾Òt<ñíâ:¼j|~­¼êlô !œc‹£·¿;ÁËà+U¤wøÊâ)Ÿ¹Óqøþ„OO½áfiÊßS\xnë©åË ö¡gÆâ)ú´½.å{ ³ʽ€^B>W|Ñ/WúáHK»v MN7ÛF´sÍ, ãäh+Ÿ4*¤ƒ r3ÐÉ|°å=Å|‰è¿{D‹L ”Õêè¥]jª½”37ùÔ»<[FçówqäåϹR´5yA;¿·A¶+†Ï£×4¯~=‹ûnÐfÚ±nsÑõÔ“f»¡çÚM/53L]tH´MÕuûÆ–»È\Áò§;UØãÝÌRb!Ë!Ìx±éÆÍƒÄ0ôL¶E{qãúƒðbÛXh?\QsQæ.Y:'kÞG×Ï™þ0s[#qE-wOúÛFàx€T6‚Jd7óŠÅ!Á#T=Æ»5üX)Ö1ºyC»×8¬8,T/^ບÍ%Æ&á&êZBº2t=Ïûw*T‹dâ^"kÀlíúÙ÷?v Hã6jˆûÁ¤¥SG“¤IûëqPƒ§ Iüýuß›ÍÁ}—ªªˆ{ÔБé+ë1Æ)âÈZwúŠ™„ŒWv„twvº ùÆ%Ýn÷óL$b •ß¿ü¾6ðUB (øö³¢—êÛ»ç]%ˆdM ûv©ÑúŠä\qï6ãáµ2|hoOi÷V¼ï{wWoük “$t(½_þ)¥ªÄ–>óê†/«¾çWšt–½ò‡([fäÄ®±>:ÿ¬¥ªj¶+œy/´gÚI8¶¯š$bNeÃýŒ~|SxY–m \Æ5àb$à½è@3gDÑr‘òv-‘êóÏ÷ñ ÖJ—¿CS7mcÂÏ“óϠЯë7¯&R.`ŽE…”ûˆ_ÑÐ×o4³6ÀÎ9•+2ñ7ÿ«ÅÑX¿ žl¤úM6›—ÆK*Œ•„è2p’5§Fy|œôŠ%Gñ5ô½â"ÞwØNÃʕ쪮¼«–í৺AÉ|(Úã•!•[~’׸!"ŸO.Í5F÷…ˆË3ÃðÃN²Þ{µg91’͇sZ-±JÖÂn u˜$n)o\»áÐ5QRT26;UÅZÞ Nçµ,òoO?%ʬ–( q¶ìUv¢´°D¯/›ýzÍñ¸Ä=7;¥­òwJoH9»}ûûrý¥J§ÚᄎÕ,õM8[çïûâ<óìJÏΙ!ôƒÍ§WÎðbï†Âm~<™oùD1×ÚÚzà’Ø–#?Ú5>Ÿ]÷”YÜbE‰Ñ~H–ÓbJ%Ùz¿à²ôáC]¬€Dß.ç"¢Á¬ˆÖz´qqÒñP®NMÏe©k–ó[-ìÛ7oÙ‘ö0·“r+jÜèU"Ùç¢ å›Ïe yÙ¹sGsñR¢«&§¿^.™ÁvœîóÐY+_·8q”ˬ(ÅFº—»»æãÀצíXé>`< £¦ùÝŒ¥"—Ÿ/DŒCûôr…á`êŽX›èyžÈ‡VcôhÙ¦Át²OéÑ*tx’Xï ,ÔÇ7´ úç:W0È=FêÍ Ævtl/;ÓN¯VôQ~›t˜8.¸_/luT89±îÔ= )¤·¸[ùTøƒ–²ÂK-‰JžÀÛ˜]±Û̱pU##Ù,±\ÁÖ¼RŒ·×mS½3{÷4 ÆO:^v²#Pøœ? ˆLœš—jÍö³Rü%Æô.Û“µEÞÈm«ÚU‹ÔÇÒƒ°å€S½Åä㊢-'~êç}®Ï²Šn‹/¸‹ÝNÔK¶\lð Lõu+‰›(–‹Ó(¤ñNß+9û‰7eöp ­¡Ç•(ÚÔgúÊÈ®¹ Æj3r}ßÚúàÔË O«ƒët"&ÝÁnkóÁõ•ƒâüA79£ð±Q2á0{ÿG±²¸Ô ^D[ãiÚ^~’¼ÃeøEw&;†|£¡OŠXNå{,®•‹ÇÿÔÎâhiºÚ>}Éžc¡Ç¡ú U=ÂbMöuèÇrŸjd5]Cþ™J2ÓßäV߸~Ôò|íõÿÀõ˜« >5Kw¯TpŽƒíT<6\zVšÜTÔSf1ÚoÁ‹ÑŠq¸34ªXãˆùâ—¤ÝY¸ƒ®glÚÚ¡”Ú§ÏÝ;G)¯Œ8Ó¼Ü-lcç.?K4Ò¾¼íÊÂpÑj÷*¾–TŒüì—.Mçú‚ Ãÿî¦â{Ï3nUôžÏåGÞOÅ:E'ýQýûú/l~î3yóÈ3F²G>béË.ß²ÅG}‡¼ººl냫|¶ƒnÒ®ÀA-ú!,Ìh„vÕ…§Òƒ qÒÔÒ×Ð&ŽY²‰z…Úþ*Ë(é/ªÍ™7ªÔ ü»r€nNØ…„°ÿ¬N¨RMF4žŒ‹D Íײ²Ì¯[éU}ú¾ÿ­·@=WTþ® ¦^%NŠ–sÂP»¬!z¯¬äáܦ Ìy½ß0G_5n•‹‚ÅQËÆo_ણŸˆ\QxRůàV]4ú™·÷-Vuw[™¸¥ë6ÐRÙ5¾£ÙøàAÙãå0«½{Ž~Æ3ÂýÅÎ0 ÉjíÎ qÎg)ÁÇÛE­éZÄ‚Íõé²Ïn½y÷Ésñü¯ŽÙÁS£OÐb ÎÂ_8ì?mÿšñä°îÒ›®ïàå{?sI…±QýŒf¶|·}Ôo¶Ô}Ń«fª_Ƕ ý˜Àk«9;;ò7ím­3PG·h߯>¸4û®ïĈ¼Yi[A5©¶”g¼yä>Å}ÛªzÝ#×}›BTÑZ¼dáÒöÅ}耸¸ÕñçÞÎQHëJäýg±uÅ%£2WÝ·Jî” m„d~˜è[š½µ 0;|ÙÆÚÊr+ò²[Rùb&b6èÛ¹‘Úüoûå}NÊ»:Ÿ†¼áèYbtÚYÃØJKÑ6:Ö„K(<*içÚgNÙé(=¦é°åÓ7)¼i0IÒW:&`¹ü~?9¢—¿çJqeQ… Øtlã ¨|7™ŠS]ÔÛS {¸ÏcÙiÕwB¡k`Ý¢cgî†û*kòAçO¶ë!ao>üj䮤w½ŸX¢°ºwo߯´+ÍÇ|ªD×#äsÂÖcsÚãÏlÂJ(@ã_źá<©ƒ<Öãω{GPÒwÙÒÚ’‘ž=0ÞSªÿvúu[C¢lÕžÑ÷¹eéz–oëAõxÌnÍÑ92Îm‡ƒ°þOsg½Ä•1µ•† ʧ6ôåJ¶YDº"{OÑH&ò›L´ßte½ª_ʽéÏEJër\y6à&ûvZ¬G$pvSÊÄ壉€ø™¹°í»Nâ- Ç´AËC? ,ÇiÄ‹Ý_uÆ/~Mpfä®´û7G¸Ýå.ο¢-•ë”ÜÈ{¯HPþ#‹Ñà e…~¨­Qõ“ÊÍÁ«gNB‡æÌ®ªÙÃá\µ¿ÌQD1Œsõµ»Æ„¯"ˆGø „f{c±ëÂNËò=ù’FÄ-‰gÅC`NÏg)1ÖzîéF÷IUG‰ìâ_o.Ú5”ºýê{9R¹ÎWŠ[ `ݲmÃWww>ö´'5=Ê¿.š@ܵ1)¬ÅMø{À˜2ܵ¾”ÐàP^m7Þ7 â™ù¸Pvhv™Å`¿ ÇN±n13AcÃ΄[Z9é0Õ]‰CUYÙðêŒíDó£àEo›{¢þì¦ç;»q³ÉdVÄù/h|?ùò¦žf(¸[Bƒ“wØQ¥?¾6ËÓ#Ó©ei3¬RM!wÞâ쎑Ñé7öY˜Ô1fÿPŽ~E²Oz!‘­>Û_Ü~¹ ÿ±4éÈlS«Óxಛ¬þ£UMLfÚ(¾šä°ìÈå¬PŸYÉ–,ñ¦ÔÛª1µcFU¸ŠÍ–À(]6©h¿ºrØÁšÑ€ pþ¥Y’Ä´ñnÌý^Úÿ§»ìóP¿ä‚ÕüÏÛ ¤›*4N³B–ªæ^îO"êkÄV5ÝØeJrÏ2z‡DK20–iD×`B»Ì·œ&Qa2Õë7¾Öģꉄ¸,œw²¨bv—7Y®‡ï"šþžGb%²Öv|d]ì«5޶â#Z/îÏ+ ;/Ù¿Gr͸sñ£ôv\¹ÌpWÜY’âÄ®ò,F{[%¤2MY—›x7Ú©,B:Q^·°ú=H'ÃöÍúBäÄ­Ü)mÊýêR&«é}H9Ü w™d5Þ<[¨ÎZz"™Šú !ë²ûkx c±1CÄu±u«‘fCÞ;¶×õikˈ“ëëYËÕ£SRJ‘ŒŸ<ô¦;V£4ã×WVxæV‹D>5ô~yÿׯ9Øt£í*ŸDÜ\yi‰iI³®ü–þðbS Wý&ÅLò >&üÕÓIgŒÝöëÍÖè ÉŸýÏrVj~?Ž€§ÂÙJ£á[ùùsƒîC;ñ\'ªÅÏ­Îüz;~Þ. &ü.´Ñ±ÜÞ)¢­íü#nrïãʃC¬SÉ„[Û &á^ÉÄ"žîäu\#" §?¶ 4¹±,j¤ƒ“#訫J¼»â%‹v!]Û¦FêE×O/£¥zl‚2wíñ•¢ñu5ksj´Nçò›‚Úl†v“íLÜxÈ´ŽV"zðìÆ¢[ ¦ö‡%é‘î¿Ç%.~ËTÓ¬ÌñÁÛóGSöÀQ=óC‰1äò v Úß{ë$×ó£‰p.sš¹ÚÀ'™¡Ýgp¢¤†r‡U§í ]¤¨X¸É÷«g 8:bl{Þº¾“öÏÚoÙJ×ë«íu,/2!Ïß_"ÎØÂÙos¥]Мã¦år/ß¡¦’Œ r=†GZx7²ñ޼Äà5ü[–«¹w‡4쓆²éMïð\•ÊÆL)ßYj¼mðèo”Ý ­²J}è­c˜S,Öº-®ß!ïIŠC~/à»›ÉÃꢆ¤DÈT/z”ôBgE>_é¼Iÿ› ?Ü5ÏìQ –ÀžLô+ª~Mr±/ÛüfG½¿(_J䛸©g­"ð*<2ÂJý|´.Ç3 -ÿòÕz™ÈÞWE2‘gÌÇRßF<ÛŸwLÿä”’]àUÊiúéø^Ï R<]¹»oÏdByÇwØì}Åw¥|Ùá´©3e_Å—Úðg´E•}H‘e5}±È¿„”¤ŸWƒƒ×&Éè6u¨*Ï„TªÃU©ÂoäÈ29›Q)•äÙQýö1¹Ñ1‰ÿøkØ~kKcn¨[‰·_Žá¦þ¦°Hp2DJ‰ÃÚ˜SÇ@NcP¢1p.ÉEW^@0ŸÅ»ØTyÏ¿±ß²‚Rƒ ~»bQ!Ì¡¬Ù-ÇšéÐ?²ÛÔJËɸ´å•E)ËšÄ|~£R‘d-ïfÇX¾!ͨ#Ýü $ËrFª3/ùöwWåÕÝÀÌ û¬ßá1lçØ?Uâ¶[Í}¶µ¥ÈÌø4ùZáQítðí®Í6*6É-wØUx!v®]˜os „Ï“IpñÇ‚ºvÚßRøî›‹èþé“”LÍ XdÄþá¹oÙÄ!·k q¡8šïó݉™É5õ¬9÷sí[ªáï*ƒ•qóx7ö¿Ø?fÅ”|:] Ô"EYogX–ª oViF>©˜ŠÙi¯h]/Hþ¸ïÜ¥1€Œæ\ÃÕ®m]‘]^耷"›¾yh)Y–³'°ˆá‹S…s¹rCœyì j7šuìº{üç ±í¨ïüÛÐJÂï±S%*VdˆÄÕñÐËw Ó5[Y"õò⾤­(¸õ7σÃ7‚=É!ª)qéáLeòŒ<®ê‰å‚3öÒ“nÅu“£ûâÛÊ''ÃÜ [ã›ÃrÂEÔƒìHŒå-¦^†z»æò’3~üêéM_&'ÁÛb!´uÛöÎÏÛ-Ú:QÁ‰ 72šÈl_ÿ…ã®×;­d™‘6„A˨F >ÊÄXÕˆÇhܬð:Zž„„#Zá Tºv9CÖ\¹(B3<«oU×– Ÿtýtôɪß0%‘ü¥×Ð#CV‚n'Ìv§W÷)¥¿Õ½IjS\£×l•sáS˜]Åp£@Hx²k‘ÍÿŽùÆ®Œ/!‡ºOª™…Ã’eÞ7¡æùƒj$*M‘å³|ÚzÑqƒ¬ù='! £º¤˜ñ{#=ÏF¸)Ï··CGm²á–ØGª¯ƒ™nèîoßFEcÊ ¼°<Ö)3î ß#kÔqixû!åYö5ò ¾ó¥€msÜ(B8”ΰ|²8Ð)3i²´É­ZµYWp»ê</4œ×ŒÃz2J'­øAfjkÆ™û;Ó)á8"oVצ¶žMd®µw¾£oš$O› ˆsB^c_ï×oGÈ.äéÈõ½ßb óòÕúù^Ó}ÛïxïwÔáÒ5%ÊïÀ¶”´HÍoiUuºmçîJ´€è:¾Ö@­oá7Ô‡×ØZ¿ñоGaŠÒΠÙJaR•ynT+Á‡_AX†¨3p0†IBé­E‡’³pL·´éÛP¹O¾~;Xì%ülûrMýNT„Ú¸ óß¶§JàÎ{øÒ.Khð¯ç6¡•\ô¼×:&ˆ ¯^Ló ¦&›:L…ôùf®&¶1õò¹}˜§½cäzã$Ø?ö>ÖúáœøûWžsKœ°ê“ÒÄ ª‡…žIÙȨd­^a116¸÷õ„òéJžŸXc6ÇúÅ”Ž÷šh*fáªYÇüræÖ÷8C<½©b&ÇG1Þ'WZÖ°’ô(q SàÌ;þ',2kÐÆ>Aˆ®i·Ô¯R 9@0ÌïŒ ‚!ôA0QIº‚`TOGLp‚¬U!¨} ‚=b‚`H›‡ » úA- Lüßò‚(ù >'ÉA0ð=´ÁX× h ‚bOÀÚáà]F˜Aˆtú‚–_C0±Qðý'ú}ÁP€-ùŒÓ‚K‚ÏÚ4Ð Áp, èf‚:f!H¼?@б:¨B0¢aF ` † ÑÀS0ç XßئA× `žr&üD€`B”íÁà€ X¤D A—Àvøêþs˜‚dA¬H…¿-t榨…  O,ƒ`w„ŽÁ\#àú{`à Gà/˜» ‚ÐÀùYtQAGà~‚3‡¸¢¢üÇOX¡SÆ@®ë6Ó@0¦p(¸'‚NV!Hà‚!Î@0þXà'ˆºøÞ‚h¶ïƒ”^üvsRAønÄ’Ã ‚QGC˜‡¬×¨ | ùFÿ·A0,#’H† Œoûþlöq5MAˆÁ0Ÿ‚‘‡ óiKpQˆ9²/È]á(‚{Á¨ ~¨Ü´ÛìkÓ5@0X)ˆƒ=°SÌ+ âš4òÝ4õðON† ˆ Ø”âî?:Ìhù ùG 8O†ü ‚‘ðA±ð‹‚{;4.=€–ú h0û)ˆW3‘Î.€vŸƒø{&h±O+ ¶§”Œ´dîOƒ ŠWŒ1ä䃂°èm@{„» Î@_Ú@ëŒ9¬“æyæeß…58!/È-¸þ‚?ˆx CÐí†Aôˆ vŽÿø= kØâ¾SνsV=BB$à ùŸ±A »ýdC0ò-à?7ÈÕGB çñ€/ŒÀz Å &ròÞÄúèÂÄ ‚RÁ9 eü"°ÔìÏoÓ»-éà:àۭЈc1ãã÷›qS!È äSÄEhî˜ûˆ?ÈC9žA0rpž Ôbèò ì nÃ@ ÿäè@ 抡@à 6`nRPKpì ^àsˆk¬ˆ)Ð7*È+µmyCÐ/Pt $ŽAžAïÁž„ CP˃ Þ@?9?kÅAÃðÔÙV˜øKb¨ÁÄ@€A O›AmzÛ@<žíñ^44€ìÆ~ “‚<]Ò‚¸3‚XÁåƒ5@Á ²öùŸ=ªøØjØÄÄ4 4EòŸjârþÀØ« A­ ÞÙY ÷ &Q^ 6`O ˆé¥a‚8#³ƒÐrûôŒs ×c #þJð½ ˆ9ˆƒè‘L@»–ÀW°6/èmé ÆÈ çÁG€ú¹6=|:Úã½ hÕ‚àsÁ¼`MYÐoØ€Q@¿ºÇý„\j\4Û¡êï Øcú èc¤ Öî=t‚ŒþÏ»´° ÎÞ*ab½úE;Ð.Ð8wNjhøN ´H ìd=¨å-¨`7ë%Ð ¨U´n7P§~`°¾¸¬EÃrúóí?A>ÛA½®ú»ýSLÌc âæÇ~ýy…¤h{ø¸~òÓ×P -Ó¢™˜îÿþÜžä{oõÙTÿíÂU²º«¿Úè¬Kß?ï™üÏø/ÆÿÛ÷¿þ\ý¿Zãÿñý/Nn.Þÿüþïÿ¼ÿýojR ïþyÿ Vš‚í™Y8ЮÒ!Ží¿t-Úý|Ú´÷¹‡(Z~$(.çH¸‰+{–ÖÒÇJîÛØ%/üމ‡q´DæRy-µ=¡¢§êáBêûÓJ;*œ³ZâòæÔ8TÇQðç$òú{ROƒÔµëš<íës¼âúº¦0TÙ?>“×v{ÔÏtûÛY¬©8Âë dûöí‡õ“–¼¦‰#µˆùJ'ãŠY¡ á=+õ sët³˜ƒÇÎ roAå_g¿¾ªw‰ ‘xÙÁŽ øvû挾Øã¯Ó¢ŠÃFö­2ª˜¥ÌÌé"»‘ð‘Œå ýüŒ@Ò]îHà5½ù{öµEË0s‰#é’aÏÉF˜Œ1™.]]ZÂ>7R±½€š¢JµvçðYS™“á‹…Åê ´Îó½ ÃËÎÕµ­…> ¬‘Yk92d¹Ãø¼‡,½q?šF+ëŠÐÑágbUÕbóuû7é*f £™ê¶i8⬬ÒM‰ÿvI ”Ÿ´27ä¡|”ój[—Ì2Ìf1î‘«æZþ7 íÞ¼8Ǽ2‡Ü¦.¨Dô£ l qDêR/v$oV Ždâ³$PüÞ̳|7C¤PóC°ì ò[ ̾pmÏÌ”Ÿ›5Ý®J уŒ[ÉŽ)~ýxôÃañKë¨õY¶…ÑÈìÚçÃ_Œ‡5ïªÔŒOõÃøNX³ÈiE¬jË¥¬ìN©—¾Ç¸ÿùÆ4ÑHžç ípëe§þ§Pû÷ž™Y±P!©MJEâ‹VV5;`‡«›]Ýmãñ‘ÉjndJÐ3—ÐêàM'¸×òžŒY-1”þΖdùˆ<ìõ±ÒRU:¡aê%•Ì®;£š¼JBxù…nëwŒËeÄ!K=‹éù»Êx?á7ÑÂs:="Dد—Ló³¦lkWÔì|©rU†`†«B|õˆ¾Ç_1,õÄù¶DcRö÷~ô…“¨y§ü#ê*]ìâ£>*Kèì.é4Á:Tí,ß²ZkîßwáèÜÕ_LÉ䬖0R¥Ó¾¶Ð³ êÌ”ŸafŒ–y¨å¡–bKɨ“ÿ”Ö‹Õ—Dú­M&JЉïqhtr)åår¥nú¥Åìí¿7NØŒ„~ñ½¼F¿`ߨõÉæ6•tÚçãºüÖѬýΛ/gz)cR:Õö<@†©Bè´Ù¦xüªÛý•³X’¢®wÜC`vÔwEðß²=ö,Žm±(½±oÂTÆfÒæ½ÒúüßWPû|cа}† MËœœ8D%G bÅÝŽk¥ŒŸG°gæTâPïœT Á ¯XÝmâþ6‚§ù¹Ñ¬ÉÈ•5KµËÅwŒŒrï X¥{ÔÜû,ŠâÈv¦­NQ8è0-G?pÒM1ÄíßC^#4þÄ;.Pþ›«DT Åè¢Ç›¯Ïú6µJ¹o¸ýÌD¨õã²j>OvµmÁNÞCnŸ¹†Â¥‚/ûœ¾ܬÖÌ_]°-:N1áȜݢrµOMÇòÌÌú®üÇSñ%Ÿ÷ygjI ¯˜(—%» µKÜ>*§ž`¥ax¾é~Üðú°t#ê!oÌjõª4£µ,OmU£@_TL±fÓ|Øû2SWé7áë†êVA´˜îÇ¡]QŠ\*WDk›‡º¶¥¨?Ó_y²ú‰·ò–ïU“Í¢<Ë CooÇÃ]>)ÕÔyç¡zpJª7ïÈŽé9.J9Ó’¨|ý âl~ÿœ¢C_)- Ï33)ªée%¶Œw‹ÙU/óÀwJ™R-ƺad v£YØõýFÑA9ÁzmêC¯¨táýaît \çHå¤Å9 Kòvî&…sí‚!z¸)½ßúD‘,£0TRý5ø%“ß.å³v”[عäû~9â¼_œYúb,© MT˜¬¥bë¹ôxc÷³Í^Öwnw+áîJØ4êï&"Ó P¦ˬ+]`¥I ž9ËbŒ>©ðZ%M™§ÁÒ,¦÷5ÜP«¹]&ÖŸ²VVédÇ–=í6 Œ¿a¦T’—V$ÂGí9ÛLÒ0pœÓ‡=v;_Ðsõ“ .Wmhz“×6ZH§?8Q7!ÒÀÇò¸¤Å+©Q“Žîé˜NÄ…F|Þ£† iû,–O ËïÏjË¿ |m·IãëÃP­ÛÛi5¦kY¸þú™5ÎùÅ!JÖ‚_I³Ê©ÕÔÓFÔ¨´ƒ¹_¼#Í{=õ+ß.Ž}Ÿ·ò‰)¥gâþ) PÍ ,¼düüãS<ÃÅþÎzi¶×ë>"LK±¨S¨-‹ .OŸo.A=böY[±É„l(P^zMþ裮 2/üS½þ)´Á~vtjc7nï­IûÄÚßÁÓ¶A?ô*;Ë“Up–¶n‘Ùn"Ù‰Ç}ÃyÄ‚&ˆÖV——$ˆ¨Š3ƉNb»Ýšcß:·M£À%5XÚST‹.âéwTâᜠdî;eú©/í"ˆLMµÚ^Á%ŽýÊ$"ŠkVçÀöëvçvÜØ¦§’†GdùÚ–Ý“uA_íƒ;r—XSó[«†Z³© ?´aÛ?²`TæôœÞ7„;ß=&«JcŸÝÎ!Qò³ÆàOg’Zjôd›e®yHå­Ýya‡\ßôbóª,Òҥ绠¦ï?¤:°‘5ÇДg™‡–lWzëìКÇ[qÒcýPÎt—Cr®ËéêÄË¥ôÊJÚ9ÏÜs¿6ZŠx¢<²ÏM¦á{†÷SÄó”7Ø-&±înZªþÍåQwœdÊÞyYm{¦ßœY»gÃ["ª¥­=Ò÷•Ù”IŠ»}HãÎáÜ•eÞAtïÿ(p@m߇U!ô»Fêkãn¶E‡îI í,>ò_ÕàþYµÞöá”±±t ‰ÿS—Ïû€†ÏÁQr$A”t¥|ÅÚÕ_NËsÊ[wKï…½ão:‘Íà —÷~Âót+-lãñéS\¤³•ùY/Ê'‹U¤Ê¿If…>pÆ×ÛOµK#'í&¤íóŒyÖ ›çVÕÊÏÀ¤A!•nvì¥?¦:ñ¬h›¡R‘0Xë¶O“¿ìP¶_\ÃC ͹Q=ÊZn{Êû4&Ð"Â"ë‡uï@€s6K8½óŒ·’‚Ó»±ö5b‘+þ-køºN¢¨bûGÄ}}Õ©›œŒä>Ù.ÁgÛ Ðp̵ޯ®íñQTUÌÒNÞ†47NÂ=¤BK†^{§ÜãÉÞãlo1;†ë GX!‚Ãl¶ Óßñ¬¥üæ>h¿ž:S¶ŒÕ·{û~h@Ã9îO›uŽ/ã]±ìàßë'„+9ò4@º-;k£KÊ,Ö¾óªM¯ÿzT GwÓËÅ@g!ʆœ‡ qži< #M>®ÿu.>âªëARloö ±Ïx5ñÏd<1ðF²5oÐ-‘>‘QO/O#m»úQÊ£“ÚìG¶†b#ûZs sd7ßÓ=aZoÝkšL¹wD;-³2”‘˜ö£È« 1‡ ¾A W—´‚Õ:ªº]¢Ý T³Ü1×9½âŠçãïËÉ¥+Îú)~¥°”Ç¢×ïEGE/¾PfûiW>ä®ÿ­MŒn‚Ïö§¸·£Ç!¿5wNaý¦@­ÉÜPPí²ØÔ­ÿŒ4SçÝ?÷|"z­¬÷{3Eèæ±àçZø&=Ùâq+ÌŠÏœúÏ ¶H3˜Û–iCÒ© ÃuÊ"7Óò©Ã?¥“:~Á<ìJ,³`Üd*RU`™Q:”wDÄnÎþ56¶®ÝN¿±SI¿éáÛâ¶ì"±7¾Æžw‚IumÙx–¤ö4žâ±Ö˜Mæ›b¸Eµ>û±•!—òGüäƒvý?gÏç›/a+O4¸þ(= l²á90Ànl÷ÔüN¥% ìuœÐ髨FÒrÞþGcm;ö‰äóÀ9´”P´íz®ÏÉßøPD@Ö#†ïww“=^™VA¦ ®ÝPæt~˜mƒí µR{ÉÐ!ǯkÌ Ÿ›©¹Ø¾×د7¯õ U ++}Q‡BÜbýqFçÜ\ûï’3vÖ³×vÔï*ë/Í\!š’Õú‘³_6Œ³‹5uhBïqþùPƒÿÇ^/âŠ?—‘Ä)&sÙ€íeór±›?f[¾¦YF%+Uü8šÚ>³ë&ÛÇKBà–øvjÀˆî8& ‹Q÷ÃÈøqtôw¦ jéÇ38´Œ¨Iù\cxtï3U94Їª&‘ÎÿñH >¼ºìRºë¬Å;_‘<ý8ÑÎ`™9yH]†ý½3ûšè&¶ûxøÊ:Š> ”Þ——5î| ù¤qªµ™Üu·Vøuh×°•nŠ±ŽºÞì;|`}¬òŸ vȹ@›8Ÿ˜2m°?"úCëOqtCO_üD Ý¢|©ÊÔ…ªã{æ=ì[ŽàÂ¥bd[c2ò¸± GÎ<Š(+12;ú´äÁÐîøCÅE9«,fÔŒ´à±Á7´©æb)b[Ñš:?KKè9Ü÷Üóû‡„šCO'”Ö‹7 öÈ)õôâ¦4L¢¶ÁÈŸø­|¾tOmRàìv{‡1ÖYk7h~à ï…mïÿv Ih²¯›#ò®M>Ù ‰¤hœ[i¼Cµ3j"mé?RÝwºÚ_kó…°µ-âþ¨)FéÏþHüÏþÈß×ïÅ“ÜDÊöêL“Ý¡ÏÒ‰h÷oóM.–·NŸp22Ñ›2Ì0Ð%£=æLúØ7ÍÔmîô«z{,×¶;¡3L—»dò£TÑã\¶·}±!o*ËT^ÞÎ=¿°´?\HV.mû½FèqÊV¬[´ó©Î +ÈJµ3®OVÚ£þ÷DÓ[»4ÿñã%L[‡¬5ßù´z=•ÃgkL‡GWë¾]Ÿ*MÂ?öHJêñ\TÆØ¿dÞý&Û¬;erhâ²HœVßÅ!{OìŒ|ºý¡‡N”¾ÙCfCšƒ6hhÇþ‹ÿ¦®•Ôª†:ò{ ä¸'²nŸC>GÖÔîÖ g[1' Çã„Z°Ëv×Mªx:& }­ýIË%lLÁÏâwñzÆk¾hîŒp„Ž(6˜µo(l»e‡è86øJ v)ðSàÊm¯²,ÃèÁKÜ~¾7 ¦Ç=ÍRk·wIµFlÌßõhþ¹1ý³-À?Ïì „Tæ5P©tˆ©œá~8_„ñ>#ÝWÅ‘3yãèùÚ’žÆA­LeµqÃHÒìC/F­MÐÕ4C¸ ÆË„™8²ªhÓïŠÏX’¬,¹rõDx¨.ÜqÍhè\†¹Ü¼‡¼ ž"ž ³½ÇŠ­— ¯(__‚Dwá´{a¦AQ›Ï…„«Äp÷ñ?9°éw øÃÁäl܃R ÈhÐ϶ù‰Z0»þafƒý7<¿Á°ÙìéU0NÚ| ·³6ß4‘‰}ü| µêÐO¾WÀLF¢t,Ð#;–e˜“Y«8³F؃š^1à<å¦0Þ®É"LùÞµSês“þ™ó˜ÿ:Lð…MH¢’´q!G‚p0‰rÝ™÷(äj3'T÷M\©¨<^b'h5±*F}‹]°€¤ ªJ×Q«¦" Á4ÒHPÌÓpËMÇÃÊ#ÈP¯Zw±*•§GÖ1ò°rŽª‹Ç,_X¯¦ò ¸<|æÏ5äöKCç•ÚŒm®êˆŽ'ŽrvòúÍ4Ù9„ÖA¤–úà¹üJÊ›ˆÐ¾ë´‘ÑNÉ! ì`cMì J6¼üú÷ ;fÚÁ¸nÓ,;ä5Å<ï¶jctñë¸ ÄÐOÇï ›ãÿL  Sï¼»?„é7bLüwDF×ýmZé;/?òp0¼ ¬a0×oÔ54rY΄“Q}ç=XùmÔ %ÈG9΋8¸Å À¯ÕŽ;aýþÓ5·ð&ý¤ÍÞSX ÊÄYÐzѸMŒ¨æmº§ub–P•Ö–ù½Ï—ÐÖ&µ?ØЉT·mZ={ê¶ÝNŠÉ´t̪Wt\ž¦MîkFÖRßir<”È¢59T.©æk+ÈÀÆÁ¨gá ½ËçÒV5@Ä}i·Á[F‹È@©ÚÉYx·Ë#ó—z‡^<¡l¨d‹|ì»Ä!ü1¬¹¯Ù§™fI”âí÷7°'úÆM?Þºr²€";œ±‹â³ÌÝJ-Ì7~ý•ÈÒQHe,…íu*úC½4}²Xíf¦§a/…i[,ò.Å òIa‰í6M½ÔRܽ}‘·ûZ†ü­>´FFÞã# þÎÕ£´ð²-Ʀ`Ä­ Y‰.èH?üœf°àŸƒ„ $ksº¯¾½Álƒ¼Ú 5 Q¾j_Í=a*ì• ´oÖ’Ìà@ì°fú®Ã·ÖÑU¬2É$£ÊBZšV­Tþc9©Ÿoóó"f®Kš½s#žË_^] ¶(#S—(*ÔŸUœÍÉ=ˆfGçó¯seG^ oˆÐÂý5 šOŠNfóh™%»(ýõϹVê9nOuŒ–ŽÍŠ;7mŸ .ʉFìKð,ƒ}¨»Ĩ3ßÁÌ”€‡¼Ž¬DùX˜Ç)$dޱ¿º{ûÙ‡ÙÎA÷#› :Õœ,v|ÎHu€Ï¤…,€éäÜtÜ Àéiѽª3uØÆ[ó"ëˆ&ü·‹ÿdæ_a/ó/ÇýÖ€ŒÒð×`.€l#C1APÑ}ëÊÐq‚C|7 ].€ö[³&oň¯ïÜ,“ÈÚe(€TÁnÙ]lÇl< ‡®° ˜È­Qv/ž7¢}úì¶å¨Î,`wuŸ´s[,˜$ÿqÐÐVðïëÚ$»£ò*‡|Wó{ÆÉWìÆYä¹6oÕ¬ÊÄùûè1RÖxA/™ú4²<¬`eåíç'‘zØ «º€ÒåÙݳšyX…/ÆÛ,1(¡½£ÝUøìlŒÆ×A©²†Ðf±Yf! œÛÁ 8Àm ÅGê9…±d¥% tR3y…Tz¿\Kžˆ~‹¨{ú6¸`ìMtˆþÚûR6dê94 iÑÆ2mº~­nÜáÎ=ä¸ÍK`ê\ê¬VsfÉ@ú‚Šéþˆíuˆµƒ0ñÜ- ØBŽíP‰ÔBó‡­Æ:à»m4{ƒVlI¥….þDÐTáÙƒòn“6Ú÷ ö¼áŽ÷ *ž×/ð?òwUEÏß„ÇÎæÞä‹ú¥Â³¤„*Ÿkòî§I £_.+Þæç¿VÍv¦ÓÖ¹ûbÈò‘ÐÒ"ÿdg …õ·\ÑSâCt(/ná@ÉÌS:|ƒA­¶ä­É ‡Â…De›#,èAhšÿÜX#?ÈtøšDâ…~Ó¢´d«­Aã>Y«Vçî0tÑš_<0u”Rãò^gä¡=ôžJ›©´f†Ý~!F¶Õ¨¶}?Ô ›R=Ä î ëkΫêeÈ>=ʺ;mÀÔ`ñšmQÑ<е0}te }£ðOðö %q‡Uª§OØî@v!CµV×`íMÞÌñ!…MR®*!ào‘1S–S•ê#ädg,ÏZ¢rT:62­%ÄgRœ@E¬¼Žç¢Ž8jÁrà°t„ÄÁdo×Ì&E-ëE:ïòãP¢Òz“ïÖb˺¥‹'Ê·.èåZu¿çh>Ea™ÖáUÅg4=*GV|›SGBPö“…ÒÄml@ÀÁ²tTõs‚*8Ýâ*\Ï5<«D¤†]GW äÛp°íÌÜ œ‚ºš¾:;=zLœõ£;þåߊ7IÓu |—ƒ3å s;J´áŸ>,ø² [ƒ²›¸à^­'©’1…²Ô*…#d²Âå}»ýöK¸¢vÉùžÁß4§*3^„’ºˆnßs•šfèj žð’M+¹O!2@U§´³ë ’¶3™roÉe”!¸@¯¿[ß.Û w¨¡æI¶•ÖM»¤’sS<‹Ñ"›ÂY:бçgqKÍ"®Ð)½v Ç`Š— ø ¾}@Lÿ<3ú9rœ (Ù(ÎØQíVœ£"™¸¬>$_ÜfºB2èº>tX²=g°öâÖyáËC¿h—”‘ûæ˜p¢!ò!õc5w¦XúhA˰rú9=2`;ØÌg`Zø=s5'k„ÕÙeª>½î0ÍŠÉ0l'‡ÍP-Ef¯Ð™—0bD[ªg³cËî^ÇÙ¥E½V(nö&àæÈ)Çë‘qÆ(ë8dŽvÉB1é¯ šâ“ÁGå*Ù’.ÿeŠG/LŠŒ¾\î^H°,`dÎ_´à¹K¨â!ÿš0C/OóMš¦Ôø´ …+qÓª¤(é" LÃ+1HG"8IG\Ò7‡Ãù.âäälI/MZ³9£vXm>´¶YºLù]? Eú å2¹ß#Ãm<¯H@Џþ^ =ñÒ„ÿlÃ?c.×rõJ˜‡H‰vÉÆ;b=‚DÎÅ¿™-h ȬT^öNäö(lBÂß,97N×^8dK1—eH¯/‡u#ϱ‹¡Gÿ¾Ÿ  fI€ÂpŽ1 ^2Ÿ˜µ/ÒSÃÑY•„ÕYÝ$¦ïúÍzPô9œ²Ñ¿à)vaú‡¯Ë³ö6MçêÏÍ@,>Ì1|Þvツ±5¬ëƱèHýMÌbŒ‹ŽKY/›ÌLÖFÉ; ©JhêÿD t(/ÜC j,O8>DªN~ƒøÚ—'$Júà#|Ø9ƒªÓ¦ŒU€Ù‡¶?vg×·ßèÛ´óö1üÏ0fOñɉ™Ë3±L£å~ÕTšèÿneƳÊ÷3s  hóýÒ©ú–; •' _ï¬DJxîKõM­dÄű¢@Ý/Æ©&¾Á†È¾áY-Òñìªb¤Õ"»€Îµç¿J ih”Ñ:ù«¥ ï¦Ÿ†kq&€’xà¶±8ñ Õ•Wo˜´™ÍõØ VÞ ×mÏižF·¸ùÖÖ!?Õ€šÚ¯±6,Žÿ¿Nò‰Ò¡ ßyIߥNMâÆK!#È!ÐærØÝ¥wJ3¬þå¡h‘{líIDøÝûŸÝŠ4ˆB9Ã*'ág/ƒKºta1¡m¶<Ë®„ö+á¢Uÿ4ý äNôõòm$$óª(ÜNä¯Pœ=]v†ò9Ö5:Í‹Ä?œÞ^pªæ¹/aä‰ZiJ.}F®ì†oǵÒmx) Šâl‰á¯Mç)¿ŸÀz@˜”"÷ãÞÿrKãvÆï&a*ÅôhgÍJI´Ø+:ªEq-‘¬MFˆ‘—ta;×YþsõL5(ÉUx7“ÝÂÓêµvÅö¶]o™ö¯‘&¹¬ñx÷²&AõfªQ„Äú‹lèèœj©º{¬ÖÐmß´ï¢h€£ d‰LŲéëÓò§P¨Ðoò‡0`ÃÐj¾Ë&˜sM/d^.û%ɧLéò%×À ‡ƶkNÿ$/ï­2¯ïuXuú¿ìxü'äñ¡¨ò Ù<ÇȬ|îs d¹jTnÑX¡?tÒOÏ |×^HG?¦MzWÓ,”äÿ—™F³YÿçàºõyüïéüzE“ŒîýŸìËèbEùò¡~¸ÿ|‚¤0 龓¡ƒ$%ªF˜FŽºÁôiæ³ø1˜“4Í“4 ÌF’°7®yTla„æÃ³©9Zêë >ÎAP°¿ÛlìV(­ï5,i¥î~Ýø xï4ʦ[O Âh _uÞn7.©g9“wM@C>)$;ѼÁ¸³KpH ¦jhì9‡Ð:ùÛ”'Àˆ\)ÿ`)¡&þOÚký/0ºqå™õD£àE|\ðãöO.[­¢WÿÞAqãf–¬)ßM•ñw´Sg^S@‘ ŸdÍé’˜3vH)/06¬i€¾$h˜ìSG9Q%9MtE[=Û» ›ß} “Jèý˜áɾGæ±î¨Ü Çù@fx÷ÍÞ…ÅÉw[õºÒÒQMµyS:àÇ]Ïߣ^zÚÖ£n¿p*ä>/¸0ýceþ R¤Lýß5¡ÿw ±ùdIÐ-l}tȪuªÊÖ¸"lüã/¨6pÆ¢Ò¬à´q ÀvüýÄâó#(÷ Ѧë¶¶µ—õ¯£$Uƒ£Ûk¶šQssÃî胠6¨Û'Eð¬/Á™îiÚ5=n±=ž?•ªÖàçO°‘Ê9!è]¦UÙꙟ1AïdN¨o`¿"Á´rï€ÿ°´+bëÔFy¥w¼²~(yäü‡j¶FÞ¹í’Th_Níýº@F”Íþ VH"zñÉ/À>P²Zo4@zÊ#ö™ú\eÑàF¦îÁø1ü:¬‹LĘÚûyßQb Ö7÷ $æ:ØvÛI.dtA׿¼jÛ*‰Õ]ù”(ß«¯·ûŽÌç²i^©SQµ2=Ò¨Ä}­“:¦o—<£•/´ýLÉûå¾Ü¬Ä Õ˜äÌ­¸ÑêˆóWø­ßT×Çj¬«þOs*ï5Š@(®Œ‰J® XW%Ï~º³ùK…KÃûô"©1_u4Mwµ{9 öÔpeùHó™ä†‡Î3—„G¸È…20ž¬èôÌÔÔŒAì½›Fl³ó\ñæ ÍN‚ ë‹&M¼\l|ºB|j¢Búx®‡sBïž¿ÂüˆŠÛ¯tWëõ’ðüâ\2J¦¶À>·ûRè­ˆWBÜXM×ê;A!9c{a}9qz¢9¤¢o†…fê7µ7‚ú“ëÃ54$Þ“ôŒt ”¤ã3TºB´« Íñ¦Ï༉‡(R—öGñ yÍôø­ñÛ²ãËŒ±®ò1i}h‹–ót=A>19}{sÄ€A³|›£·Nwn®cÚ4÷îcí4€ÍXµ&`×LJ1*q깓y iÉiQPy¶°¡!Ð0bLMwP¡7µ²1bM÷¡2bâ4·³!^¥4ò²°wM€[ijŽc°¿ŽLÃÃacñ‡ã]ª'=ñ”è \ŽÄ“ )\r¾Z£%Ù ÑÏÊ·5ù~­£ã¥°hÝu„ÞÅ£Ãããõê÷¦{_󗦦%Ž÷çÉPH:í¢ü[î®ô·.±–û0gŽHç›Çp;Á³‰Cö¶að"´P9¨Ã™ÏkÄ–„ø=¡¬¯Í=[Å›Ó27«ç’n ý̪’Iÿ ZYDü%0Uìáj×bYËí›Ršýλ¯ ßôOJD²{7r™ˆÏµ ¾¨—«ÿbÉg§éÕ•ûØ;l ÛéãîHÊíŠEò ˆÇGúVñØMÿ ¦ÎaÑTz%²Pä±1jšh )ATD?•ÌÀ„Ðoú»^´4]½ÉzøwašÔ ç¤Â‡Ê>e=n1ñž¡hÅc1í n‘_°Ã }ÖBìðš £ã`v¸Øî\’åê¡,ŽIíöóaЉãpûl>Eã•1&Uí‹Øxkß&øò3GD3tH$<  ÎèÐHÝN#À$¡ÐÅ opÁQuuxö÷4 §FÖü¬¨¯Lyu©~ECqÃXäLËñêF‘· êL e:xER³ædZN;ÄsŽOÊ¡žR™u'_Ë — zÒıˆÙã@{#’eÏ­ºOü’È×õïNׂj¤A Ô#€ÓUÌÅÔx B—4‡¥bðNaÎP¡8'—¨¾Gý•Zϼ…k¯bšH®®EuE;‘È(jfî>‰•%¹í4 0sr0§Ñró¨öÂÅé¨jãøí}ÙÍ–U»0—{ɵŒù¬çÈŠÙ±ufÈø;é=0ôñXÉà9“铃3cP@ï03 N3;œµ7èÔ æÒÕ×x·Ãˆ1«;0³ÉàÄ@ZfÕÕ%½šÆpÕ¿"½‚ÓšðÒxƹïLZ@t^û0íºÿ\0š%3rB8£G¦³óäíqü˜Ñ |9‘Ù2mÛß¹0­+‹†~¹ ›E?®1Ñg»~‡½]xÕaPÂÂW.Ã%K@ÇfЇ³yÖv‹ù¸ï+›u÷LpÁæ“ÓÏé:úžÕ0[÷Üé¼ë¾PçÜ Þi¶’Ñšp6¨g#\À]¶å0l³•}ð+ü›ÜúœmP²‡álö™œa×Áå¼­ß…ÕnøàìmöÂöø†W × \ùEl¥œÊj3j‡ÐlcÎnqŸò2Ò=Ô T™°íúP‡ç'ú~pÑé øƒÅ6¼Ý—_çèÆb(–4¥*f:F¡ûÉWfP¡dª…bƒY·[8ôÏS#V•\Œªu:nñ˜>¦×ntòÖI`«[ÍB}6Ü ¨˜A'†õÍ>cÀ”‡³õ)ÜÕž üèG\°#9ÄÕë«w€2(øüÐ3_%ÀëoÚQcU1äÑ»œP_¡ùø€óS*ûT'ôºša+µSP¹v0¬‚SkÔl`ÇrHì¼t´c–’E—€È6€àþBÑôcv«$Rô¼0#‰ñéØ%kj}> ˜:úa-Áí#¦$™FÐ>à ˜!­1O`CPE¤bÛø·Ø¥Ëw düïnN£¢!£$‹¡*Aš’:ó}JûpŽq A1F° I@à4ÕN^ ÃHò±ÉóÊÆW*WÎNÁF#—5W+ï¬Jéþ}ú‚Ç œ³ú“ ›º­Ð5áz8†T„uþ‘ß¹Â! 4T¸YX¿#J1ôó†2Ǭ7ø0q&¼½”»Špw!¡)˜æÜ‚ì2cc“PÌUHe=ñ™ÊKs1PÕÎc˜ýEÒ÷°Ï­+»ŠÎN ’/ãÃ{ˆôSäöw Em˜€9ˆ2FÛa]§“–M3ùD‘uxAÑu$^Am’QKü1ñ Ùeœç ¾ „.2^SD`€ÝeìW…Àè)ù¨hgɬÈö"šz)¦œæk~”´noÒý²ŠJçúÛix{Lð ÙˤXùÔ~ÒK‹uÓa›ùÇlr6Õ½ˆaqÊ7báÄbyA„"KJOQˆÍEçÜÑ{ãój.jM_)}Uf¬üj³0ZR½2%"JÈÚ#ƒàšï¸f÷Ý–­`î\[Êö—}Â… [<Ùà¨ó70M”q0a8F‰þ¿0Y˜ÊKÝA½¹3‹ R‚e3Ì*“ÆÁ(tiºIkÐU|Å'úÉŸ•¡|.?X®¤/1Êÿ¦N(J؈èø|ÉDX7$6ù\¿4@IC7c´‹Øž¿áß{©2DgBT €Äv9/p­,Ô_÷ËÏ_½+UcmXÌìLXÊ]—¨¶©nv\¢W­\ТÞb5ÙÏÍ[øÊJ6™¡ªèšØwí‰ I–$Ø^‹[ À_ªQYALVCÞË"Ÿê>ó•n@ß=µŠEù 'ã4*Ë2õ°ôBÝLK ãcm9ð÷^I·5=U”ñ™K†R€1b~yŽDÞmþ"F‚n‘nz'T„Ç9„û1'ŠÙ+1ža]ÿ-²~Å!3ÔBkìcât_Ó ü`)Ø#¯¸îêPXv§o¦«"m!gSÉt™/þކß=^¥ÂªlIóe½t’‹g¶2“w‹¢Å>§=î ¨ÐUJùóhÑz-¥õºÖxP_4X f’P‘ ïP™2Q¸¨^o½¹?;PgÚ+þÈøàf™úŸ²-¾†Úæ[ñ´t6L±©ÒêJìð&±åÃýΞ[¶Z5û©ÚvZTʼn¹q(‹`Jãv¿ªŸNHÌÞ6;@Gk¡»`uÚŠÌès•|Éß(¶Ø[/”Ñë 0bÍ%ôI±ä±Ãy²áBV DTµ‰Cñ]fT‰ªO•ˆõhK$`ù‹$Y6uñÈUgs Â!ïÒ*3Š´J‘Ák|õw¬kSÌäzÝn61÷•PÐ’4 LrÖ'E±-n®ê¦™¨ÊNÕ·îúç…û†»äâ«eD …à?µÊÙX šøŠEò.8—0Zãû„ž6&æJ%u |%}ÚŽÈs€ßçÎ~¡"Sà.·›©3HA¤o<+¤×ëÍÙ‚£9šÏÙgÖR.À.» Œ¬;ƒ-ÊFW{Á°–»3º°“ô¨l)]} o¤µ!1®ß÷ªúYo쪂þîRªÓ|Ë‹îm­¢¦8ºéQ%jÔ²šwõïíÊmw…öåÔß"t •‚Qâ«lƒ¯ çªÍ¨½-8þk£ ã•àeñcbDçÈ<©¤¼æ~T*¨5˜ÖèÞ˜-—!ßÐTo A MmˆŠ ÜW–#&C!"^á)n3|y>~5Ê-…Ö¾,¼•[ƒT Rœ}yˆÄ¤ˆÝ?ŸüyxLÖ”µ@á:`¾A«+D~îY1Ã×-(ïZì[„«ï—\r!2=4©¦ô;®Pa@m5‹!ÖM{¤VŸ×Ó×’èž`6Ñ`ùÃ(â¼%'ãWåz»–úDV b?kI_«IL•&€2 hÅSañuèxI¥L³#_:©¶ô é®ý‡ªª—áŽçà|çCœä•×¥ÆY¬M¶Ç±²Ä]§RK7É Y!k\w|Yéé‘9Å\3Ÿä5RdN~ÓÜêz9»3GÅG©#9SïgÉ+A›ÂACW?"G/¼ˆ Nä9Ô-œW  eX2„7qµÐà 2ÐEñxØðßÉ!¹¾p‡xÐûLA|ÞBTç¿4ˆJ, …¢Úuò¸†>å·ë& Q D“§â…PtÄxÍG€tÌyZÌ”Œ/ò’º¯h*ºsikTÜï3p†ˆ;™jiª@9y9ã½ÄGöqK&¯‘à«-Ò\AHXT–þ´Úq»·rËAàR¸¦vÐ^T/i‹òäªCaM<«d©vó¾­5Š“èoI^bð%_ýȼºŽ ;7„íßk­/,K$‹“­1—|˜–®ŠÏ­o\ËRItÁx—^_`´ÙQòt°ÒB ,oîhh6Gt‡"UÃÖ|àà¢Ê ÈÉn¤0Ã*”Èk²‚o6¤17UMg¶ŸKÖX¹* ¹¯;<ã0¨ÒÈjGÉ&¶\ÐazÆÒ•5¾i£n¬¦Ô®'nWÄ&.`áqdëÃ"6öÚÐÒì O(ò ‰eÝ·ø â•aò¶ycwÅ{ÃÞíÖ´îñ b~+&í>À£¬Sí‚Õ§1€³‡îÈ‹¬É>èµQ25¡¹ †î øEX°µò8뛜&ó“ÀcX›¸à#¢Óµlù5Š.”™O9c®,¨®3–M0È7TÓägíVæ©Þ¸…û§E¦. ÁžÄ®½Š¨«µxŸú8É?ÉýF¦[ÒoŠ~k§?N^f,½E‘óOé­ó1tªY—Š\«þ›þŠ­rü®°CÔùR˜·îÎkù¯y(oIñ“²æÅœÒ0\J-9Ýò—#ÔŠà¥* î¸(µH†r!ãamúJ/cã9æÙwŸf‘:Ÿk˜\y×L,N’[ysm{ak}9ç:íÿ/©¹;¤ÎÔ¾V×û’@ñÉÊ-†Ç/râE@+–ïËËŽNRÒRø]ÌFœÈ§^öõæÖ²HD+&GPòS2aæ æ¹;`ù°òýžšç×Leec‰¨øÑߦÊõб«÷m=Ô:?Ï`r<¡ãcCÊØ¹ø1Xÿ>eCF.é7TsÕªôAÝÃôepÍ´Š™îçE &ìÊ 8å§??¿œß òÇP0#IB"£§©“4BZ§_Û>…–ô„`áö×@n‚Öéò(oøì¹ÙÜÖiË"éj39tÌðø¾Ö½”žŎуBÒeí»„ƒŸ€ó.®ƒAĉ–6µÄ»Ëd›ät“º¿‰l¡?"êóo,‘GR“h$ÉN¤–“Ÿý—FYô玧¨¼E¼E Æc%Ti9þƒT×Þ–1|Vf’Á~‡×9‹ÚÉ–{§l4f¹_¡¾æ;'ºNäìùG×Uø!>d0Ì8L¤ »)Yu‰d[hãÚEè ¤+zËQR…û+÷°Ïig§¹÷Åð¾@QµØæ—™ƌŸ±Ç–Ä­º(§aE„¬ãºT‹ Û•w}¨XáÁc¬jÏ7¨C’CN] kf’²”Í&3B׃ Ì®LeSˆ¶ÿvæªN! 8,PA)™Yc>aØÕ:×cË ¬ÐXG°Bnïo4‚“ƒ.7††ö §šˆÞ›Õå­Ü¯—ÜÅ”i~™…SO¢ùËÔêÆ˜ónõk¹’®#„oÏ…!Öàœ–¬°-EÔ&¬fØkíÇõëæ‹¯žû/‡pé-Z;&8{×;„ež“ ùMÁ¦f”Tö ƒBs±•9ÖŠkŽgÎÀ p'²zƒeô™f ;¯µ—ÅZœ©ì³]_¸[bñ«aRç­~ÿ»C¶HÍ’ ÷ð¬¼qærz|w©8¬tªÍ£ ¸ãáólw…XÍØ@žbÝ„«>6Õ×ÈJþÅ}p±Îóäë€ß®w¢ì¥?‡ w·ï2,7567ÕA ï½qk„h‚»£2Ï KXæQðˆ‘¿uGÏ(ðIÅÀTškítÔq´å¶çȇÉ7!.]?<-Ù¬Ôo_èÖ]É$ÚNÄØ XJ•ê‹Y¶չЈ{îWé¤À_‘<¨á4FÉíRŸ’†•a;}iݼh‘“b®3h{š©JsŸwuWtaäyóµªýŽEs?íE½Z÷Q‹H™ÏMA‡½‰ ój3 vŒ‹W©Ú Œ;£œ¤¼óóâ«´Uà„åÿezŒO¥U8‡"!Ï4Óf”=›Ô–Ò.lu9èEãÌ û“ Ô¢@ë{3î}Ê7\Úì æ´Ufš+³Çlz†Œ-Ý-ŒÊ»ìx¬‡¶[àoZ±èjó«|±F4~líR9[ƒQ‡­_.ßXMß «I ¤…ú3訹œc’®a±g×+®è K9­ÈOq9jÕ—•Ò›\/a aÞ+u£@3Ó0ïrµ^ä†Bj@Ñ…‘u’lQ=7òU]L ÔëJЀ6)+xÿ+žd\“·'ËÍc´½Ny&Õg÷B?C·ÈŒfyõ,öõ÷ZË4|CÒ¡ÓÚ%“ùÒìÈ‹Àpù5k pëK42™[ŽÉÊÉþŠ~Êu1 ìÌKË„åZ¶ÍbCå7\K*%œÐ¼éºž$âOËÈð’^…ˆbIhò—̉¸Ê¼òi¡’ äZþ–—–yv©j‰º6²YT!f—±ê,+‹X²¹m”YÏø_nÅ"Ζ!^ÂgMÇ›BqÅ®ÿbï ­>w»š]`ßïʰÅwĈá%Ü™>ÓÀþbS3¼xçÂcŒ„\ʽ€)pý£—Ò$‡"ÄV³gà]… 'ܵÃv:"~iôœHèŸ6ëeOG[öd-¨'z+<×ÞΖQ“’cccÍ3 Ê4_.Ê ›]¤ãÌEu›Sa¨zX2H MŽðý[LMÒ;—ÝQ”Å¥•}B*»,QÖ(:©D·*ñ ¼ŒS«‰”›Àƒ£‡˜W,ŒiµU€m!A[qϬT3çkª¬¼ëY ”3ÊH¨Ô(-8e&ÛÍ@.Èd eÙw|‚ÿ7±EõÔFüöh϶üiëÍ c‹Ü¬IDÔš­Å%ÖT*p6†ì¾®ìÐ÷|aLÜÿ FX˜”Dŧ$¦G¥¨Æ—©)¦&$¨ç)§u!²ëíS .‘ ž»‹²ÎŒk2à1~a¤¦¥’%ž¢’&Ñqf|˜>G¬dvu0­$‰l±>’º(Ê…YÛ‰™É×i+Ó„ä6©ŒÃ7ý¹qô0+k«ŸF¾Óþ7*!—’ ZϯeË¡½êVxn™vŒ ÿN“áa¯ (%§7~¥y{½¦n˜MàŸFά€ëž×b¼ú.""n·¥õ½|p-û¹÷ìPl]/ŒìD…IA^*N/ˆ*Ñ;èhø{,G)[É#|_~¡: ƒb-Ù–!Î!oâˆv†òö ˜S?“0§T*Ô ›Ò~¾L_V°Ê.v²jÏ0404ÌL^(<¦NˆYBo{ Õ¡> ±´FÞZÙ4ÉN‚AæÜN'øÓò“¬%¦ð$ÎÅ äö¸úɱ´”S‚ó@æ®l}|Rf¢ÇS¾ª‹#I3ï»Bþâ¨Õì!n@CĈ#‹¥!Ó6–ji %¤ü‰±}²PÀÈ·>Fbå\ÞÀ}Ð,‡ÊÉzÅ%2â®Ø‰€ÓK*ÅóÔ»<¾þÃÍÖqÖ‘s\t¨X½âœ²¥©µõKŽôþÓN›m/2Eœ£¼Ò.Á‘ZS·$egšFÜ‹e \­°ß]…ÔŽRÈïcþE¬ÍÒÖ}kG#R‰8ÇRû~<¨o­åÆeåÑÁÙM‚§¥„=²¨íøu ;ÎÛêe¶Å=¥Äã2©N3ŠG"-©­Rx÷éÙ[Á€FÿeS@V».Åë“?*© vÉÆŠæ5…ŸÇ`•8—bw„ƒ;°Q7šá@IØä6óH,Ø:o3h[.2òÐóO߃m¦'{¤,?£m2’1PNz™³aï†-•¯µ+^@´ê-¤¾Ï¯&•ðRª„F”¥N¢‹‚L63|Pöž¶#@X:Šã? 0ºt:’õšÑz§Z?Þ8dÆŠŠeú}$I9$œËc½„ ßt¤{â•lq1gÞ»•8P­y^åÝR¾¸x q9!!“øÑÖýèÕÅÕݺ ½ðø&˜)Jô^ò~ÒÁýâåu~ /Òß±C Û€‹Þú™á¤6ò¹’pdÇ|Ô¦È \ðJÓFo®áÛ=cf H¶k~¼®/˜U(Ãí#JZ×q-ü"¨´#ùá(Nãµ+kùÃD>›‹¢ág±dÛ Îì˳Y‹ ™Ç¦Ù5f¥”Ö§Mk§`”üŸ€øtÚùØjèîJS¸¨Vìƒ*¸y© È‘›Lý³þ°]ò‘‚aøá¢àåWðcœOG/ºøTrÃ}å•WÝS¡ó`æï§à¦À¦(µ.ž¾h´JÆæ W.±ª‚?ðk–]jP‰¢T Y2(쫜àA–ýÉôÇýˆü§ÎKîéoÎ5°Ü•P0©²’Aªþ©Érß@ݧ‘¶$¨?Ò"X›)ŸV4%ã#Qj¤èsàwÓR<ÐÖ¼u¶·-Hú¿rÀá;ÀP…8^m5Ã1#Ši;Ée2.žNyV.7ŸPjœ‰,‚g²|ƒí´èÊg°¡~ù¤¸[q­q?åYd€%[Y0E ‡3Ö˜a4ÖœÙ.7ëußÛ*cÁ”|3UV–;4•5UÈÆDŽiÝ~>…Ag#v"žþ ò `r1søÓX©¶Å_Ìj×;xrܨ¸röç >ôZa.ÆY80£§’YTIK[Mðo$¯wyY‰p¼‰‰¹¸VYÁ[¼i R:n7¿.ê„m*Mä/äK.)ìë¨I?Ó¹fþû»8`£”kfQ–ÌBïΗʦF‚i‹«ÆÐD#ßòU„A’Q&%¤ÔÕ8.¨à{ÏL´€‚YÓe~æÍÀKuŽXH`]ÀÞ 1¥hòS‘œÿžÖyÏvä& 8CVöÖk¸¼"euŠqȸ;Ê“CÇ¥)!yzönWjˆ`¡íýÙÃx«b<«Ê|î®Ù0™'ß _‡ ;ì[N­À\­‡:È u„7]×€iÔSy£Ÿsé>ìb¨0d¦ IŒEõ&‹AÒ /d‹ Þ¢yS²Å‡ËØŽ‘4A`ÿÛPÍÙ!ô'/U]`мnû‡s³õ=åW•®Î»¯ãðU”÷ K&“æv]Ú‘þ›C€û\iHØòoG0hÒ ª$IyW°¨e3Hèm ìgÏT-‹ W†£ürâoðÓòùÑ ›Q«'îÞ ÆÒ& *Ò •¼O¯Â›&ÍûBxx­îØ›iôØo¾ëa “ò9Î5Ò„Yr¬êã[ OWò¡(¾ø©HÊ¥ù:5¢³V¯zGH›®íâ°*óžO\Ž_SyV{Q—˜›“ ‰Ÿ`¡h*à—0þ®™ýo~^ ]ÒÒÞmübÝüÞjærrÆâåü¶öúÒùÚÊuíüîÒÞòúÑüÞòÊæöa¿UŒÓý…ÅŒøÌ½Ó…Å„íÝ==éE­”í<ÿ×tÚq &¸WûWUUù³ 6´ó3¡“®Öèv9‚j€–BÞ¿FÖ—g}F¶ “3R/­¶’1°Ö‘aôCûß“ ×þåMúѹ3p_"×ÌÞï(ÌÙÿ®ÈIš©—×ÙA¤rµ…¨‰¥IðᳲѓÎQ®’3Ѳ²Ô‘u°ªwµÕ•Öåòr)÷)ëÕã79èóõú;1øB12Vù‘‘=ýyø#÷¹>f‘ª°óMŠ{ d÷w½á»0¯¿ë Š›K‹éËK›™ÿ·dtèÈ¡ôµ®rºeÿ>ÿ\å9äßVøôNu €Pð²ý§4øÕ½ãøåÌ´µµÛùÿ¯ ç7Îæ×ö/ÿ[Ðß)þÉÜè)ÝÉþ¤š’"yD„Jø\¤<äô"øÿ,v› ~™F~¬º\¬Nfz¾lrZi®v|œZ%ÜbM¬¢:¢ß©ÜŠÂ¬þüIºg´XšFšy,:À}Þ¤/¼k&Çd{ŒS¤‚WxÐߥÐÈ UÉ Ñ(‰(ONÈ ‰O‹ ‹ÉM’ ÉÕTÉ QP4Î.HOJ Ï‹NNJN ωONÎÑOSÔNŸ.ì’ ÑD*HONPON ËG(V)WÔ "„+NKˆù6çÎA…Ò܈Ïë–5ähòK!ÿ÷²Ëšnv‚ÂXV'1ªéõ}.€Æá^…GìT£Àɲ_Pêÿ/3…(NFªZý,_YÓŸõ•cÐ6íM›Ÿƒ%ÒöüÉÃÈÁüDýØú"c–zR)µ‹‰ø¤Î¾íKÁ±ÞÒúøüÁÃE‚Øü¯˜Ž›:Ÿã'ºë.I;à —5TPX‰*άFF×L'ù‰/HvžP&gÏKÍÛóR<ö àÁiR\J±„ YŠX„øËþdMU@ÖHT^NOOGâLq¦öU‘óˆ·(ujöЫùÝ–& TG5;Mô£QÏc] ü>+&º¾ˆ{ú£]IƒG\€çRÝxA6^8Q¡•ŠzÚ&„ïˆv%KÚ†ôø=oJ,”ýBaýŽf¹»,Kf)äjc kV„Lõ¼ÀÆZv+f^FÁdå ðÄŠ–ßHe|wTF†_ ~õÒîT*ñ Þ–û}¡Ùe”ëÅ£º¢'¹/” ‚¦C}]¡WtŒ>ÂÙ$‚Y‡_%.Ø{$Ó˜5êÔâÑîV/2žB^‰ ÜSD¼pH;[²çC-9R)‹,˜æ‚ÄY-W¥2rc€5ßøf·Ùeàd5s¢6„’s̨eËÔ䇴ý$dIoBBÀ:Ñ-\îçhVÓA¿Ô™sûŽ£UYºß-h ß–„î®%ÉûNk ðGƒ½ZÀˆ´êOŒ”`ýþ WÛ$Œkæ§…ÆpüÎåð{m±~8Z+üE#ùz22qÝQÂa«|ÙâFx(Ÿo€bªÖ×ËÅ'à-þÖVU…¥D¯¤ŒŒLO¸LNxÊ‘¾’QKƒ:6.Žõy5šÒ[‡¸9~†»²²;‰i*ZÒ|¹z¹cã c&÷÷qíüQ%‚¡6š9±a\ÿŒ’r8¼QöçSöÕ^â…Z±ß†ø4è'kU"R{æ²K½<©¾3A(U‚q{u}F±2AâúB=Òß©bÊ@à™t%Ô=Í ój!¶"nmÏ(¥1ÍN ë{*D£0ŠF$¤äaR÷by;[Ûa‹Á½ñ]<íÕe5µLˆ¤¾q*¥¢=;Ë:€üJ„QÞåP7âqÐiG‚”¦œðÃóî#ŠzÝ™qÐKS0<½ÌØoá0á ³xD4ÜéšžWjD\’””„–•žÌ^]VZ׊äp>£¡l@ÃUâwÐSÂ@“Úžòôž,  „š™šl-­°ô}‚m)ššî3{òí®O;'f¤}q|u(@K¼»DiÈÑÔruã¶f¬P8e`g7 cû²]_ä$@\Hr¤Ýü«ÞØ&k³ ºUä{AC¹Ä'ÙM%Ì[ -çÔ’œðLØ¡›Á& ò;šÈÌ¥îŸOS2íÄöá8~lœ˜‘ƒ»È»oóú5L±ÊãòRÈê­aʤ•{¡m2Ö‚´)£§8i ¥V“LΪq6Ø®ô l°Ü\ke ¨4ÿ¯©$ÕQ(Á„S÷‚Û˽F¦{(°ÄêÔY0V5±¨‰Ãs[ 1T{(œ¬Î.PzpÉÔy{žxé¤q;æ¨1W²!x{òšx Åg:Þɰ…bQ[d`ØhC'ÅYð}\þÙ¯…A³™Ÿo…Ï÷ ±Û¹ü9†(`Ôý úòÅüÊó>„˜^¯‡Û@ÿžŸx°'ó¼ÝOë‡{°Ö›ÇGENYDn´õ’™°»àý;%‡·$ 90¼Qô¯fRn`L(²†(‘øzj¼†|îE£îÉp ü‡ ¤U7fÜümñ$0]–B’ì ì:¿´UÈ™¡B^°×9ìÇF-^Ï?K¥1KÐÌ„ûu^Þ¶‰r"F5ìþaÆÝpIt{ü˜o>´¨JåÒ§€WÏm5þ u×ûû©Xð ͠и£{RœÏîQQêx~$ÜÂì¾d¾åÁ§¢×÷Œ‚ø˜nì4®nY².ÉgÕTÙe‹]-Ù ùMe£ªG\^P­]T}ç̘V×w‚‚ l“F5í‚È3*¥sö ‡eª$ÎN1óF/ˆƒOúÑ1‘&¼(ÉÐM±x˜6*ú¦Iܴ݇s¤Â"±¿ÜºÇkÝÀ Ab ø™ˆ!Œýûw8´¡7ºoE©Ÿ± ¹ü+u‰ ëµ?«¿rÊhiA¥/µq“w”D%´~®É¿Òõ[Œ2êxxkˆÊuXH¿hÂ! ü¦c©¬ >/‹ðÁfJ¶;ÜïЕíì£| ®Òù£ì YoÈàñ¾ø$d:uJø ñQÆ(lY0ºL÷|“…MÅ´ü•ñ*‚@ñŒ_G¡ªèÁTœ„g¾$läÿTèFf„{R°2×.ç¢È‰ønÅ åË2¹ …ŸR‹9÷çö2Mö²•ýÌÁ!0”œG„âõîU¦ƒšU–éâTöÁƒ—@¥HðOƒôò:¹£.êÆKÀ#<~äží^“agÆÁH·ß±wˆšq+󸢿üL@³¿8»îÀâÿ³$S]ȹ Ä9z‹ &üÝi"œ„Zþ£ó²Àq:¸ªŠ5æöp ·VÎ8µ ß)ð’öﻀÕõÅtdÚ6#á^ ëÇ¢{iÐÒë`ZŠmƒê•I¡þ¬?tÉaªMEp« Ø\€lj‚-ph`„Š˜E–ã;÷¢xL­›9DuçBÎ1sA"¸éÊœD†ùŵaO+< ƒcHfe©ÕnOÊïð0й|Dï3}eXï[\uÚUÜƧ”9x]ƒý—”ÒÂ-X´¤ãó€VöØ.{P4y~bÜPZ‘c6|T«ü!ªÑ¼L>’äiÌ Êê&ƒ…ê•XdŠC 0 * X#)SµAÌ2Mü¸>ÈœJ S'z/Ð*Ub,°£‰´ö‘òl$1`é:“Kc.á?à§E©u†¦’…ÁXëÓ2 ï YŒ2XElHZ:YŒQ"óܰ·›é"ùê‚0ÀpÔ'B,¿!ñ˜JÞ>¸07µ3;ÿœý¦XšêŽ66Yïà it¢F{‰ÈªƒµÎ¤Ù¶pw²nÇ^N^©­‚i$úéh™Ùi ŠYa¾v)³õ{ µþ&ë";ˆ÷H*éë$Vcû›·.ŠÌİE§;™¼òŒâépIrûª òë!üæQ3ѼµÔÖ¢o£A ì¶¤‡ÜR½Lè!zË´†¦ÁÌ@1%«7Ý·ã`',±-q]¿|iÅkÓ^,íCj¿”yÒäìý)‡"oК†Ç†Ù𳦹¼"둳’áI „Çøò1ã쪥ž½”³ǧJúyÛîAÜ6¶ÉgÈwÖgð^q{4müTXˆNxàܤîØ“ûS% ˜ûƒA‘+Á¢ç<û‹|üèì½÷Ñ ñnÇ"´œ”u„è×AD…¸õÇ¢¼+6°WÕlƒÓò6¹"ÎZ8_,&4ƒz°–“‘ò¶÷g²Ñ1q…vÈ%Vr!rµT928GûàÇ¡/‚ÇNÒ#ç$ÀX>E§Š“’êÏE^R©$ ;W³MÈIÑ‚—€!׸ÁiB8ÉL‚‚Å™Ye¥+m(ÚD¿M0û¡¦þŠyÊ<’ì#V¡ü¸ßÉ2Ê®3À‡¿Úè˜i&&×ïÏ o ÷\d«‡{¬œ…þPZ"ŰnÖæ€3¶ƒŠH;z_ ˆXËk»¦>O&Q:}må”`ž)vaï°£Bã`>¿ÑÏÒ¬^CôøÕÎDoMÛFt³Uœ¥±P€ÅJ³‘`cíÓÝ´ ìéw—[«?ÀevÚd-ˆl€³vdƒtà;:âM¾¢F\s`\pD‹àÞŒÞ^¼=3i²£ðùë‹Ë“ËWø|>1yù#½8‡ã“Oqøë»r“¯¯[œö"k{û²qøqÛío} ß¿Sªû'ÇüäØ=I’ÆDÜt0Û<Ôþ›eMbŠ)#zšÎL‰‰‚_qaÊåDL}ßçúhèqÊ0:ïÝÆ³¡çÞÙØƒ\wgD—c“90nºIßtHnFGNýîþé8.íiÇÛr[MF˜´H *É…Ú9h½$ŸSSxà=ÑNJä@=8 "ƒ!DXL.öÑM§š:â3¤ÄÞ©VõþHœ™–ÿ1VQ`°é²²1!Ä\ªw¹½pjÏ'•‚‰¯ÕÃiª!{gÔÇu[™–E¾jç*BXÿ®’!ƒ`ØÈ¬ëvd³kìÁž2H÷Ô yj–Àç-D6GJˆd +Γ´€DAM›¹?±ÖÁl¯´£›´u—}püÖbºnt§˜´ýCzHõIÀ.ZÀZ[ñÕpb“Xüy‹;(ÃMñl³ýuÓ7R`«‹õxX!»ò{°S㪅دñÞÎÖõk87€/ötÍÿú=¯Ï 9:oó’‚àTwÔ €ÿ,Ü1?zmÙõÛv#*$»ùÁaÄxÚYÊ÷ÃýÛUo6‰ë¿‹Û†É…àH¢GæèàÝ…Ùè?DCÆrÒ»&=ÛFT?Ý[²å>ÛvÆùŒ½[&°;xsº'u»€vµrŸ®6zÝEsDì+Ÿ.];rx¢?SR9ƒoÐeë­(ô5ŽÄy!Àâe„œ"æâ—Üã ³N•0M-Lyì7 Ƕ­F¢lÙì;Ð6O\6/È«ÔX ÂjDÒÎðW¨‚ž 8ŒÃÅRUHòÏlùl€æ°v'ó ™u¡¡nø½ý#geÂÌ·I¿w/Éx×:îͲ½d\Jd³äA¯SA;µÑ¤¸B±¦>J\ÙÌH×-3-© 2QJŸx˜ªˆN¯ÆM–š;5]&a»_Ðg3à]f¢Ÿ¡ ¬;(b‚Ä^ÒÚ¶«²&<‰ -u+ÀK6jKöÞÄIP˜„JUäÅ÷M£[¬M¡6ÔF†Þ8ÎémKµí½oo«#5§|%šEjíy,®#XÓmáçÔÖ +Q«ê^÷þê?¿+Ž•kDŶY¾x·ØÁ¾QÛ°º™ÜíJÛ¬¹%Ùo“{¢‚(†“TçÞæ9•+FîR7¢%(\Ð}œßu–Û{äò1†x/Ári»¦zGM4x‘V-Qkå+n~²|ñ-^,;p+qÓ‚ÙjÚ5†x3Ic*œ>?›B°¨ ¼)MTŠJm­ IŒ³¿Blö&PÚ¨†ðâ9ì›;Ï›"ÃÛ™¤žXêÒl[‰°]ل߈†®À:嶬àÍ]¿¼U5µÒRð{,§¨h•ÈËrÁwá¹¹uœÄzÔ¹D“dºÄkTX1ÃŽUVFZ¢ôOØÈݧЭ ãÐæ(ZkúvÛÎìÛ~ïf°D_ç.ùÛqÛ¯oåmÁ C’ºZñ -r+EÕWî§ } V”^Â[Ã$Æ®ÍEI#Ó—~Á^í"LÇÌÂeô³¿Ëý‘œ¤åÎRrÞ2;!OÄ LMIÉ2¡Ì†y¦É6)Å~ ºuG€|£PÖ¨gÝ•¦²œJ°QÖ*‰×›Y`cEäsí.aMñ*'Ýñ–b¦š  d ñ·Ñƒ ð!ÊH#ý([2Ä®gŸ‘”‡f(ì·OzÈ<~Ù½°9G*I¦$ý=åI_+5Ci¢t-É uÍåä=Ã"nŠîqh›Uii‚Ó¾+ža:/çb/[pAÕ ãòd¦…Ÿy3òHøÛ'¶0èJ=ѵÆ@¸§ƒM؃»sLŸ{« ÜàG].’ö+•Ó·[3¡f¯|×¼ÑUëk2Ož´]†HÓüÉ}’›µXÙ0 %C/³"Eànȳ6ÐeáO¬p ÖjtCŠÆ]sêé«'Ùc«E2N¬nûÙÚý‰ü·3NhyB”:ШÍêb26Òw³R«v}Ëwûã2£àª’1WØ :t鵩͗Gl#?ᆬZ]=C„‹ø"A’7©/˜"¾±vEo†1#y¡)F=Á$hw ËÑ€¿¦“ؘ—Zì&m- jV.ðŠe­Qf"|t±¹ÇªK(4ò3h¸BôEÊ;Iaƒ "l¶00­[lHÈû ä0—Ñ–ÔAÿåÝIsh Á²û—äì,9‚ÈÕÍÝÏ»ÐjG$Ù\Ð勤»<ËŽ+×.âQæR×|ïN~E1ZàSº B‡ ,_—Õ*òφ¦«'dJªFøÇô)|‹ÛvBv, ¦6ÓóíÆ¿ƒOãËÅ eGiÁÓ1 FHþE]‚œ00zõ¸·^n›$,ö±_å bœÁOœhõ—œœiˆ¦jü±Ö¸½.Œ†„y`4î½&ÆõwÔ½tí¯«yÃô'é›¶c¶›^ÊñÁh¾ƒ½ÆÞ„î¹Ã2ÝÆTHŸiñê1í–¢|7ì̮ް@t{ÌœàÓ§F93±ííEÒæyvKÝŠˆioMúþ˜¹$Et¢&ÃâãD¦]0'Á]“g§Õ%ŵÍÂ8A¥wwMj­/œ§6>¿œdÃ91òº‰tk³#Ü(º¨*9¦2 Õ`‚ƒ¢j+ºÔP„s¨Û}$.ÐBÜexùMúf£ØÒ…CVXv%cœ¬i ànâÄa-­™KÀ.GêRÓf×T¤×ÚÆÇ­>#X¢ásˆq¨fÀeªb<-#Ð¡ÍÆ[Û¶¯ÂÜÍ!kÿ‰¢Ø=¶YÜ †8&+ÀûX'ëáEÐXº‡A£c Á7e8QW{ùØ®àÓ- >mëâ¸ù²ë©_†y»àή»Égø4,ðØ%·(÷´O¹‡JÀvˆ[™ïcìÿ5w·¾¥–3úNY€G÷™Á}-íGgJZcÖDò:!´ OâfOj_:ÿ—pÇðw;ú4 ü´°Õø¸ÿf?þ¡·=òJ2kYuîûü¯€R$¯½Z±_ Dœ¾’Ìy¹ÀtÆC^ë%¡¤ãÿôv · Ú‘'Ó_­è­R„Qêµdr©¹(ÇL™=SÅ$e£Õ ^B3á«OØSµÉfE˜4 šÐo*é6<Çúø•>þ¨%5yq.Ù›»¨tµToÒ†#\ÊZ†¬„¾$·´§Ý3ÝÓa²ÓGî–Äô®ÜúÚòÚoÂmàÄVõlâ¹2 Û zØì wô–Ãø‚ é)RY¥}ŸfŤ}YÎ?£ïs*STo%¤„+Î7ìVb¸dûVe â*pѰ’‹§x Rgbl¦\,J… U¤6µKIãfšÆñ×Ô‚ 0™ΉDÍCŽGþ´É÷=sAÇ$-Zéåé(ºEOÃ~üHÝ]IŸ´2Ä,̸¸Ï»hUéì‡ÖÀù´ß¥“-z6&ž˜7œö0N$ú,4 ¿“„Ÿ› /íñEѬ9LŽ×cb*‚›ðÐØ|ïN&û”èw¥ìî'¥®YwÐ}SGBNÒWM…ÉRU+`£;˜±Zd ~¹#ƒ ‰CA¹)*np‘Ë~½ ÐѬɀ¼xPà¶µmôZkP°Ì˜²n )l¶˜’'•Z'iȵ÷¥–¬ÿ´GQì‹&ËSÏ÷…ãüíûEu$Ù4 ì/÷Å‘D®bõKV‡Žª\‚Æ÷ôñàPº ÚIüð2ôòÁÙ²û_¶^) 1ÌCµ%k˜=a>]ÆÁ²ñ‡ÎýIÔy·­{¯¦Ðã¸O¬Es·d=hÙü©2³ß¶YŸ|¡izme|t*áìX ±P9DJ™I‹¹¯wfí/%“ÕTò‚HDk?Tè^cÓ§f1`EñЊãèÎÅCúJ–L(Žæº»h/izÃÛòn>¾?>@èm+w$cûôt‡êk϶»;iºßq葬«ÄéŽ4Vì¨êmÜÚÇb±Ö0kÄxW é¡°>€Y=ÏÚ£!’ xgžõÈ1µ¨;)äO†£wi»9R@¤=øØyêø+×”†ò1ÊÇ;wêblă¥Ã@¢ÇGÏŽ,€ía=ëtÜÈläÙúã‡baΤE¯,pà÷gpÄ4±°h|¡qïQ±Ä<¶<÷?„ÎñFt¾h¡~™Ú Æ!èâ۬חÿïuzl§:·›\§Õï nÝÏ­ÙNß§â;þ.¾SŒ³2OÛ_´;س»2šŒ•‰£¾û(¿ #¼ç36 ÒÒüø~ï¿‹o|Gâ¶$xœ;y’ñøIÆ »Y˜l&dñœÌÍjÄ\Tš7Ù–U|s(kI<âN ®·ãxœåisÛÆõ»~ÅFbÒ¦)‰9& «´<` ‰Lªi×õ¤X‰¨@@@ÉœXùí}ïí ¤(Çí4­Ç#‹Ý·ï¾vytÄéÍ:‹®ëûþ|ÇŠg¯¿c7YúÌ_‹4Ë۬njææ,ã9ÏnyØ>8:bFy‘EóU¥ ó“­r΢„åé* 8Ì£ÄÏÖì2Í–y‹ÝEÅ‚¥}¦«¡,Ó0ºŒa´˜ŸqvóeT:õFCM'n6O<sØó`ñ!½ëÞ2ç¯ÇóØxÂÜWç.Àƒ &½ÑÔu¼sGƒóÙнl1€ÁFã)9w_¹S˜9·hëÍ•lü‚½r&ƒ3xìõÝswú–¶|áNG¸Ý‹ñõØEo2u³óÞ„]Ì&cÏaHßÐõç=÷•3l°/s^;£)óÎzççerÎøÍÈ™ 6¹¬ï¦½þ¹ƒÛµCwâ ¦H–ù6&’ç-ä]8¾_ ª7yÛ’`=ç/3˜/Ù°÷ª÷hl<ÌÒ`6q^!îÀoÖ÷¦ît6uØËñxHl÷œÉkwàx]v>öˆq3Ï!d†½i¶(À8˜ßû3Ï%º£©3™Ì.¦îxÔ™¿¦=X=$^GH³ÐgľÁ™ä~ûà€(C£‚ÿ>ûÑ¿õ½ ‹n -obn¼ ˜5Úø$ ~’}Ïy,–~vM¦iyìEQÜ|ttww×âvà/Û~Ð^]ýºÌNŽú¸¬½(–±2J€k`ÝùàCÀ9‚CãµA<¸¹þàâœÍ׸앟0¢0BZ—«$@t9¸Xp«lÞd¿0FÃïÌèÏì´fìãGöîçnÝôöÍ*_˜]PÆújFÜ~šC…Õa‹e«D=•š¸Ã=ü½o6Šõ _ÅéÜÙéé){’Î1x?aR£ß“ók±'^àÇþžÞ4@@OŸ€·žZR²ØšGËU A '1~~îþÆ/tí°·Ÿàj 7CäË×yÁ—m|zt (¶ñ—ÔßúðiÁÃU €NYÂžMÁFùØöÃÐ c>…íîð½;<µ=n±dÇ-° ÙhŠ´¨ÿ\ñ—/üàš 1V¾O~r&-ö8!z jVÐP‹m_SBîMš]óL¡§œŽI`· ³¡ƒŽè}Oî#÷Àîó¯+Qvé@lHƒ¼Ÿà²Î'P×ÿD,?ãº}¨ƒe_U©+­ò[H¿Ô2ÃʯiR½ï"Øê›­‹Ô·†x]²†yI¸ ÒUR°/N1•€ê ßC œ9ïÉ$À!ˆȬZ¤q¸¹“±F¹&4¤e~ÅN%Æ,ƒ$)\ehæü(áûžYˆœ²CöŒÕâøÌj1ƒEu…y󌶻´ªXdéIšphb Ü ¦‚ÜS²¸®íÒ I,îRL&óÂO =)ß0¸ƒ¬2Y³"ÂìÓg7¤CÎéó`²1‘| L»<"ŒƇM² ë&ðuè3`*kȳ“'[ø·X­¡\ñd¥ÏòU°`êRõƒ«üÓîr|r±Á†ž§¨ T Å |¼0aÿE(¬.yA"-BÁ5üð  ¢ ^в’k0¸R%A9ŠKoŽœ®Õ³SÖùªÓé–'‚÷è|gÅšžåù?±S{õ¹Â©ªA~CDòqBJØE”I” ÏGh”¼CÝáTU!ùŠ HÈ€ÕPâa™'Ø­ê%’$ÕiÌæq\çïn’#NærsUM…~áK^(P*V³4àP,$W$è?“ªePФ<[!Ð ndc•Û%Û9îªaÛ>̨@Qú¼^–ùëÆhöªküb¢×Ô3‰ÂSò)z,Xe¨ Ó`¾åêÒ¬d¨•vK¨Èaâäð‰Öá‡;Ã}þJ+¿I@¾®÷iø1\¢†¿í -ïnc¨CµÁPë^ˆ¦Í"ðûB@éDu¨}Éñ¬pÉ~½¹‡ÉÂ(BàRT¬UR‹Ë7æJm\ëOr=fO1ëÞ¨“2âKvÙ¢5×Úª?_oßS<ÕÒ«å\äeÂ]Ùe-?:ÐÚØ†-ŠI;ËžiÅmDaK“ cbKìii2,ž¬´0ŠpµkPou'²Ò ÚŠ”$#~·BÚÊe“.>Äç2ƒwsÖJBoËùÚq-‹"ú_䲕Ü}N6Û9#®øc«Ic?'W­äX0µÊSDMöë0SÀí1,S‘Aæ”cf”è0üßÍ\  ¾—Z²0 صK–£}ØQ#Ì}%Ask2†6äbrÓÆ¦º×ˆæw©ò¿Q*Ÿ$ŽrV†€P"'íc¾×Ð ]‹í!3™ùU`WRÈwQøsÝ$K®Õw&iÀ|â_)žUE[ÏzØ\ÙF¼F‘…–5ª³¾ ª*R± ®jj”Ÿñ8gÞ T2 yØhªé[wµ–Cåp-ŠÎ{Æc(ë–R¦¼±qØÝ{pU¢Å…5,Õ±†ós(vT¥I'_Àn¹:^‹JE¨xzµÊDÉ–ð…x‡º ;ì09ÛØ(GÌÚ*ÈLâTÖnÓÈ+ •Fú²eA/•àÂR'èÁ{ù(-Pn‚+rU[›ýT¯”lËpK²Ó<Ú0‰ßû‚uÀÃjÙ倪Qœ*Ç7‹Hª³…˜hRKÑÔ»(ŽñøÑÒ9…-ÚYpc,iCGA8 4É~°~~Ëdz òhØ~CQ;GÅvS¤ŠRеÍuÑùìY]r2Bªg«4 ‹¯Ò?;gÝ-\ h¤Œ_vk Áö*Ëwx.àŽmpÇr:ÛYô@ü”(I rN+RJî}Uºü—•Dštm|¹Q¹èRê› ÂÒÜk×ÅV…ŸÙàШ:µ†…bå>*ÎC¼oÛ>dÓƒh5=¡¸r5*¢ÕéÐ0+îØ mIµÿàúB:N5¾´$ JT£¬2`ê–¡j"•3„&fiR e(ì¹”•Ø™Á=#IxˆÖ$¶–]<|ªBc¨:EÐmhÛ0ý°uÍŽÛF…\Ø•;{–*£r#…±ž5ñ§\Yá}êÑBä…ø¡ÔYN,g349/@`¶7íM÷ÞÌ»pFCg¸ÔvM~?™Fxô®{äÖŸj_Ëj‰Ô²”^¨¤-ÞíSÀG¨xºL]¶ ¨À„iä,æ—ä¤pëÑÍ€RcÎFã£ÁHvlcŽN…rÑC®n}ðU ¸“F±*ùªAGóMô,ëð±S®ÀOdøÆV|}ÐÖ»º×™s>ÍÎ:lÎTqûXa^×0Oä_Í>°GÕì§+ºmÑ­¬]RúÂíí€[Jçm=|Y¡eϹËGfóç6J‰šdàhÔP‚{4±d9Æ›öŒÓ ñ6÷$w*Ñl9“½öš¨,áñ[%µ ›U’‹xfÕ2ÉGÆýp-ãØTËÊóJ:h*›£] enb#\”N+vÉDS¡´LwN-gß5ÎX9+ýè–«ÔZ¯¿Ûض¢›Ó•¿—¥½Fã­r¡ûJnЬ¥š´6· Cë|T¦¥:-¥O”héz‰x!s2ÝD€ Ç àgë-‚ÖÓÅU)sä! %\§Gø¼ˆ®ÐÐåàƒªQMðJz"°·ÓÓÝ«¼¥e3R¿†hW·(SÒZ²©ü]ÃæSj¡Ù¬ ™RŒ¾H½"«Ì!Vò¿Ð½Ilž±Ã?ë¡–0ÄîËJdŸ¸…)Ïñ$;\¬m4Êóç%W+!CH,)¹ÁÏîS˜^PC¡ù%;iÊå–5þêÛ?°“îFßÇl 33ûÞN³ÞÈlÆÛdgdžÇÇß=n‡¾º­Ò­eå–§VÖT¤š²fÏ•!ù—H›û£–a¤Å }Ž–„¢Ã¦Ÿ¼ÚGÕ¨s‰7|ð–ÝšöÈiNâÇRÕ?£µmUjë(Hzœ.ëK Ôžš‹Ú¦Âå–^3îPíE” Üeg*Q:Qª¹ºeDcðñGºôÿÞsÿæÀã³gU$;¢¿X&­é[çÛ¦Åÿ5ImÚyéã6ŽÁw—©ë\\Yi­@÷°R³îñVªº–I5Àü'}Óâ7EÛ:tl° ?Þ@j"¥´¯#àh»¹-^£¿›yûíIs‡Îwê×tJgˆeƒ«`ˆŠ®ò:9¬ÁŠL¦8Ó,c0ØjÿEµŽeVxëtõ ¡@~³JcZ$¬R#ÕyGü\…p"æòrð‰yÿpÀ4WaïF@®I)Køî³—Ǿnm²^÷°nk¡6oöüùsF6~÷’Ù5ƒiüHôµxe?ÒÜͥ˿ªQu e„ê ÚŠpvÏ>—íYþÁ‡š=ö×øóNüeÈ¥<*ZÇ© PŸe‘Xn_¼Æ¶*ìfxU·ÝDþˆ0¢µ| œÛ‡bøƒ=ü¥¸ ¬Ï£kK@`M¿ÓtZz ý Sš`wC¸? ëàyIy)óé¦0ƒST;$¯=1ÓÇ4@W¬·¶QÇ"€BÝ dáîÂùM1sc"ùÚG·e¬É[ݬüõ„9&AP<^Vê1lÅc§tsÙx—®uB!ŽC5â•SP_3ºU=1V/j`Ž¡tßJœYVö"¾ˆE•«=iÉ«·Û*G5'<•Žu"9¿n‰Ž—ub$/¾4ð-ñëƒh%6µ¿%#—á,\¥§I¯eiJÈè6(Ûýˆ5³ü ßWFì¡xœÛ^³­fC!;³‚­ÂärvŸÉGؘ‹Jó6cw4žÕ z°ß xœí=ksÛF’Ÿ£_1VÝ­HIå\ÙH¦·ü\{Ëq\–ã|PùH€$Ö À E*Ñ¿îžf¤í=»ê˜Dgºgzú=Lz=ö~±<ذ2ÆQÎÆY±8eå,.Ø$NàGÁnò¸,£”6ìqÌÙ“e>‹2Ê}öª<êõ&XqŒÂŽË‚ey<Ó a“,Ÿ³IžÍ/¡›•åâ¢×øÂŸ$ÙÔOoýqÖ:8=ùªd³ `£:Ÿga<‰£I<•ÉÉùg–M¡Ë2c7Yþ‰lÀŠ2Hà ÉÒ›Eéx6òO-KWÄ‚$¡ïq6_,Ë Œ3$“FžGó N D\¦e¶Ï¢ÐIfI‘dZ"ô5ΖMØ"ÈqÈj÷mž•Y¹YPÿÿÆ\óxQ‚yDtÞÌâñ ¹¶,`@0ŽÒ‚ttÔ™,Ó1’Ö) “È«RtÙŸGŒQñuUú‘ eýÅ®?^ºÀýŲ˜U½ðF{"!üyLºDüéβ$v§Ëù”´œ% Ä*ÊãɆª°dhıP ÅÚ$–ç@N²ñVèû,zCÍB׈yö…>_´-l -u’%Iv§S2¹ê§ë^ò ß\PKN¥ò²`ÿßG„θËÎûýgðç'v.ઌ³(-²T˜jÕ&ÚJE` !8‰<³ã²D…! Ás̉\á/¯ÞŸåê“äUD>¶ö"ËY•% 'EY»‰F¬ˆËèBz’…¬7’Æ™ŸFeĉ~šE¶ê=Σ±jZŸGå2OëåŒTÕÓ¸Œƒ$¾ü`±H6®ÀA>]Σ´,ÈÀÐŽîP‘~%¥÷£5øÍzW-‡QQ‚[ÄgY¶ÌÇï Ü$ë Á0–E”—t¤:c"³'¨ªˆìñHJC»äÔ}ëjžÅ\µ(D®{\.ÁƒhËŠMØ‚žN¸¤c<ç´“Ê–°‡¢ŠN‘zã,Érÿß…VDqÇ,Zm0 Î, ?dÍpqIo‘üÑRdI6Ôû*ŠQä@1 5NO®Êì7wÖ,’À¦7N¡Ã""ŽÓIfÖŽÁsäY6 ÆŸ¦yFo–G)dÔ:Hû”½>TÙ LNY  +;íÅM:XÛeKЇL?<é2´¬AÛ­6ÁýwÁ†®:¢Y/ÐÌRÿ)ÊêÈ}øÜqtº p¾ò?ÂÑ í…èú~ߣŸÓs­`”,#ù› *Ã4•{l ±¿òG8é܃Q!q€}i”›¦®rh`$ËU¹6¤sÈòK³”“;dS«œ¨²‘ðw‚ô ušÇÏ»Å()0éeRnÝ0;}þéjôqAáx@÷¡e|¸´¡$ÅÇ ’k°bJO‰OFßä:9Bm´”¸äÖ‹¯5â¢Í`ë@µQõž’x—n»Ë:Ýò?$ê³Ö¢>k-ê³ýD=‡’â½C»ÙWóië1Ÿ¶óéacæ:n|òÕ>i3æ:Pm°“và ãUF/Œßÿ©AöÚ Òd ²×vdÞzº[ Ksþõü#Dfj£pÀ áKÌݨ¼ËÃWCäèh¿jÍÊâzüÆÝ´àB§úQkX”ÖÛ¥ £ÙJpÁ`lD]Jþl%@Vý”3?wÀ£PÏ]ð±&€rOB¿ê@Ò1 þè^Ú² M’a6•†5—ä±›ƒ±©o€±=Ëñ!v’þÙg:"|c¿éz_¢5b£¡:C]Æ2Ê1¿O!¡fŽ¢â©ÔÈfRNÏ<кAÈ©’TÀ;rÀ¢*X ‚úN~î§Ÿ@“¦ð0xЇ§<ÿÜe±¿›ã*³+˜…Ã4§û6†eë8ŸŽ:Ç÷˜ûÇÞ1ŽŽà»{,çØwßô¼á5*Q‹yÁ9æ ‹¬ˆQD,]& 7 r zNÇR€Û\°Á®4èñ¼ O?IEv tÀ£åxÇb.DßVj=sõãU_ŒÙÝS+…Nœp†^Ÿ€Ž”úk(9ñê囆ò[,ÿxò}¨ÑZXh¡GСHk}¶¹Ñܶ˜w®=¶ñØmMOÖ(æ5ˆ—šïZÊ@J€Â߸jo±öjoµZ©¸”©õÏVì|{K.kG×¢jãèWTÝš¦Y>¯ Ývs@§væÁxµ I–š:",—LGÞcsORZ=ßâ³Å ÕMQ¢Kr¬ÅyÙ‘}œ .aŽÑ}‰²MUv+Ën»¶ òÌ ~7Žn›Gê áMŸ3EË Y¬"÷Æ¿u' ­5¤Š{¶s¦°–ôðv6›Â¬ÜÅ$ {mN•“l)¤µ’²Â„fðîV>˜/ïjåoðñ–o­È ý¶.qõè·‘î­º@xžÝ°ÞYSÅ¢Ä=áÛ¸“^)÷{£;ÜVä¯H„7H>N|¼¥G›|™þ _ù9|[IañŽO«ŽO·t\Ÿ"Ú±êVuzh¸̨â¥&­èø]ExjáiK^Åô<*Œs¾¦ÍÌìª1„ýR§ª‡!"(Tx=2%YõôI”ö[È”àRå;†ôh£ØõGO,‚@©T[ q‹Ükò}ºgÕTgFÂfãÇÙ÷Ùkî»|°ô¦ö ØNÆ›ø(çy°éØ ‚qÛ@4V:ùñDÕw¶¯AøÀHJϻߦÞ6¡û¿ˆ¸]í(ÀCÕÀ±"Ò`w†Ï2âè4Üî‚CÞ¯ëëõØuß÷a7Aýß|d}@šeÉ]T¤ÀókPhýa¶þXFGÜSMî~t¨¦æÓLCø˜‰üb¦2 Š÷Ñ| îÙIí´TÿN£ò)Ÿ:+˜%Ø®v“‹ßP©Ï;0ûgÿŒ3¶ÔJö %b÷‡ŽÊGCF•gV¥Ì J3®IžCåýé'Cd€^Êá*æVPU»ÿÝ¥öW¸S¾Ñ‚a-ƹ îÇŽËiuð`ZÞìTQ±S)¿§i¾):›¬®Êí6,Ȩúª}ÜÛU?†Z Ð\ˆœ2G½¦>Cn°Ôõ톩7©Ï¥¬‘êí4Ý€Hâÿ'VÄ-‰ÿü. ê©:^²UUX_Ç´Hž¯"cTUü†vy(K!²hгÅD±uOµg¬ÃH=ÙE³µb‹ÒbñÙa=²; ßm‡j™W<í²ÿ2_~–ù£Ž—ríÇèÎR®])~Ÿõ+»^Ûd ‘óÀËѵµ¡š»©‹)¶ÏÛÁžŠ¬èÿ=UË<ü §3;“p‚jšŠÒA¹+:×fFª;&¦[Öò Œ—ð=WS{WžÐºéÁšrm]n˜W3ùhfšê Ÿ~Æ,ØXÇxÄÏ=¡{¥|PúŒ‚ÅHŽf|´^8v–íý _.J"Yj°ž9ö®ÕòôJEé‡GSk!Ö~äS ¾»ìLžsà,?Õ`á>ÃÝ‹'òÑžj€R>ãÝ?qº£•¼g:äO\¼ŒËšwTÕê4tvF=UËüϺMvq¶qÓ~ÛÇÂÞØ»H²vð÷n_R¨¾?‰ø1X¿w ®#[ BäûPûÇ^]в‡ ³kÙõÕÎZ§‚‘91œ–/ó‚Žy(åŽâ®& c²§ö¼œq‹€p-y0t/à _]Õ ò ¯Å~õXúÏ‘·¥툤áîÍj¾4¿%¢n_¢Ç ð-ÄQõC(ÍC`ØÝ@˜ˆ1„(d(=F¤43‚’ÙšÏYÇÝ‘ ·j¡Ëz@™½VëUŸcÕr§›áð«G¶Ã£Ú׎hŸÍÊýbQ{n GE,Cs, -™)Í|ÉôûÕ,Ä1\ýæ¶ ýxEuöÇJý[OììWdž¬L}|À#"¿ùt¢c§š6ô€ %ƒYýæjØ úÁ•숉KoÕ*&îZkgð>#Trß°OÉÂ*6†ßrX´£“í©[4Å5?D¿§65°dƒ„–)öµL})Ëu4ÛáÖÃ‚Ò ÚëÊÔêñÞ £ó©Ao¾-y*7…w¾/Æß•kwð3ɲOK½$úc”¦|— cû{Œgq[Èš’&Þmì—3q<¨âVír5Ë…U*HWHúA÷¼@‹½W=/´É â=\KMÁ%BSúá<ýc§pÐÒÁó2x3’>ÍÛ3ýЃ[;ÎÙÒârAœ2Úr5îÑÉLþ}ÊÎæ¢ d:s¸ÎîÚ\ÕN¬s:Däphð¤ùèºéz;.Ø|ÎIžïÅ©=ÑOwìrl°ëœÅÝOóQñ×nvMïĦ©Äh R®ã骛¡Âÿ>xÿœÞ“nÁwè<•®‚BðœÁXÏCºº2mvÑýü¼>ÆkI@@¶À¯Â>-Šk[{Ö| 'åe„Šðm€~Ý qßã°œ5@,âu”€ó†jÙ…£žõY<™,‹ÈȼêPW³ ÌnŠP/¡/~Fjà;µK·2Ø<‹46£îÎc’Ïýš¢{#] ¾ÎcÖš•s.·¡{ÝØT¥u õþ×g¿^°pfCtHðÊŠq‚'׳rzUÐÍ"*Š8v•o±ÅÚëüµ;+þ®÷àÏK-¦¬g[¬À^:Á$´é¨Øà,0÷ã´ 'É]U"|/Ý~ǘÏÙ8ï@öøÒÄ)̆^zjhÛ§uHÞšnÒaµíeíö<†$^!Tï±™dÝiϽ[áeKª ñi7ÿh,øµ@‚‡Úf½Fâi'¡@þ•AªˆðQ 8i^K>­s|og¥ÙúEçL˜îÒ­iØli—,nDN$Ûˆ&x7Ãþ%ˆà¡Ñ/”Ü¿o­ˆH„5"¬o—­kð’² ¦ä(c|'¶g";c]W~ø:A¤µ…ÄG§pjH<¿âwžˆ‹Ax¦ÝYCÖ¸Yt8ÆšÅT¸>Á„æ<Þš½‘ðO¯´áBÌÕ•»£ú)™¦š÷À¾Î<Ø*‡ï;`®ø<Ϙc~^™[@¢»“×I7Ú‹1s¹XŽÌ¹jÌ·ñ£¢Ô§É–Gl®WkªŽ•4ƒË¹H ·/ªfûÿDîjÁ²s[.ríÞ AåÉÖpœìðX´¦0bñeÓiä¾is£¨hxÅyÛ^5béë“çý~ßa—1šYü™ö“(¢±Å5cC ¹Ö­£\ÇëçP8ཡc°eà×ø¨e|Úk¸¬!Àþö7kö0¯^úÐd†ƒÉ0±˜Yï?(û÷ëuw;m‘º—Ë_жtikÕçï*±2gòo½7ÞK{ÆÜéxC °úú+Ö½²É°çÌùÇÎOÇöþ®isókCèGßz@°µ˜!ÍYcBݰCL05¶@ð4HÆbfTšìεê×<ÆjÚ«û53™Ÿ%áS÷ ŽÛLIè¥|ñ*ù"»é úž¶³¤­r‹SQƒî.[æyû[NDô×Qê¶,¹ò©Ç‚¤°ÖÜê‹nðóÛÈÚobÛ[¡·îÞ‹½™Ö³ªö7WÈî´­#·÷z-®ôpû –:¹×n WÖÖà-Íá€ó{²1‡nEr ;€.ü¼Þ cÈVí²ãmÃxïà”VYø%•ä,éižåxóàx™C%ã7Ç&Ù2/èJY»4¼®0Z/²¼jLãν.–à©ÔUd[ïê¡5c+†1ô0 OÆËIÑŽ°1gtY©¶ ¡²Ëj-â6­IÛ"ùý2ZøÕÒw#,wÌÓGúö±gîvׄ&ûhN†õŽT˜«f{/ž÷#V•"ѯ*EbnçCPî«<æ&…K–$K]¸Ž¾¶eÕ®Ï=bü´tœt¯ÛOlñ¹îúízæ@±V-j`ïÔK3õZ¾.¥¯(8Ú¨w|ñ³àk},HCÈ<办Z•‘Ûè«Ãõ+œv)V¢'ïôݶ] ËÂVuµg&ínkR=¹-Én‘ÏaD£•=iejŠ£ê:`|Z¸À“·¯¿y~rÚkÈ(z¼wZ*2R|ËÔm9´…§ˆ;ÃN«L³F©Raó5lº¡íöY‹ võØ Ÿ´`xùò,K§¬XDrM¶é]µ~r»çfs’m:JJó¾\~«uÛ.Á5“áFЦÌÉþŨ7Ö¾ÚÑïðAƒxùÅñ|;Á¯WÑGºó»\UUVFó`­OhÂðß ‡ÿÔ,P3‹/5ØÏ•èI±>œ†ì b›Y&GåZá«úê¦VY\_•W« hm¡^ÞüHEܹà&VM×ã†3@ŽëôÏ¶Û ü{6°o?h‡}Ö÷Ï©ÃÐqà1Ç+`BÚè÷¸à`çĤù•ÿ€"#»çZ}ÿ¶OàÅHÚò…&—¸µw˜*ò·°}€4ÒŸsL,؆m¾n½ór u° š­ó£ïÿhôwœûýj‘íÈÍ Á—áЀ.±@&id÷¿ üŸ=ñ_Cƒ}9Ü¡…8ÇßÈ:øyþKƒô‰q?ƒG@‰ëd·5 |Çn‹¾ï+·[#i”ÉÀÔ.hÙ»~¢²]#ý6C瀎®Ï -`ßÿi'ÜöµÓÑŠÍúŸÒ‰PW¯å»£z +°\Çuðœn—lcÙhÓ±º[mYçßQŸùŸºA= §5Ag?Bø³ChKŠ4ßÝïä«ãÄOz6¸]«5˜σi$·À¡yzå¿^tNªŠÑœWûì5x^£#Ð!Ž+<"6dǼÇ~±H 5:ñ q YAtõzÕŠ±n-ß?‘=•u,1_wc‰Ê:–6Ûr"Võu\}åΉ¬Øb 78/{=‚E'ºÌrù?Þrë$?bV)¥uE?¹U ÙsÉãYšhM0ýŒ—áuÿ£J¶U ,°cCŽÇ¦Ð°•xUäÄòVàâ·V“’‚×Êl!)Öì@ŠP‰Ï×S~íßÓ¿;ú_jÜïî©xœûp›ñýmÆ ™l&31yMöe2b.*ÍÛ\ÏT˜ Àß "¯xœ31…ÜÄÌ<†­Ü;â.¨1þ:"2Áïk/ƒ‘ ¢" ¦ xœ31…âäÄœD†æ˜…³¹ej<*ìk§H4ª¿\Þ Ã S®xœ31…ü¢t†¢OFšvvÆçŸêáK8YñÀÔ-b!žn î¢xœ31…âäĜĬb~õ‡Ì&º½gÝ;df Ÿe—ü:ñµI )¤xœ31…¤Ô¼äŒÜÄ¢lO¿„ÇÖg¶yæz«3Åwj¨ æ ‘§xœ340031QpJÍKÎÈM,ÊÖ+NNÌId`t8ë´íõK£Ç‹¬_¨z®þzÙÜM©cATuMÂcñÞ¹tÈÛ2ˆ~öæXÙô PHÉÏe˜ÿñ\gæu»ûÖÉßÙ¿ÿ—Æ¢)Äç3€²Êxœ•VmoÓHþî_1ªHBpè¾TW‰r©îªî EéØÞ$ÛÚ»Öîº!¢ü÷›Ùµ×v÷â4é¾Ì<;¯Ïz1ƒcÏjutùçÏì:™ÍZÕðð€¦ ú´Ã€ë÷àCŽ%¦·^ •o+4w6BÍZ¨Éú/ýÀC@ CB Y؇I>…çËå‹§Ï—Ï^ÌáÝùû«Åë«7ïz¨Õê®I!ÀÁÃpÈè Þç£¼Õ -¼ÑÊŠ{«lýâšàaæ<¤ÉjÑîÿ[¬:?ÿ $B]ÿÔÿyf‹$©1¿Ãm6©å ÝÚ4ë”$²ªµqàwÒ\W5ºôªD·Ö¦ovÊ·6Itv+r×'¾%÷XBÖ§þ HøÜÜŽr_&ÓCÁóº>.K,ÞÊoJÑ?/x±WXÉ< k)ÚKeª\ü±þÌÛ2w’rmö<;Wû/_$ONL£|¡¾ýЗéÉ”€icP¸«ŠTÒê°Ù^7G«¤Jº…XÅ$úyÚGkêÃ`¥uc·½ìÔoË5ôK©z9 Rã `ŽÃ4ðêßþ¶¦‚19b0Õ‡À| ß`•áËdðCX~ñFqX§E!œ5ÔM„¸ ­€¼Dký°­ÀmVjhG+¡P°NªMuÓfôð‘Äoȵ¨„Ûê¶DN“Il³T‘í=hc…™Ãn«a'Ëja¸!xË9Y±´Œ\j¼nÄàiƒåá¢Ïð‹×µs ¼œ¬„ šŒ;4×e)|éz”L¸Š1HUµ‘Š=óâ«È›p8²ÖºqÑŒ—Ø“”SxfѲ®ÿ˜ìtltØQÛ¶mÛ¶mÛìØ¶mÛÖYkŸ­µ÷¹9÷cÎg^̪Qï¨o|E—!Ÿï€+%ZƒàrÓO®çß3ñ;`a‚¨±?¹Xòñ@ßù õZt*ê¹>ª`󬘖=Z»¨4ÐÞ‹Ö¡Êždƒ– TÍõ”?U4†Iå‰Z.¾sÒ‰ˆ]zQ1!w¹÷ÔwÞ¿³‘ßýJ[Ót2h«ŒtF¯òJìašÀ~€Y#B³š,m!G-®*ž± ö•_›E¸i¸cKAÈ!A`’·­u¶ÊÚÝT2ò.pp[@QÊ öºqMRf—ŸM*Ôœÿ{£à–…nÜ9¯p¡ÀŽàµ’ùä„s×€µãKÕ¼Íò9—_o«œc.O¢toÉy éP]…ÉMeV £·ùª‹9‹tð]·°A‰˜£b¢ªÃ}NTn„Á¨Éø!“–¼òïÛ –JJéwô: ñ´5¿hs‰Ð=Qˆ)"‹Ì~Ü’ÏÍOIΚÃI¼ëXr…_¹È |ä©W=¨ø˜\lU%hÐÀmtݨwyÆáÂGWMº®¾4Iuû1 ¿ò2õ|b-Nj-mßüeTs;Þ£{Õ^ùMcAbA_¼Y,½Œ9»Oh:ã@<ûÔdŠ01ÿÇ|›o÷m>3&Œˆ’.!*š²Ð¼N¤ x&¼Z~W¥úά#¿ã“ ¢Á5ìÕrH®e¢Ê2]y™S¨Í¡ †hîÃâÁðSìÁF’09Õé²bIhÐ×ÑHigvbÃô ØUÑ"ÕÑcÖêâ‘$ǘßxÚ¦û©qöè¡âói ’VfÄ¥1B$ÕÔ-›Áð{uoî ÄÞbæègÜqéb* E¯m‡€‚Wù:$Þ-Ë£ãô{çÖdF芳k7‡«PúÌû+S£×êŸûUšÅl®³Hï3`'}“Ëû6'ï²ÈT¦k¦i«œ¾J‚š±5Ÿ·\¿Ý?=×ðS'¨—Àò::>ââ'>¸¸kt—ac‰éè °ìQ¾”63¡‘500ÁmðÆ9†&G-EÔâKï@0CÔ¡ÊÿH¹ñÛ6ó HÃÛŸ*?”â¡3[ÔèaÖ„á©Oµ·‚%#vÕZkÑúP©'_.SaÅæpýrù÷Ÿ/ž^]È™êbös^ÞBpB]S¹V’1lœÖ¸œT°½ËÆ¥TgQ§rq"ƒ‰ë]~V"g’Ä3Õ„®v¯W,ž³âX/…I|T¥¤j=þ°¿X† Ó}Õ@j(^HÐo„Ö ×9XÅ.öéù³´Ö1ùÜöèK¿Õä&TÉ„+‘;÷†¤L­\Ûp‘ ÜÔN×øqO÷-îs*÷ÒèÜúRE£ª‚ áô ¾e•n2}áSr•âÆ¥¤w2Æ.§²ð¦^ÐbY—Ì!°  Úä b›òR‹”Ô{‘}=~‹®ÞR’á¾/Óê¨à ¸×¤ªü³½íIÖç;\ÕÕàT­Ü{(äêɱO8M>c4“Ymcó&¼f¸|‘€bD÷Z>SFy‚+E#ZrÛÚPâ&œ Ǭ2Kvëüê5í¾³…6ŸT Œ§À"è×4pPbá…’~^Ò½”ŒÎ1×ú;1ÀïǼS!’˜¡ø}¶:ÇÁp~P¬€µÚÖ‹ìñ¦¨e£[ú_UÀí3°ŒVôç¿®ìïÐ-V•!æÇq¨ZóÀœSH+V$€ 1´QëŸf½Öë ðÁ×î°øV¥íWÉ–+¾N?Óœ´Dã•Uªq@5iù_¹ÜÃÚ–ñEÆâé¿°Š A©â |œÓ{ò’Œ bbj …ãRÚŒ€ûÅGÇRÃxú FŠ3÷nPË”jM¹åWÍ¥ò œ“¸"öÅDXÓƒDúŒšÚnμIF«ðÆÅ=»º¨éÉÙk®ªlŸŸ4%YG”zs¹ù”³ ò4²V'‘XÓî«Ì2iíÆÿž;ôb£MúÛ»É.Õ5½Âqp?Nhó}Ž‹Ëó«™«¬kp,‡3)Þ­S7míúy®' PôQþ^NrúÁ%âØVÉaॾXñˆï†hË@éÈÊu¬y¢,mËÑSÈë@ |›«ÊpT4ÑÞ)u‡H^¨[ŸR…™˜×Ü};®Éæ;â0·ŽpÖ÷ ,=¼ÔçãÃñ¸9cí‚*§2ÍÒTá Ï‹‘EñÃÇÈ.Ÿøz7²?HÅö…Í51üš]kk ¼^á,¡øIøT Y%ÔnùUÎŽ½ã2ƆÑïêçv_•sæm\Mß_žR ¦i|d)1žíPtгvÛbwPº/#dlƯ¤ LñÀ§wì†5.]‰ÈŸR¥+Ї¾AÝä£ÉR\Uä~ˆF:ã ­;–¯Tà¡ÿtÝðòÉ*×C¼àØŽü>$JJgž­uä„×i]Ù8%Ø9¨è? û§­¤WˆG{‚¡·\›ö?“š¾rö˜!6k‹{_‹Y&ÈÀù]ßA×L¥F^$!T8Ô–æº „Z_íF"ådyœˆ x:NCµÈ!,Ã}=®X^_Þw£î?݃&_ZSåe¾h f#¢$¥ù¤¨oÊá—ð <…_ê×íœÊ>²×§’ݶõ¥×~¹¯øû…ä) ‘ä¢{zY§P]Éïd)¹ލ"\¼y‚‘‹E{8z×›;!ÁP!ôÖæÖNUYþ2«¯55ÃA<âB“]*Ó¸/WîÆzYó¾1ö©HÒÚËÿOkJêÉyš)ÝÛàqeÖ¡6I5÷¸´mãñ"~·s›¦7¦lB —úë劾?»|‰ÇX"¾ˆÝéŠ~Ö¥ò S°²Yc@úÊ|GW @Jƒ„|‚ÊY]Y´8£à½3•Ò¢C  Y¼\s“W(>ùcþ½¿ßØt8.pî3)ÛsaázŒƒ"þV Д&°IÖ #ÑÜSnLÁ‘ŒHé¶Àœ“õ> ‚s!Š;¶µ"zú½‰9}Ë¥À¿ÿ.i† —A^ÌNV<0h0_|ˆAAÜ"þ²ÐMG|¬‘êñÁv™,SW¨ 5yw–*oÌkp°£¨ÞãÒÂýpŸmÖü lnì=ljW’Ö»‡ÁóÈt¹8üE~ÕÄ©¾ÜQïtnéß™_=Ñe·iqˬRNÓgpwy=ê<¿O‡ùÉ]…M¡Jf²bºóÆce6Â&>ê9‚%Ê"“ô£¾pZ7‰l)Þe@T~þ›ž‰Ëêr‘FøŠ•e%¯ç“¸3É”˜«ÝŸ@ä ™jˆ$‹JZ8YŠy­?'¸ Î ‰®˜7²T¬z†¤%„ |ذ(ÿ3s;•E³Ç-ôäÅþǾ.V} ÖP4Gãh_6oC)¿–´ùjò U:‘칄Tm7¹vÍÐF³ º¥1'ó¡æM¢÷j„›‡ÊGùÓ Ùc­W»Ù !tÇ/þ$úÊ¢Iãb+õSBhod{7q:7µ½éD‘;Ä›_UÙfJâZ~x$›óqwÙ•BbÑâ¸wßJ‡K¤öŸlÊå_~N™o&ʯÝz¨?îÈ–8_~žb:sT–?}§¿ möʰLúóƒÈþu‡S͸H²û8"åqÞÄÊÜF±[ÄVÛ„ŠÜÜʄܱÅ55y¹4…ùýà0©A_ÈCD‡ rÍ£1E#YËw˵ժõx  Ü>ã oÅ7¸»²ÎvòY¶ÖO]ë¿CóEá€8øøÿ޾‡B>Ú£ZѪ÷Òš^ï¿£rSÒ#@óÿ‰¾ÁðJÙâ•1IÉ’ ™e4Ê9Š`cÓðgÿ}ƒíµR:/ž¼Ê?¼ëÙ¯ê»Ç}R€—R¤ÿ\¸?P˜9§, ‚…©¾°ÍtáåèžWx«9¸Äœ¸QAÈ­øo[¤Ø$•˜ã•ÔâÿÝ#SFí„,ôÎ`¶7$~o=ã—C1¶ƒøh‘PüáþÍÔÒeµ~û“ÉgE4ºOõª¸ÝiÉ£:“½l}`tÌy>»˜Šœ(‚E¨œJÅênÛßõ–hݬÙåZj]‘دWw‹ëd6úäýþËëzÒÇyËêò"µìêOϲÈMÌëˆíi{”yAN»¢—ÎÈ8§,'ä –Äw¯Î˜À^ ¤ëÖƒ14D߯åcPÔSá@>âX¨Z‰Löz»õZ4• /ú¹«Û*ü Yÿûï ÀÓq|ý‚ÜÕác¸µ ³0ô‡à |ÀÏݬTæµáÞÔÎô¶QµzüÁ^›HjxOHNÓXüDZ)¹yñ‹xDÙ\¹f©¹4¶ÏãbJOöhåÈ¢ú—ß´‘zh‹Æ·³Rx¦«LSjç«;ш,<ÍÕΞN“iœ:MKÈØpŸ(:;IFk¢ÜB­œB_k8¹•R)þ¬\’þ ÖWùï]A>Z±˜‰…«oí—\Q鑸b¹¦©&j÷ ½bµxZÛ£PòО  È]ã…{5Š]]ñî4H ³¹- ¬§^<â#L– žjP< §+¢3@ YÏÏ%!Gk·€«!©ì½3´ù&EFušñÚÕÔNäE½àÄ¡8ȃ$ÿP*}¤ÚöXÁ«ø§•¼Ô< =©ƒŒN÷ëîËÄŽ'ª›\Ô€SšÿŠbAí>Õ£+)~ÌnçD ÓΉÞÓ½£òäà}%åX;­c˜ŽÔÀÕ–kÇ»íÇà•+é” …s… ƒÉ;*oÉz¨cô ‚©'‰ÊÝ/ºy2^¼ô"ŽˆW”iY=^œ(ç«Ë«¯O¢Òsëß̼ ]©÷PV ª}·2ßñ”¸¡º?ç'}k”r¾³BÊ4µ@]‹„›lÂøƒÒ 1âˆÃ)æ>Ðû~&ÐÕ’÷gytõJé:{–iZ¼§¯úéI”@ÂÑ­evý÷Jc}Š‹±èˆsíog['Ø=Ù¡{†Ÿ`Ak¼ü?¾4[ÙÃBsàÒþ€ë€¨š˜º>°1Õµ ã6Ãõ`Fü–1XËl@M(©æR5nCêÉÿv›Ä>­ o´”×"?­7NµgIýõµ( ;s•·ºŸÇß»•š»½RzIŒ~B>’Œ–b$Gõ '˧b¡zˆÑ÷QBŸÎž´{ñ{R”Î1½4ÄœUÁ®Hí¯«+žŠP2ÐΓÀñBüçh(ñ2Ê œ³R!L­qRß_Ny>RÄïlæš8Xöa{¡ºéú¾±½Q=ý à‰Tá´`\7—ùÂzò³à‘“oµcGª4¾75|ôØ'l%"Ý{¹UUßv9 ¦„”g*¹ùl#uL×üh=å(¦àë™aFeƧ5{¼–œ¦ëì#ô䦚jǺо3gîec¥ŠìÖ ž Ó<Ö¯·Æ²\PžB°€”;”ÊZÑp‹l(õxP„4Ð~6ÖÁ¾!!„ŒÎÉM7':ÝŒX•B~,ÜvºÑ\ BýÕžØ|˜Bº´3äFýPÅF=SP9q; Ã’DmöJR9+9r¤ªIÞe/ñbÓ^*7QYœ•.|öàÍYìu6M…Zä€/ÇL;”6þ“Êòзö®Ò0L½} s›ÏT +xQíh+^cóãw‚—Í) ûŒCA˜JñF™B©X#Êõ×­ìE>ì3ÿS-ÓÊzäzÅeà‰l#øï04¼ÙMœÚÄ;øVØél÷TL‰È4?t;; •<ž©â‰“ö·#_èr9æ­Ú¶­2]‘Ý4ì˜:íêCêIR ŒO›Þ–¿€-›÷ @Êúáåóôu9{°^pêëEÍäË/Ÿ°§¦a Õ õð¥¤N‹?²ŽÖ‹}œ^™°Ýèjûð 4ô‹Esæe7Ûjä?_&dô*LÐo¼M/H.©-‚ö°ª‡Fe|ÓFf¿MªÒDºm§'†P¾‚ÂÈJL20¿æ$¡ðüË4!µiëþ ÛAŽ!.ÒŠ‰“™ù“…£;ŠÊ‚V]ÓømyÕÍc±XX ðT8} 6X,ÍàðeÌ\·‰ÀÖj»Ïƒzr†°U%¯ú_ û/ÃØ« OÓÞºµŸ¸¹Ø„'?6æØ ÙÁ{øz:—×γˆ OûÀ1Ó%[Áóv‡k'xáu·/dà“ËxŠ ¹•F{Æ;`‡ÝªûAŽÝÌ#˜bIrÐéÅ[3[´e¹ùògWVß—ƒð»Ä [sŒ[Ô4Ð)·§KYû±e«$Ê1œ2">U¿—¢Iü¥Z<·|dIAŸßXfTá³:Ÿ6UÒ®9&•mü²Ô9r­Rløk¶MÑ…öt!p¢g’ÜbW°1íËø8i©Á_= b¯ š<‚É—!àΨ–âVÂÈ\+¬¾…‘ì93ØÜ†Åa}Ÿ /Á*¼êÈÏÃÚyÊÃr;å³~LÉgÁÃ|P®àIVM(ءձÐõL'øì…`øˆCp%ªá°úíé5—1{%i¥Z˜ºý,w obÀ(RzâÀ…ɤ‰Æ²„ªE´+^EÏ{*¢úw2ü%üBDØ?Ê)Ø%‹:It¨ù^BübJN:”EÅjÅ$Ð[”fè-Š%¹ ìMôà–ݯcûÁCà7Ø\•µìM[>tHÏÏm—ìq¦‰2Ìóå_4U<³Dk„4’½Y ä60{¢¾áèÊòW-‚ë3œÓq¤mPR“<®üÍà 80M‘é®Tù†EHˆ?•"…SªÌQQ^N=‰}³ù4Ä"x(ºgýÖÒˆÃXÊó•%·)ÝXö­¡ˆÞš™GÚãc· ‹ŠJNi`ÉdàŽÜý¨à!Qb•$ ôkga'¶Ùôè­Ø lÛ´€®Ã ‰|mÚ€Åvþ-h•™Ü´M¶‹Ü,$†ÂˆÞ„ë0ãi²Ú„Goê_UD3^ž^9"ö”‘嫚³D¦†?j×3Ê6Ñ¢jËN¹Ä]8 Yòn0³¯^ ùæÅœeJÔÞkD<°yâÔ“!Ýfw.¸°uîÚÆŒ°)Ú8ä†G×=´Š {^Í(ýÕºo”a€Úö9.ß\}aÝæ‘¶HV¡-ÙBP¬ìøŒ–Š_õÏÚó¯âÈÒU•ꤨñ™¬…Í+×ϤðĬ„¾›ôÀXß2f–™–%õñCªÔN„‘0ÈýíW‹¥¦´¼çÛX^¿`·œ-”ó×jú h m~VCFÒ±±“?©ê7»U‰(ì‰2Èá_П'Eô ZCö¥÷Ï£J#_Æeca©Ë+ÌEŸ||¢γ7ÓùArÌš©I+3z±ÀX‰Êäü…ãET§¿Å ‘F^;È岈‹1éÃGŠ-“ðHQÀg ,7/{p‰ÈÉå㚊y“Ãi.ŽL®Ï%®µOƒ^Älþ¦=üÀ„BwƒœþF©;»‘¾Å­œàèIùO¿“í9oÐ"cí3öˆÎGyX[³Kæõã3ÒUW*ô˜¨éHÏ„ãØàúéþ0ÿÌ àI€|÷-Á½¤8fâ6-U1HˆZa&·IÓ´@…¬èÖ·›BF†·àç«&}ÕsºFÓø¾âÕOœŒ›Àâ±CtžwÙìûÛ¤=Piþ™÷óï¡TXu“!"¶Íæ‰Èdå7âîÒÖéñ¨„êWe–Cf{1;С‹h$ÝZÜAW"C{S7Š_QªîLf› ôù킨ú Ö)°Íçždç/\ŽNñ d•‘‹(ô˜îJ¹ÿFªû/L„Å50’ß9°¯ÚºY.XdÓÁ”ŸR/ݧŒÇúgë6Ál.÷[ì@ N49Gú å¯Ô‡¨rù‡7™R‰Ñ¥¯ã¦y¦Ù¶ãÞgéÏ©ª!%”hï[íVBˆš›x_cêh$¸sñ×Lk¨g…aôæ¶´5¡uÎHw™ÃKNÙ¢Ôæmû0’µâ!îŽáåYû·-êþSUOUëèLN½ÍïSŠØwYfÛhÉ=é›mÙE5ƒE„ xëX@ìý‹®`Øý 8ÈToræ ÓØ*‚·®pR˜úÚêákpÒD5fRIErÄH‰Ô—øÜSç}[å þDÁ øžYtó>@…¸*Î:œ~•Qç÷W" Á]z3L36þ°Àìï{ÜzìΦHúªÌ®ú޵3£ºOäεS¹óƒ(¢VÍLuøÅeèq±š÷x0 9ˆÃTs°n‹“50³kÐ&ľ¹ºUÝ/—Ë9g˜8ÇŒ$%Î4–ìð{øí?ª²›Œ{1Fj„æþüWdiLàÖÓ,.ÐH·t·ä`°’ç=;éS44m1þÂÄÌ*i\§S[Êá Êý1zaÅ¢¤ [Ï,è[8 ÂŠf ,xÉ7Ñ%«3ã© m=¸2ÁªÄaÉ=š ('q{èÒõÈ–íNzÍ5è¤ ž5¨]›l À ¾Äp‹K¡~æÙ͹Eô q_,®¾è(µôýÇöJÊdÏqN`MZ<;Öü¯´ÊZllší•Ó9ózSç€Ç3ºteH§ÏðjÑtL£†[Šè¾hJ|Gîá¡Y\Ÿô*.¨R`9öÞ¡R+Æ8([$‘zÙÅϾàÁ¡|·¬ëX8‡¡ö3vgwžÇˆ§54Es}–ŠtFetMä€FÈýT"ÌŸÝHâ.¤[ÔWÜByï-Ê?Þ¡ËI>u**bAT#üÚD¼x±èŠ’Ôü£ÓUÄ;€“°¬²< ÍÜJ©”1úÕg(;…ŒÛÈBb.¬õÑok0’ÐW1sZŠ$Ø/‘]^:Ó.ןXߎa•ëfMr'ѱx6¦ÒlåД†#~·©Õ@ ݇šJgp –P„˜¶°>Œ52 ®^Īd–¨‚ô"Wµg;„¡Æg:-àŸ´ÏŒ°ëŸRW&ŽQ]Ç{yÂN׊yþh®%ÑùÖ¶<ÖjÛâà|®m ì¿oPžžk®+,hžD*ƒÞÍèQH•I…ýW\4õtæ¡7ëOü1=ƒ †…QËîé¢F+X¤§—H—KÈoHEu&÷0y¼#ò``¾‡ÔXPµûÜowíi… ›ïþ |ÞŽ¬é^Q®*ÖÍ#(K‚]Ì: ‘ ’À †¿í Sg9†3E™Éq„A·$>ë¶§y:BdÇat"¸‚p2À¯ L—éxwr+‡•ü”•VQÁk½´lÇ2<Ó1n0­ø¼iòR>0þ\¶R ž7˜iÏÓ;2CÝtäY^=]YÙ]k™™¤éX ßæÂ`´ä>¹’ÐÈë>£VCqáXж lÝÏŸ¢m²g“‘í¸|SÎ{Íø¶b-1DÒê³a¬Ÿˆ=š{ ædÉÔŠB­Ö:$'øáÔJNŸoÿf-:iª@bkÉ XÒüL‰·ºƒ€«ÕO•„Ÿü”Û¯µÔaÙ»ì^ .íH)ù6ãa%ä÷÷@o ¹€}QõeؤÎ꣄‰Ï£Eæ8½eä¯jlõxP,rÐÅ<í18"ÖWUÎæì7ï²þÎÓø‰…óg‰9ÅDÈw&Ôy¦StRÂ'¼³xTËOù ÒJìË@÷¯w[ªµè0P;€c§p‘>ÃhÐö#Ù=ÐnŸ±íðÄ@[ZÌl`ŸÆðdªvJÛYHNÈϺú˜ÂþZ«%E‹<©…1 ÅÊlòÕ¸X€´ï†gvO•^}Pne× ’€öF¸¸Pð6ç`ž[baž¦VÀß=5lÝQ ‘Ó¿¬>ë„>úÛpcz[{ojÚ8é*ú{ïXmá+lù­ZÁ2(¥ $÷ö´Ä§=ýVlÉÍñCÚ–~ÁP¿ ÝMΟ$f@ImR¾Z‚׆´mÚI£ ¬V¹A4l–’‰f¾w¦‡¥ÌjŽo=gasâ}6:ôI*½t¿Z‡…¶†AEO8}?:æžÐ3|ó$8(Ð6hd£²ÞµµiÜÕºtkn¹ä¡šMéqõÐ’/<ylƒ_Å‚×hQ»)\ögþEmÙÕÛ*“ñ-(±S ¶ëã=6ªšj¤WOwáu‘/¸IyS°•wÄŸ:i…“ß@$s ß}é²7ï 7ªÕrÆQ|»¸?Iä ƒâÖÀ¶JØù%B£Ùå†yªµ)äÞ ¦!ÔI7±1}Æžc«3âVwH°£+N\ƒðž>dRÇW˜×`ÌåC"âí¥ÚÛg5÷ÎßyöÂ|ómô¶í P_ÞÿPî[¡XyTžÖ«ááF-P¾²WlnŠ·j¬ Ï vþöÌLG¼_%aº†òÛlÖ],í•ÿ7dþ(µ ÖÌNðPdõ›¼Ž…cžß—<ÂßR'.mE/¥÷òè'¹¦ ËT?rŸ(¤3A¢|7ðSJ*´¢+@@Eœ¯ªÔ ¸µ±à?Õq_–ÚÀu Z±úY0Õ ¢XøG¬ô¿i%©''ÄfÿoûÉ´N½Qæ®æ«>7‚XiãÆÓ›TZ.\YY6Q'V]1>M}¢Gíî8ìzŽ€æãüàËè3§Eã1ˆ ­iPŒ ž_ÝCÙÇøOÍ⪥mÀp¬_ # Õ§ÕÁ53KIJfƒ‰›­»/Ü}%T Ó½\y .$\ÙgŽWÆ•Tú“ϯü»sŸfËP‚Æ^uÐÆx«ãÕVY1J1ø$*¯%î&„þ¦ðvÀiH\x}ÛCj¶ÊŠè ó{!mjnüÓvšœí9x‚svQ­o^Ã…SÚJnA#.í-„L„Xù`6=·ôÍIùÓPJ™ôK4átøï³y¢c#ÉÁ0ÕÁD²°Â•ä|/ˆØî0<Ø&‰R¯ùíD侱ʎ>3eÄqÖµ@ÊV+Þ\»·gšw×ßðÙìñ¡SeT+Ê\zónr¼¥ðѧF]ü6c̨„kSe¢=ˆa¾% vŽŸ4–pžÇ=‘J üuñk®Òúw2v&RogO ͺ¦Z3Ë%ºçá‹•€lñ ¦ÁCgâ áD àx³)—ª}-ì/«Ô`¿Aì²lJãf^žX,üÍ-3÷šý°Æ`ªÒÉxÍ·´ÜÚ«*â¿ët׬¿zÈøÙEXR‡Fg>UB¸Ò'©MUJ²HÊIÎOÃ[Kê2äOÚ Œ§dIžò-‚à¦ÕÊôð!¾Ô`*7ž ž;ížOò³…®A9ë ëË7Î"uŠôp-·ò‡Ñ–Qš5­/ÁYÃr¤¿ØÒð«ÉQR¦úuÑtâûÀºîy,_Ò•ýqj{ʤK¤øé¯Á©ÞK W‚ IÚ›%í/ü^ÈØù{­Òé7µŒ_ôó’zûoìY¹ÐW µ}ÁXˆio ) lçq¿—jÛf·³ù z1Þêãå¤Ô] ;Ë]ÅÌY ÙŠË¥3÷Ó&ïçuEÉó&w=áõàEmüF²í–ÐeñÖëÙgôÀ·œms<Û5s}”-Ê%€~þS2Y2!§Z2Y5ûÃ7ÉÞ°‚ Ö¤âŠp`‹¶·x0mVùÏÉ×4ÒÔ³4?©§&¦Xf˜-1Ì!ÿ]3¹#Çú‘„ž=!ˆ©äz‚hP1¯4©}|ÕçD ™­æº[z×Ô&39Ÿ ¡feèÀ6uN¸R½w¬:ÑÁ ¡Yù0‘WüfŒÄ׈ŠäW‹(¿s˜Žš‘š”Ðö;Ö:>áfvÎcÌ2‘Ö _7#¢k€WL®ÏŒÉX _ï„@ê:Ь¶Á•ÊÊÓ¼PÊômÔ¬màÓb’}ˆ•W@ÿ× ËOÔz®¬Ï³R˜5.Õ41mv'b27‚¡ù áþùñú•úÁŸãÅh—'+JÎWwŸ¯-[]_+°ŠFÖæå²Šé%*™½7Û;ð)U–‘NiõÄÌÝ“øIâAwä¼¹²š‰µƒv%æ[Û$náü•ˆÒ•š_룸V­ß;— ¾¨®™çÆ’Y¹Œ³2 ¿É…êƒç.ÎÐ]–otN\ai#pSÿª]Ç ÙÀè^«Ÿø8.øÜÓùóˆF»ì ˜áAŒúüœwÃã0ί­½Ì¿†QÂñ ßï D@Û.ï_Äë2ÞZq˜ÆvÛÖWÅýâ€Rx¼ÿÕÁר‚´Ö»|œOæRë8\D8Åô¦†Y.D¨üˆ×§Ž˜u^4Í]– -WûÕÈ©hy> {é@—‚ÿXüAƒ+æT¯¯¨™ººNÒ§-§ëƒ2À†ÿ&qƒ“œ¥§úw‰{S¬ÕQÜÇpž‰øÆ-Õ*AƒUðûiê/¥kfì¸ô>šÖ°ŽÝQü8•Sˆ’¸~?(©r-¸AÉ-ï5«ÐÞíµ&HFÙzÛ±^ŽÃˆudR²>¤8³Ñoæô‡1£Ãµ%µÖÙfóµzÊ6 '¶{ Œžåe½fG¸á26®ùL!{¶-í·ÅMTY€¨ÿÈ)H¸UÏ¥ýT{é=¯Z2ˆÇizYSI~ËN›ÌÉ;Ïtƒ$ãé¨2œR¡®b9£¬¹N:mÙ‹îÙ=R¡Ëßž¾u¢ kªAØáÉ2pÀh9ø2ø”^ޏUªvñšaå.ô#qú¸Eblžä§Ì¤¹w–rw7/;ñ8~ø[[ÃQ-5îD /'ö„ÊØ§ÓÛÛ”¸õ o\ÆÑƣÖQ}+ËÐù{,É? /ø¬Z†nòm¬¼½‰£ð- Á2`öç l$?ÁËLP·všúÆ?í½;îå¥ÕJ3õWÞ/Á6]Gp~ŽÿøŸu?'¸zÕ7YúV)›ÿþ"ûÓžACÖDÊÒJÊÃBÏÍLߤÊ7¸8½9?ÍâºÆ,„ô¿ ±É¤A†^:4šéR¯èù©¥P….×ÊÎ1F¸†Ît¿ÉKÆ!~¿— ÏlQ¿ïp¯ ïgÌ—H¢æÖª‹Cš®˜Ÿ“2AÔ háb—²öýGÆ{ŸøHvëG.F‹µÀÚùé¡÷ÿ)ö*ݶÁ(­©Î›¥¶9pýšËŽ€_8o£Ùþ«Â¦YlÎy\ýŠ:S­ü)Ïèṡ.ëÞ¤Ä þãÄçu [¸“xú§3ÉKéç.ßHŒ! N¾ó_â³êG“_Í!«•ú½½QÝpÇÆH™ í6 ¬¨ñ¿4¥Æ™ÔQY:¡±Š2³qòÅÿ²³fdË‘ûÿ!±±‰¼_N-Î|Ò¾pö>j²érÒvÛÜù Täýç{ç?.ä!Óî¦rC?·¸æ´÷Ä!é L*çÜÿñ6pZ¥ÿ-<é¤F§éþ][ëyçÞ´g£«i†©Cµmµ 悤HÓUæšÙ¤jå!ŠòU­Ã¸[ÞÜãë u\ïÔüä¡)eý÷õ‘D¼¼–)t£o¼ëòëõûC ¾¨Cs1lþóaüáÁqú!ô²#¢3QGĆ\D$\IûÁw™ê«L$ŒfhE)9¹ì³Úè¸c,¹¢ÑmûIVÖVý¶?jS‚ô¼cÔÎØÃÁ$ڥϻº¢Ñ(ÅiñŽï'†Í .ƒ(»óoÒª(ŸI^²Ë›Hß÷ Ï‘ÚbóŒ\íçmð9ÎWÐ…gM‘ùQC÷©ùäãÊjUåãÌÍ_g‰?Û­½~g);Ýçýmjpg±bsëìjX7j¡†8þ=¹UÒ’¹8Yµ9·ÑeqiÁÝÄ×½-I>h®Å†‡ ܂{³ò¢Ž¡6;y~f³zß"Urû§ª¼M‚sfå÷» `Âh÷ÛðÛÞôog²Ư²}¥-|Ùò®§eÃ>UàªH†ƒwÿ°›Š§®d"VRn†·¡ŒWúËüüŒÍ¦wOÕ2ÉyUÈÜrQ®mw/ níjQWòGº1'טÅRÅ©•HBýoãÙ\¾ùdcçYz~Ûbd2 ¶±iT\u¥ä¾PÐ.1:8 ½ŒMÉ{ ÞyŸ0ÒI7äȨ3@Wtoõ* ¡ØZ¬FÜNfÅé¾¼_j“ÙèÛþô‰Z+®½}ÕY l’ÖYå†É„*±‹ÜL6õpÐj¶éÀeøñƒ0ro@V@êS>3kš>[‹çû4ä,’´âmé«N W:§èkÀ“˜òçOst-µÆ¬z¿!g%´k_ˆFeü"UJ7ör³Q¢nÞF±!,Š _¾‡Hÿþzd ^[ˆO"—‡h…ð8­_“$ #Ö‡ y²óÖþ²ë–ÛhFø¦["øƒé_YÕèséŒÞ0a©L—µc#šû]•œ¨yK ¨¹››é Ç¡ž èp¸ÔuÚf,5¬ZîZö¸5N…£Ý6I<)faH_<Ê ÄêǘÈÓwÞÓçmfdÉ×e3£¿ÎHgLÚË+L*œ\DÊ ^†§½¥pOÄ#œEïÔP‘å(娥¥› ÇïÜ?u. ÒŸ_^z,G›³á¨z ©t` óŠŒæŸ+pù^ìÔ3Ó&µ‹/% •*dœ‰I 1¡ÙÛû^ EäL?v¡ž(­Ö÷šåÅÎa‰–Y:Ö%eÚ%Å ;GÏÏGŸLü²·j–"0ÛÔª3§2<¨Ð2’SÛØf60ÆÝ·‘—¹<ùWéŠÂP™=ÂÉ©¹Îâ{ºR#Õ)m3(ÝÌæZ‹þ‡&BI®Ï¿’V­eà*\£Àdý ‡©ëjä±Qªbºf½…¶ÊÞÐ-lÚjî)ôS¥M‘Só6Oj>‰©¾Aìž?ŸFݵUàÇÝF±—öo/‹;CJؼ½;:K×¢-}Yb³—6IfkÐ1ZŽm4^wÜWÔj‡ò‹gK¡8Î5½J"Q£†²P}/G/ï+Ïá<H}ÛK¡tÉ“HÏÏÄÖo(‘ëôî. §¡­YÐk³¡tùŽì$ Ì};Ÿ%¶3ù"£Nƒo*eˆv¬Ÿ½_m²¥…kר¬Š3‹¸ƒ Úâ"!bNá9ÕÊà—Ás3¼„òÁ!Œ&õÄp5÷à ì ÖÔZ{§o‡x?‚óhźµ˜GJCÖåä¾ÌUÜŒ‚eÓïuÙSyWõíØ£‘ˆê;b«FËûžÃ,ÛÂT9Ÿ¢µ²±’s©OÉé(IýÀíë­í”6ûŽ›(u#2ʱ”ɼéh0Ù†KׂXÂÏ‹«Ç¹ìÕª³8Ì;n_«[Ší4YÎŒX}“¥'ëF“|Ã8O]µ”WŸ³¨–ÒÉ'#»ü˜Ò¾¬ÉŽ4N8“†ÀlÿÕ‰ÞoWŒ7fÍ:f‡[îôQšìÉ>SŒö‡‹àR¤Íd€26 ÚP°Í<úºßåê'úèŸê¿!áüòkÑù0½H~Rrîš=<”VX¼þ‚ü­(H)¦q±Ù` ÷¼ÛmC¬ðY¨‚a¿Õ&üw‡µ÷~ë!‘é^9ã±ÙîQ> Òß ;$PFnB{ ÷[`‘ÕCiÛ¡°çÞhu‰¥‚w¡ºÕÑàäo9„úÿ—Gr¯F# ãûÑÚuørâ‡J.ç7ó<³¶/<óSú_P‰>öMúdXn‡\›^ÉõÞwý. Œ^”x˜…ÕÝñIj_j'®?u@¦ßÃ?šãè@Šp{/@¹B짺Í(ÆÀ•XêGn¯+|:¦º èl'ŽF éýÅ` ËßEõrio“{Y)ð‘áŽÎú#5k«°,'p…g‘­‰ÂVÿä‚&‰ýWÆþ7ˆëÒrÚ›auÚFÚ£lÆÒ¯#hŸ îvkÉÇav‡2NÌçÖ¿:¡ïÌvÝhÏÇ{_ »aâT8Wð³_“^vˆZŽþ÷¢v2øú™0ðe“i=ì.“SdgÍ?,†eO÷d]Ö¼ª0¬Š4Çëî ±®¦¦J™0Ìœ¢,é”§zxÊ5ŽÜ¸Pꤽ¿ðWž~=7R >­ÚkùÑ_rX¡Ï·nPÏ4·ÇÄIóµ/¦•YÙåÁ!üfˆN›wHš¬æb¢4Éšº>«šÿ…[ÊJö‚<ØÜé^íiàO2ê¶­7øt”}+ŸY †ÍvçµÖCcž¸tœ¬•‚½ýT.3â]µR;(Œr½L´¬ÚS]õèÇYVú°_°b)ðRíO°N(ÿzÿûsƒâ\ÃóU ï5uýÊ­«ªêÒKØ8æÇІåAµëšáx@ X?öÞ_;+ˆ„V/GBWÂýç䇑YEZ‚m4 ¸ºX÷â£^7/ÞÊFØ”VÁT+Óó%}g®‡Æîâ–Î@ý-ªiE£‡øp9J—´üÀ ìØq6ÔúÅ+ú6ßi9¢p®ä?gç¯õC EÎz y »^Û·uJàæMŒ(ò¢šcÐäã©‹#kÿìJßbø't§¥âý±Ëþô’´é¾ M¸ÓfÛÈׂʱ³‚%myå>‹‚•ÃRòÄÏ Êµ· \ciÔ3?9›ñÈЈòᘗÃ$Óïíô•Yö ½;JØz Ä!Yõ˜J.þ†™ˆQØXòùìBÇÙÎKâ g`F©¡™Ê@(¥ž÷ „sJ)ã6õ“}‰¨`Ž™ ×És’ll¶iÕá¼4ç΢íð3R”ãÂñèvZmÜÿnOt$.Àn&.0uFÆoü>µ’)¡´ž-«JýÃx2 C›³§Ä¯xùe•‘¯sq_ú¤>ótP ÓÇ„‡¦”–‘N–ttŠnÂðÁÆÞoDƒk ULÛ92aÓ R$Ÿ×‚D‰†IÆü¡¶¾Ç¶Å\–0šE dõ4ö·7 Œ"öÙ!äš•(eóoW¢^ÑÓ¥G{å˜t{fÖ ›lhÔû£ë'Ì GNVkrx"i×k{(ÆCyû8|V¿}½„5®”Ù×̧Äv@l÷gPÊñQ9LÅ' üæ½b®›Þ&ŒèdÆá3PÎrÏ$­É…&©çí"Ë?\ÁЩ˜^õÓ§J6‡h` ê‚·UW£ë¡Si9 1uÞÀO®hZ@™þ érÑæ- _¹ }F‰ŽVXÖþCyP‘f+ªëºxÁÏŒ'Q+tW(¸˜ø§ U“$óÜËEçŽ4|À|>ñ¡ ™œµŸOx´®¯lrMù~˜3“—Bü¡w–Sƒ™Ñäié`¬±†t–ŸêçyRØ=Šõ‰8îÍÑ-áÍýåŽðÉ*\ÒÈ7GutD;ø}™kt¬Ü¶|Ÿƃ5ÄþEgIQyA/â×iûçˆñ,¥/ܿ۾ÊPÚv°¡åü2XOstâ᯷2óNÈáOL‰ïXÅeù]0a×Ìö~»8ƒ>®´2VnÉ¿ãÎ…~ç^ü@>ʰ?(p2ŠÂš±®ø¨¨CJ»¯ p‡ZsÅó‡GfYô²•EåôíÍã‚‹›üþã¶Sp±¶±¶1L浪¬,¼b­ÝòOò⹎Qæ´’ÐbåÄÂB ´s#tšÕÕL L#ŒÄ)ïÑ âô´­!·zb@ù$5ô¿‚"XÉ;geVNN”z·‚.rÄ[Dt;3 "¾ò€"(‹ä!MX§ÉDôƒK‡Kº²Ë  (~è_®b¬füQ…`ÞnñJH%Ê4¢éÿî\ †¤eÀþ/‚š¯qk4ÉÌ—÷—Õ·=Üøuw,7ÀÞBÚÿƒÉ©üRrB†3Û^c4½ áÖOˆmÿɉñù Äϱ‹™¯·gK¨Å–Ê9ÏAN½“B>¿ð§åÿuOK9óï'8®÷~éü¯@5úƒ ¥—BcnÖ@Jû©éQzjÎä×GÕgÿì¿EâýÂÇA*$+ô|I­GE&GEü‹ëŽ÷[(ýýú\Q5Ô_?Ò5¹˜¥Â)g¨Æ«'¦¥‚)µÚÎ=>]´/Pwe;{û…#)Éšk‹›ËÙÚSo¨ö¢$í£ZZÅtÉ}9Õê›{ºÝöBèä…Ç%]jp¶ 7_¤n"_vÇ´|rjésKª ëó™3*nÆ^[à^sK-t*Ø;)œ/cë åñ‡£$(èue7î>TO[YéŸu´â¤üènú ܳ+m«]8@q=8útæX'y8‘“åûêýù.°*µ ÎOôÛy²uÍôèsʰ Gµ“Ó7=²/n‘7B1ï±ã»fÅ‹ð¢×­+ébmþE©„5Kôâ4ÁøÙ¸ÑÁ‡\VI4*&ZnE/úd0·³ÿ‚q®âèòÛXåØó{T縆þüñxXÝ |¤/ÕØ¥•†iŒ¦E£{¬si,X•Bf†?{‹6Bè×ôèö/²éC ‹ Àag²ÐÑ*¸ÚÀ*Þ«Ó&>/a Š›\&”wç®ãHƒòö|h-¸¾(Y_àýdG³L3‚hr˜]FàN¼G4Ù„ûS#){ƒÂð[O€,­nñ¯cù/@Ü’4£ö…)oDÿÜgòì0~¡»¼‹òüò¥Ý6Á1!niØÖŸ‡8*œ¿@Ž/£î:;ß²›ÁcŒÆ»›ïÅ’ŸS’+¿Al ¡vàüù]3Ï÷r&:ù"ÿ£”Z5쌌ªôT,ô$lu”5…”ŒM¡4Ì-„Ý¥‚ íù‰š/£’(Wšš¼À42ØhØ2t²27ªAöö^U¢EMMXXª23ØW·)Ž´ÑÕŒkF)Ý=ÚÑ )q*JÉ+æÃR&óÖ¿æ .u\0î®™ƒŠÿÖê··UA‘žó²)&6$—BqËâ)«>Ǩº‘Ûƒ¹ó æÐÌõMj6Iâ–7+¹•såô¡±¹þVµJOænp‹øƒ%ƒúBnÔoŠ*w%o¤ìÅÚD@ªz¸ÕBþÛmé³üÆ3Åßô…:¨˜lÕâæF½Jl‹ç‰=µ‹ÿ‘žfÊ0½wéO,£‹FuûKBMNt"Ò¬[D¤_žÑ ÔwÏìøF!K«ž02Á¿}sÂôÿ°ö–ueI»ð9¸CpKw'X<¸»»»k‚»4¸;Áà Hpww¿‡L÷L÷ôô;ïwï÷í½¤ì©ZUµ¢BØ$ÑPjè&ÅëájM|’™"Uƒ\Ò¦4ØM©äOh_j‰L{04Ù`ÿB‚ŠHy{é6‚T›r?Ï8!Ød̼çyFÉ_ ófº]µNÔøTdŽÇkä­õýiØìIsd¿Œœ;’…¥šÆuN†ýÜ*_Yê:A茉wèG¯&áò:–}ª,,‚UËÔúúl.F?Y®ýo†”Óo<‘õS_Ziæ•÷¨J~¾—veØ®ÚëëPÊî.¶“:ˆ'æ31êvb@'Áùç™?*Ü~¶Gw¦õìû±-Ud×%—•êÿómúôƛԥÊß´jhæ¡?Uh;c9b9cm—¤Ùw½º‘ŸÖz02nUk¡—GÝ¿hÊþ‰™Ñ~ mt79ñËÅ|ù%í/lîÆˆ*åV ÷XòÎv¬E#‰=-·¬µ«l™Ñ‘ìÉÈQF>ç„,Èsȵ÷YË7œ–c¸ácÔ´‡‚PÓÓ6'/dG±©q¨‚Úlkû¹ [MJ¬ˆ.n?° »”Ĭ‘sÒg¿¡¸ä¼†LÔxIÚp 6=i*–‘sì¿¢ˆð(áë”1Ó¾áˆÚ?‡u£é&Ö¯*–Åk†Eòb.Z^¶-!âˆ'p´ØWÕ}AÚÚHÆ“Û zwuå?ñïK“k‘ʧW6I«m»ßûkÍmR+ýȼÍÞn0«—%ÝfÈ~W©¹Dm[.Ž]% 1ÏÕ<8‹ ÍaFV³RTáèí ëÜ·ÜÝ¡ü“_#}{ÒO¤=h'{Œ»8XÂ@Mv0Á}+Ô>ZHzek“¡´_p¤íL•¤-^èÚ‹‚Døèaè1wðeùOöiÐ8x»ºã¯çÎb¸=\2Ä oDÅ:$ì ‰)ŽÛEƳï>"³ÜBLü¡«Ns?«b¾Ó„2^®!)Ñ Ú^±,ïƒø$@Bj‚UØ-m(Ô.ÚÀäI\5_DMV+qàxžù‹a_§`8ÑîÛõUcÿd$Û4CµÖ;2ùsä< Ù`¹Æ¬/60æ žºˆ‹§»Ý;8Pzµ½šïÕ—w2á~~¯õS•ç—²!¯U©¶ô*e‡>Ë}T²†FI8©FÚ‘¤{×¾j}]׫dm‰¯9Éîb6ÍkBrzõà22Í«×c8ò£!i”#Ef¥†q„´lD5ËU¶ÉÀõ¦ #ëk72âÏsÎl‚w ."ìDrÂÇÎ>êP¢½ë ¦ÆôîôíaWû{Qê2““VQnïÒ‘´ M»_"ˆç¢l9U“|íL aZBlxϨϟÃBÏÉC"”bÑ/[ gbP)C‰/nGb7ˆ¹îG‡&Ó£ª·« ÐPM6Ú:F΂;‘À™á¿¹™¢€šfY¼Â¶•ürQÅ8›üÇý:OPZ¸9ÒÝ.Ç©(_¯lª{zè†Ó#Ÿ*$êtÓ(S‰sâ éO#/ÄöÊpï©¶)+æõP4k—{Öó(³ÅyÞsv„ÈΧð­ Æ'NE=Šö[ù® ˆèÔÎÏ}ÄÅO£[ð閪¦Ú©õŸEº,%9–Êo+st3™¢^ÌÏ|ô*Š:.ú²M3N0èS›ædMUÞ½š?‡/X+N. eRÉÍýy…¨·H¬ÓÐrïÕb«/“EÎ ¶* ¾XêªYæDÖxsó€ø|Žœ× R}É"àìWv_›ÓØoµoÊçŠtO¿RFÑWF9õ`I`ÏÏWx~Uƒ>ÝNÃPäPÉ"+´O*„u`Ã¥;žÙM­˜ÍõS”ñ=î§£Ö;òÆ—äK2Òj˜)¹ÔDü§¢_?"`y˜úkei‚¢¤†]ðeE 8+¬8ƒ±ü²©psÒ¯7wÛͯüÔÑ]o‚Øw¥ršÃ•¶Kìœ|ü`Ñ„é?ÊåÄ\[m¹ÿªBŠ^¡!ÚUïa€5gÐGŠéXSÉŸa6Åâ¼a‘{ÏÌ‹v'ÀWø<ßhÈщwê‘Á2tRÑi "lÊü*²xUËìgøxw²Þ'®]L|Q¿è2…s‰ˆ-7‰„ÏnÖ̬fÛ­"l4NñJødÞ"Méù.楖½­¹ýÞ6Ïè^n±XidZL¼Ç'DWYŠ ¯A妹Ÿfê~Èjɬ`DŒ50y§óý÷†m™…GYòøp:‘mt”ÇGZ,¥ÛÝ837‘‚@¡"É,Ù0}Ü_(ÁTÏý­ïÅÍ€c»â?ëæðÉÎë¹ NP% dšF Œ£oU–g^þ5ÝÛxÖtô¡Í‹¥Òdõ™‰îi!ɆUôD]±¶ûuö3]®Ä%°… -“ [&O–_ýô“c–57uõGmÈL±x†°CE»?¡öáÞ=:=´èl3/ûqoÊ•çp“3&ë›ZÇ^Æ ì¦˜=ø{òr©éIX´õ¾FévœÞÖéÓêãÆ'ÔÉÁþ9UMÄѯ`éÊÛº…Ó¢¦Š+gNw*_fh‘©¥±Õíjeõ%ïÐÊAùi‹À[i¯í| /ñÜW8ì ›:Ó0d.X1nÃcx\þëÂs­*éÊ©›ù‚õ¾?.ªºëµì©ºú*}êHG{‹Ç:É•Øìì4ÔÃÞ} Se”´ü#(:)Fû>ÀŒ(‡…iI<ÐÞÜ?ø$åÅ@ÂuQÎZæ×aÄû}. €‡'Sá FòGÏ™ÛV[_;fIT“*à¢Ïá}kN‚³¤@S©æ8s;JSG oV©:u!þl«óèÑ¢fÔmzÎÕõ¨ 3¹º|×ö×ácœDßéoËU™~yÓ0ÒÉ´›ˆEÖ’‚ñBEH•‘ 3PyB0óo›iv ¤Í[–{™± Èc™Â˜ˆÇ:òZö“C¹ïm½x"Ň¡:i_ÉJ{²;1ÎHv.ÒÙ²ôëñȵàvRú¢Šã+Q@_ò¥¾ìo³”é»fP¸ãs³e3ÎÜÁ/ɃnT-ˆ&êlÍ¿ï¶Bš7³¢‹eÔäcæ DÜû€&¨‡È…õ.URü /Qá}î9u)ö›.ÖöùŸ”ƒhÖãâªj E£¢…וséh<™©õ*Ü 'î}  ¥å·3¬~&:J×.lHm*H!©Ô¦ŠìÔÔÆF‘ÑYm‡éÒUO¾Ý¯#Èf5¹  `6ª©½tOÏ£JÄJœ/ó~BQ‘9ÅÈ9N[(öz†Q›Ãg¾)¢è‡•@ù»UH¼†¡“…†Y|#YI é@ ³–O+vÛÍ›Ks¶¶Õ®lá¿Y ×®ÙM¿Æï›H¼1‹/ñãdSÞ™JÑÍÌî¬ÀMbrÏ ÷otíâ… "E €Ú0¶ßïUÕDAÀqmÓcö Z–iÛ¸ôáI^kU»ÛÛŸœéR`6Û)Õ ”L óv¾r< ¾á–T Écûf½,¯¤ßte‹`Ø‚¹Ä?¿`Öx_G8eAF´Ìœ^¦–ß‚ƒ½¨stêß5ööà µ½ÂsáuÊ+½î‡/Ëd “%¹,´jµ8»ºÇHÍ4ÇpµÝƒ„cgß2ë)Æ€/Ý|Ž>$±zïײÅ:BE N"}\rÙq+¶Õ{´'¬j˜¾‰sJåÍ÷e¥ëð†Ô¸eKj |îó¨¸ðܹÆ{TÛÖó”ÿÓÉ®e}¡—XüK”£… £8ùÌ6˜c^h`;Ì\jtŠ8‘Ïì×FHöK™Sbw±¸Æ—¢b|/%³£#·ÏÕeveo·Žê´uB¨¦x®0éS`y?(°{[È¥mÜ”ñ«(BíÙö׋ef¤ÄÙçX¿‰ QØæJ§²³–£— %sã>MV}H¥Ïë«ó^ÊËÙq:ÖñÔ’º2Co©ÿÚZ (¶QVRȆ²‹Ÿ—÷F),9|JZ¸‡ á„ÐùÀÂä„fYøµ_]hbMòa[tÍi/Æ[ÏíPôSv+ïfêXG )MQÔ6²Ö;^w ï«Ô[x,ñƒÐF¦[~)}w´{õ“Õ±£‚ ¼)éšÏ.ûç”×Ç“mŸÊ5p‰BGX\ˆl»sàò­4®ÅçõºO¦õïÏa¿@¥³I]Õn9ÿ* £ŒG£zú½4X2ÃüÐO˜EΦÒxH¤ms}þÂfkãØ|¤Ž±ü\ wÐ1#þ“ZiB…$*ìÕYV>)ÅCâ_KØ G.;Y䊜‘`AÜL¾„qûÃÀ‘ipª¢Ú y2Ó})˱ˆXËe{ÇÉV+ôÓ EÇ)|ÁO,+#ö"JÊËv³]V–x{4t b¤á`Ȍڊ‰¯¼H~í¹dh“ºîäâNê\æºÈ”tìUèSâÖº¥?œBŠr?ª4¥æQí¦hIÅ -æöuM|0®WOçÖ7èÖ}·J½ÊÃÇŽfH1Õêü¬s*ö3íÿ,ŠóÚ¥Lã¯ÐŸ¥¨[Ù$gʹûN*šÙm솇¢Úv&§§€ÖŽ@ư¡ô¡š‰Y yÇ©oöÛªPjæ"þð3©HXü?Éxq™¿wC|wŽ.é ocÍ$rÃLü’F.'Šq ɱ_„’–Ó:5 cX‚·Ì•ð¥cfÅ0³‰ РyŸïkjýGBm"M_žFúJ×#A¾þ|ŸqAíçýE[_w²žé»¼Ë7”ïçüÝ•¦ ö¢ÂJ«ÔúÇ9m3 ´™Ö#†æbÄ^E`ô|[“•¾GÄvX¼žx_ÓØ}ËYýªþð0•°~’_ ´>LÑ0¶Hy;[Êsèw@ o¯nºs— "Iñ“«}D#<Ê¥®ápÀ¾h>ž´ëÈ£CFl»§ mÌÿPàι¸€(PU*Nã´ÑÁ–bé Ô¿‹ï<ôÙ:69Gg“7¯|œ§HÿîrÚQâš·{ •Ù§Kõi]bR¸‰¿æÁ1ÆÔP’¨¸XÉñ¶xïkèÝcã§ëœ]©/?ºJŽ{@G<¸9<¼ðć®m•6!7G’%ï Ùcá ß–TnæäÞ¬<âsio®r^“üÔz$…¶©œûÍHĉ¾|;èkÝ'Ô|ËéÍê‰ûò¯?±4"¥`†íd“‰ÞâÛéâµBUžû`?)ô=k«Ð°]°Ì!À¨]¼(›ôÞx:…nŒôÅA§Ã†¶ÕfLf|Â>3öèxH3à-úY}ÝJö†ŸŸ½8kû÷'¹™¯G »x„ƒqB¹ßÉ­ Û©l/íOxk/gé2ï9øžïOz{ÊÜ#&wEŸƒô\@w$þôÕùõìœôÜŠ~ïzçtbd½Oè Al8zKã²”ëˆÃ@ÞýWQ@J> ÄFÊîŸ%vó>~îŠ3ÀÁj* ü0Ûh$Gv\Ó¡@„.½E.õòÓ^¶FÓîx[YýÂÆV¯ƒÅzq¨ü®íè—°‡¿ã:("NºpE² 5ˆ^xdZ=£f2 ñ%”³¾Î€Ó'ão-±ŠyÐ ,ñŒßˆrá=x=ÚÎ hG ™CEl™Fý2Œ†êXRMâ6Sz¦À•%mç gzaÑ¡¦À¥Ð´2ß‘PN$Uh)AÛztÕ¢qŽ·`»ì“¼ÔåJ–É«~Xß]øáÁÜêÂ-lEÿ®¡såsï ¤] TtIñæO q3z.œ¾ÊEjâ¾!ΤS¯‡ô…9+¸óY{þV4ªFóGFSváxðŠ+¾—ž¢p¾­±îÅu¥>0šz.¾Ö_f"Jt<Âh/¦ØÍ'¥|÷4Alg>ÂÎ" ¶tr¥EX?™5Är1pçdXÈê4¾’g,жö;š~’xD8•[/(¿@ªÔs{Ëû.Zc=;­^µZ *6ÙŽ©:QâÓ‡ÔÅ7Žt‘´êýb¢ï>YÕ¤% ðE¶x‰“|ÞÁhcnv"¶ƒïjE4?Ô5æÔk¾`úLeßšönû§¾I¾+ò1H4Bðƒ÷ç²' îõëæíW¡ˆ`òGI™u1¢â,ì@, ¨’¡Iªm3e@ $ŠeÎQŸÎ(QKèÑ~£'»?XpówÚw{&p¶˜½ù°øXqô õÆÞ¼ŸøëªlQhCY­í¼Ø—/Ó (hú‘]ß #( ÷ƒIÛfE 2Æ¡ð¢'Øß~N¿ÃP7<6 ó`‚±YEÀ×u ‘WéTË—[“PO˜lå¹@ór ±f¾TN´©Wzú<Àj¯?;€¯ˆÊVlùÜͧl¢‰ñõ.tÝø½Z?)âyÕôo#ôk•…!4#½WJYOlö¡Á§ª7®nÓ©Õh>œ+ÜÑa/ô$ÛÑÉ«.ûr$Ñ£t>zêdeõ"Ô-hC™FHð5ãìÇråXF3ð¸«ùØß¥A×[‚ádÜ’uê?zØ‚Šx RÚ§Z$£o+Š~NòJíÖ$  Ø¶ÓÍ$I<]¥1EEinQÚ/y^ßz ÝÚX }ŸÝìÊÀX²–_¨€i$~T›°Mes 3ñ§@v–ì6•þQ}(ëŠÀTw³í±.Iš¹5µ2³iS/Ë9T˜Eý)$›sˆ©cEÇÙDÍÍdÚò~¸éŠãšÄ0¦žçó5.–ÚÅʼZE(ÈZÊ!»BÓZ–ˆüX¡h¥3¥çÜÀë›êó¬'³7ô_*|‡š‡ ¥š¯,k¯Y¯]¿"#ÕtÅ*>BO¸.öÙHFl?& WÕØáp˜B—Nèa2E²3¼ Ÿ&>“I´HLZ°Å’äü´²Ÿ ºúáæú¬åðê,bd_øˆª8<@ºu!W§Ìß°} 6æìŸeÇQwÔÀ¼¹Ò Ž[ù>»Fj µfœÂ8/nBp—ãÿ ómi@7žð<*6Aa¯ú¼-§¿{ƒêLz•›ÃÞÈÅ2*1@¢—-¯|¶d£Žþ§~§Ûå{?¹_êp ›„Ö‚¼„ß)¼Â¡Ò\ê'&†—m2ûéÈõÈ$ùäÈçÖ†½Ÿ³Î—ñ{±Ôõ˜üHŸ–Õ#«}•—"çœ}õ~²æ»;YAÔÌ‚$/±¨ç¥î®ÑÀ ÞqÕþ«ñ|Ú\ÎÅöÌ×]ó§BvmÁZ Yå Š›_éyAûYŠæÓ&Óž=ùÖ†rªe~Se45—é;mi;DŒyÞCCÉ+{%fZ”lô·ØÞiZomV’„ýcÕó0¿•Gmàߘ`∥–•«ý}a†Ÿ• û°ÒÕ†X=/X‚õÏ[è1‰QÚ~ÉÑAqÙoN!ǾÃôžw3Q.zOuIï1?SÉ+·é(ô”ð­¦x;yR]k“rTߎLR(2’ñ—Eз–¹5P!÷–AÕíHιk_òJ¸‡ˆîéÿê©?2:<<ª_ÒŸKl°\,Í€aO‰Õz¹ÇÓHýšŒ-Ÿ”‰*Ÿ5ž˜½nGñjS° ™ÕÓ¸#¤e~ák'dv^&% [CÀÊBkbu¶´ot›“ªßüª3*™qf@åoFpMMl gC»ÙίßñÉlÙÄP5læå!纺õà!}§W"kc/l],§ÿº·ÐjõX¡ã¥ù™¸'—êf6ÉÝhÏcæ²Zí`ý®ùæ¢_:=‘^d4ˆ’’J\RšN/jþ+óÌÙáÚôÈ ×hkòEIÏôK@OxÜËÌè¿¿C â¢²b8ºñuœŠY=íîq¶js1Û5ÈDü%"BfQlêa¥ÌýÍw»¹9Y Ùö,YEš÷ž‚Ôˆr¡YÔKMŒÕ ©+7 XLŠC–4´÷° ¦VfEQP,Êõ¬ µÊßúëö?K\m¹{ÝÄØ¾=m™”»ˆóŽœæG–þ/™GÙ˜ˆ «1ã9¿ }Pù-ïÊãˆÌ w.ÇåÏ Ó(V[~•ñÄ¥$¨AÕðÆëÚ¿Óþ陿o¶ƒõÀ’áeƒâ3«¬£¢èLÚ×=vxAãùÖš–ÍãÞkÏ#Õ³ì‰íÀ¼;œr—ÜÔÔ~žb«wæÁù{EÁµ¡Ñ°™*‡ùÈ™\²áÅ…T†›yú—W͈˜›@ß%kÐÝ¥¨C—SïðîKU‚ &ˈun8€I&üŸ3JfYÊU/Îê[V¿Y_ºç‘ ÆãŠé‘|þ-£äë8<ÇF§ó¼Dò麬løÅªô- Ý9ãO¥s+Þ^P„tוÎök%݉—°MO{@@×#ÊÚ_RJ®öR¡ýi­y¾ös•w81kj«Æ«QBþCJ‰«¢Ì_)¥ú[ë[_äŒü Mó({4bÌ ýÿáe‹ 5½î cù‰zsÅRüÝ·¨ ì½»øÙTŽ´”>EZ+ñ žÒisxõùÂÆw]lá2|õ^¦z(ª›¤3¾ô½¡æ2{ç%®£§qÖ ÀáŠYg èSÁéRv tô§šX'$ÿÔ¿—ÄJî­Ë ‘…ỸùW6[)e5ÕÔ µÑ‡Å3ýñÚ˜­Æ6kW—¥Ç}‡êáì±ööùI…¬V0g®´uàÑ«Ïâî1îy¥òRÇ#lH!ù¼ÏúJ™ÜѲâÿXÉ{ò*´æt-üÓ&¾~G p¯HÁ|éûõ¹ûòlO#qR?Ïs<ô; _.+E­ C%o+.i‚"aF\J"(:U%FJL†&>R+kià´Çý(âÚÓKkoÌŠãù]×°-BwÛATýU6àóçâ²°^"žâÒŸS i•éíßH.ô½ Õ¥ÈIÿÆAˆÉåØûÚzÉ•GŠySµ’O­€r”÷JJÊǺ˜–>Á•üêúSª‘-ûAòc(2 ûqó/T{954rÁRµeCuú ãAΈ øê‚øé?p'Éb It‡:ŽÊ›ñÉá&dò`oµÿ¯íaaæËð¢î{–Ú´”µØx¹®ËsÖ{P©þ‡ö°h ‹n’Lª›vƒg„‘ŽkžXV^n³'Zý*Ч˜Ì2;¶kn½Èᄱõö9([ÍPLÇZøºP˜,¹° Dæ~MÿPÙÙ&}¨=õäÚ¤È`æ!(«RèóÚVÝŒ\à}‡E]îDx§©G1ŸÃ `Àc$¯‡vIHŠÁKSÃ÷QIM|`Ÿþ5ïä°ØÄôà° Õ°]œ! U5%ÿlcY#´Ž¥Ž.$¯þ‚ß7Ô'42)z€„¡ý0ú™ô>ö“ªÅ%ƒ¢Uâ䉠 MLÔì€daø™?kŸ´¸+çxÚ(£·:ôu¾…N?ë4¹ÜH†ÿÆ;ãˆW¡éXPìªÂ?𒪦u²yõÑÈdÒ>‘C Ž£·[I»Šu0®¦–õæ°€x{­¿Ô=!3glMDx¿«þá0ß;Ð «Bþ¬3—ò£t!Äʪßùv¾–ãÛ:ö°ð„üò¯…‰Õ…D»ò×gÖI˜®Þê’?hD»!¨‚_˜ø™V«cÈ‹uöÓòI|º²qI§$€\5cèbr¹§U“ Rl­[‚´R¾¢;„¬`Šþ³žA+‹´I"‰¹ï±¼=Ÿsšû9U‹‡›ô¿L{¥-6â;&õXƒÌ—¡çe~g¦áxPG¦hú3ù¾ Ó¸`¸¼{¼ãù-ø±cèdù‰:C¬ý3ù`ÎÞáе>È!Øö÷%y<º²–¾€IþD¾rÛ^"Dͳ­%÷µ{Ø…íb@ù2ã_ÈwCA¡@; õpÐÄ.¸?tÅàá…Å< Øüˆrÿ K/p¬Ø¶ÖêÒl¸kÎÜÛ÷x©R%6çÝ(GÿV·DÀ±gÅ›6{7­º6“³g4+æ¡RlÝ¢ý]áÚ‡J+Î Ó­MÎ †<Í"õfååöax5ç‹5‹}.°Ì_v9t!å o%¡“(4 •3ÉþCj£Ë©M„ÖêÓT­¤ñÔÔ[KôÖâ¥Wºp²ë ŒXm(E§Y7­»f6*cÕø6­W ê[Ó Ë\w’] ?:2hÓ=š(?˜vù%ÅoŒŽîhb¤‘£(naÊ©F©!)ºô'î8×T_ÌÚ‡J½ÂjÕËî¼¥Ã+ã¨$­¥da‚-²«|}6•lM0ñÆ•­Í‰²Ðcqðh El0bÔ0A „úŒ• ¯Ç]hî ¾‡æ°Ñ¢…6Ä"\UUÏ"-Wk|ð[O³^­,'£Ô³kîºÌè/Êæßíi~îY2<èå ]R™=¶”À (B|ƉУa·Åî±Ê2j»®¦Âæ9AÑó i'u ûÉŽu<ºÐ’uRkÝóÇýW][FŽ" ÙG}‹$þ+LûW96ÌAØ•¨g¸µ$·ì`µ|ýzC±v ¼‚"9£µƒ¼Üà9³¸=.6C]¦ÂÅÍÊÚC­wÌ ºn¨…2Iq@Á8èq×Ó«®íD)!!ÉáqÉhC)“Ú^^>0{œ§e)è Æø«…¡~É`\.Nòåeu, #oGgÆÏÈÔdD“qcf”ª¯TØ´’Æ0­OÓÕ7½Ø¹ŠNÄ^Ÿóbˆ¤O­xôÊ~­©¡EŸëcÂ’7~‚ÄVtÐTöSõr9}ÄÈíÿµ8ØòÃòwvîW³±»Å–JÚPàÅas=T‘Ûÿ°èÝ#” ¡Ñ`μÿðÛòL­ ]èM,-ªÙ#ûw/ è‘™ d®Ðíõæãbé!HØp4Ж¡|4À‚4b—jk‡ý¥¡Ï™¯¿že3‘²¬z°ÕÛ´aÖ"ë~(¶ž»?à+`+ËÜ¥}¡J«¨µx©`€)4y4ôî¶1$@T¯iMûËLé=›)¹¸$&Ä?`õLÍa?'vŸdØûÓ‡š˜ ‹‰›ñWj)UƤ…{ÙÚÉñ/¬'Ñg'»Î‚(*(!›Ø™{o]@w£7¡ö<ÁCÍC1ÿ–PnñÍÏo5œû‘)~Ó2½Ô ˆB|ñybIâWz~'Oáß|§÷œ‚žÇ Ð@©û³¦¡ÙÊ„¾U4NO·5I”¶WüI~HcEôþ7-ü­õœŽƒhÉËóÝ®ö´ÒUÏ‘qù´`újÚŸÔð]lL[eÿáæ…Îi†Ê9‚¿Ñй !Áä/jøËú¼µÆFdC)ßëðäÁ{·p–°qFò¬¨\Æ4UäVmÿpèM…Ëé·u͈€ËTÏ °·~5‡×ý²0òLÞ#K³†ÅÓiÛ ÐÓl¾ ñL÷žóSÿW_ú1|½ó(8[–§Uwík£¶†;–bÓpÙ@!Ôj‹\°3Ôwj/w¶iµi n„*;¦+<¸Ã'SÚª-A]\êù¢=nAøt–´oÔ¶¤öù_äw!@tÿÁ Óaz‹éý“»f½·YE§¸—Ðl *é.€È%  ÿ!×+m¥M–Ì ½6JÀ$#ÏÇf"41¹ý¢Ñf28)ÜÖº¤S`$7} |AÄÜú,Û>¯z–¡?,˜æ÷d”&—*ö‰‡a!Œ·@¿fx…]ÈE6ð&†cÍýq1”ÿuO``I.Ì ¥Ìþ{*7qgôÀ0Keè3ýëhwt û>¥ÃŒ­ýöo’>·‚Ù!¦sÕ…û(m†NÏì½4#¸<%Ìuœøç–ý™w.§½_D'b0ÙFC泊’ÿkËîOZ±ˆ$U°}M·½û5 >0Ò“º1c–uCð÷Ès‰2¼ô=1kÈn¯8KAƉukIÅù“’ê$V=ÙrAßRº€¸¦:Á®l0Ç]YãS 9Àj®"þï°´‹Ác‰aÞÚm€9Å.ß‚å®vy§œl²BJrl¶2Ø':¶8ü2›J¯ey8¥¡üÊqm,6}9ø£p!ô0Y›jÒô ê–ÇKw1:·­þ¸€ƒá”³Uߢ!))¬ñ³óÜGÐJU|x%½|‚–Áfýì¹Â¯‡Üß6 ˜Á'ÃÂ`,HNñò®sh’Óc¼¼üŽò~è{ >Žv¯¤ßCãD8¹/X˜ª|Iö€hÓ ø4†¦†þãi¬áJ2aÿ34UY¶=A멘¥Ö jžlíûŽCO®'›¨&¥­ W’¨8ô:Û¶Ḭ́ä:Ô°>D]¬jÝédóiqx!Aq¶ áã‡÷ àö9þÈÉë äký[IÝÑìOzÌÑ€3êñÐ÷Žõ™ƒo2 1¬mžß¼S®Ð²ò7Yÿˆí p„Y†]g{.yxê®íðï§ø§©0ñE#´8‡’©Z¨£2ó=qm6)C® P,# >¦|sUîã1)ù¾Qû‘~É‘EHS c1#+êâüºvÅt¢tQ²ƒ=Šˆ€^f²Œ#à2Ø ¨wµùxÿíµ6 t ax zмð|{ cðPå¿ ­Ô{.ÿz£ü—çü©ƒ‚ßì|èýº4ÿ̓Oÿzü8ˆòlW¼þ~n%l@]"çd6x(…†x¨ô›>fhbÓ™` u¬·~¶–ΑÖ7‘+6 ©z"ŒŠîznìýñXþ¨”ÀCH7Ý6ÍDX9ÈsGÀ*"ðzFÜSœÿv鯌õóˆb¾·"àŸöVfxþÆá„'dÂÁý…Â'±©Iêh„ð oø(0+Ô`‘}ô±ü+c@JžÆú'IR ²”ýˈÆ`“ìÞ~i(ø€¢ ‰w ƒà+ÀÊÓ<ÄvH2t›ûè@>¡NF­HƒˆhÿP­öÛ/øïõ¥VV¨WäëJ˜!¯Ïöºvtz†Vú&–ºvæôföYSÞj1Y³ÖyÅOþûsˆcÈÔ ›Ða`¡Jäy]—•&FY¬2ZÊÊÐ@ÊÂ7úš‹•¡šÔéÔ‹<£ßcHïê;ö,ix«¨³@_¦§ÖÙh¨13Í!TÜ€3ÂÈ‚)áϰ`lÚè£vkxíõíwzûSe>±mõ/ŽyÄBRâfÒbzrÒ¦ÔVÔoq˜GfRC-ôø˜Oƒyï?:þ®û^g0¡¯èê_¢kº{– ÝaFþÈ.– }r¸ep_6DíjÔ4Á“8 aDÄÚl”×á‚8‚ö™“ŽÌ^fü™…}:Ýçtƒ–×ïý&M.þRãy¡ÒRsO2ݽŽ^3Þ¼þüêf8iRIž[¢¨8ËtX‘û2– àÖG|lq û¬š¼Ûë;¢MíÙcyh/é!Û,>%‚»¬ZËXâlaóL@r uböþ¹é+¤uüaÏ6…6iDãP1fÏ%{®©ö‚ðg›j›"€7°Pq‡@ÿ¢Ò¸>Ç¥Eü +ÿâx f%^—ø«€J{½EnÀøʰ™_Š%X\(«ø ö{¿‚¸vPz‡À¬?Jf¯3ú#VAÿMk[ë—ë”ôô¡©àh«Ã³˜A@¿TÆ_ÿPÿ£ûí`?b²EÙIÒõÅÑæh˜‘EjíÛ™d@«=bû&dx6 ; ÿþ¯DcY÷“9¼’_™Ép9#;ÛC¹§ÖG»éCj:¯Ñmö ³'Í]Æ<#k°¾Ä`Öq±=ëEN¦…OAø¡€ÐÓ]ø}·£?˜3X«CúŸ’º[‰PwMjn†™­_ê £óA¤'Û¸à›ô»v¹ÚÙŒZêW€w£”C+°¾½d`škU7ùó¸ûýâq°©òâ7«qûMçÊÿÓ¬¸•øÑ½ëOÁÜV1ÏâÆ|ß…ÎíÁÛ­Œœ1ç°·ÙNº[ÈûÁkÍ‘ýÇ“êý–½ÈŸ¬Ï:3$ö QîËÿX {ô¿´ß»o…þÐDz8›š¤ú¦‰Ü¦Ä@I7ò12m¨O¡Å•DÞƒÄN¹¿ ág¦õkÀÒ/ZWP1éD›[/ïµÖ‹v~ ZGÁ!zòÅr‰á±Q ÿ}•c¶/=wíñ¦±ã(Sµ$ÛÆ}¥(ø¹ñ¢áwŠ4ú=Ú´M¼ŽØÕb1Ž ¡¸ã dMÓµlaº¼ýY4ꪘ¦ ÆC‡îÙݨ± @ʵ`4Ør7¸véÂ!ßÓ½)Yòý¹¯‘ýâ°¯'°…á̹Òÿt[>§9ÓÍäÝ|: f â—¯ÀI™ñÆT÷#Æ‚¥øíoL~ [L×»>'f½Ãcâ—9ÚwMð‡ÑjéËy¨~‰ÚÏ÷}SäuºX_’øEô´Ä¼¬”*ÑËÛBÍ+JåÄÍf7[¤KR‘gâ“ØEíÞéAôQ&–!ž› þZ$Á—¾•îôXíõ7ú̗‰pñ#Ì­ܪ!ßá ÕHå–>)ÔÏÑ<\ý.„¬—Â÷4ð€”ÇÐ:‡@‘yÒtµÛîÍK©’Öëô¦ œ¹ß•–oº«óz(wà#Pù§<¾yb^[\{ ..g60¼½>P‘3¨0Z¥â ž#›ý_Ê£¦Í*(µu¾Òeé65~­Ó-‘Bžöˆÿ–!¹1)v.¦Ýõ÷Ú7d¦Éf½=i¨‡ŒBqwV)LˆE¿K¤ ºhw¸à^"+j2—„“5Ý„¢¶7Àê-Ÿàd:øœÝcl/ÁIEKòKhìtÕ:³±¶LzI‘,„npåOj¡ofVNF¥!°€½ ¬ÑU˜ H°yÒœP­æÑ$ýšŸùÆ•Ïr³cv÷•1²­á *q+ ÷—VU‹áð°÷ÌÅ0`Q•da&Ð Ìwv©'c`¡“Àöûw9cÃ*¢hÓªîï£Pú¥©XP(;FÙAe^Œö²¸¡!žê  ° ïÿ/—z¤ŸzT9†°x¨åå÷»Mî+Ž DòçKí¨˜ù˜¤8ù”×ýöä:š9ã©fe|b²—¥G|#s7ž«F‚Ñøe© Ž5åÞUçqMëžGãF!R÷YÖ·Y\)²kÓ§Qmƒu£|ë²Ät”°LÕÿ(Òà>ñIÌÛ Ö€áUH#ëù¡”UZ Øã“Xƒôgû hýÌáÔ¬µŸ–‡Ç¬åG²bÑN.áhšÌ$–Ðdª36¶·ŽËErá¨gœ´[ÕÂlYÍA2¶'^t8I©v®ßl<- ø”~%@-þ¯ ¥1—×mJoN4­Ç¢~~áçå~•1| óß}Ä kNŸ#¿Šgt”nOkÜÅ4ÒÿS“â̮Ђ}óç`ÝÍÇÚf›_†pVf&emN ¥Lé›j—SÞèþÁÉköÁâ ÃôæÚ.±—T"¯Ky]K¹žŒ”8%SqvÌ™­ß韇™žB°±cïß’¤b%Ryý5H²[« j@å°_Цw©¡aõ¨#Ò4{Nb•ZJLþJ*[Ó%{RX-‰[­zn<+¦üdÿ kÐFHS´†öl Ç beÿè j™ŠEhÕ |Ͱ1µ³3³­ŒðS×3’6•- ÃQ¶“Ö³=Y§’„càØ6–dŸía·¡ÍæTHh ; ÷ËÒM`Ê›_È1ÔÞŸ‚Åü×ÞF?†k‡vÂÚq°á‡À É?;BHl#Ô3+lEÛË…èÛüj·è´`H¶zŒjü7WÎ* ²ßMŸžÜ…Q•ËæëRmƒ}À‡¤Š®¢Ê/ Æ ²bFfLÆý­Þ%Çå±w‰Þ‹V?Bñ—>NbSÄ3z¤ÑëïRÛӴᬡw”4ÀÞ¥3l¤ã˜Ö }jŒž» ×'[ äÚ™I‡˜ ‹™i‰Wúa$)÷äf~LHúòJŠMRl¶%~óF^éd“,Œ¾:™ ¡¡ã5^ mfÄïø½?lP®Aà¶gî¿©1®/}¡|n-ÃÒõÒªAô.Í7ÆôFÂýSa!€›mª¿c :£ë”Ì»i 7ösq6éQ6¶€‰?ÈÂÞ}ŠcKagÛÕé¼³˜d$]Ô—ÃPêâí7Y`ÌÕ!É„T©XÕrññz‡£Dý… œÞ µx9~•)GÅB©ØuîvG1¬*‘Ðlâ1§ \k¡¤³’8yè>ö)õêVýaƒ©þûÃG<“M!‘Û´­ÝºêÏöYŽXtäàÃB„YJ×¶æ õ©‡~²Øž^í9@ ÈKT¶–ÅX¥ÞDukQõ0Òc£…åw!˜ÚOq<ßtù(D¨TèFÕ%.°,:¥œ¡ÉZCTn[<'0kñ?;BÍv¼÷‘œ/´;#gËÞfêâEªF[–Êë ˆÐøÈŠj“Öœ¹ÇuY3i‡9+›ÐÆy™¼Ać7Éfi$›MBÆ…aR¶#8$†û~…‡Saɬ…ÏG[oŒú­ñÞ¹s ù\\DZäãëGØãŸÖ«×µ Ò4öý;»«8ä3ËΠý· Ó‘¥“8îÞK/=y&üvêw~Ñ~m9÷ïh–d´LßDV§RM©òc­7äv‰xWî_¼¦“«ÍHÓºèø¨…çJ}b ^‘úœÐ¡BÙúy€Õ nc¿?õÙ&ÃP]sj€*;–û@{Îi"ˆ÷»¨}äSýq–›€ßjÓ|lrvÊó©æ×.6];þnŒë÷š]²«ÖóQVbŸòK¿ï‰!ÿÿ² &,êw{Ï»pù÷]Üôå”óÝÔ0«êI›šUŠTnn:£×ãí²ÑÒW!>ã `¬˜šžÓËsÀÇD)úý/M©fq» zÚÓè±ü@øx”Þ¿ëÀ35î¤ms)P8X—ë¾-¢·øÿÒ_;p¦±y`~à¨ç«£ùaGëVhp¸…Qbø™¬š†œ“œý± D¾ö›«.ZzõîÂda»÷ |„Á›Ô<5=o"ódS”mHùƒ•ãf ïA³8!¯âMt5fwй½ ’Ïã}ù`¯"« boô5&u n ¼Š_Ž$ÏxµÃQ‡?y)‰ýÿ,ÊܼÇHo–0g=I†xåR[â7µ×Y(¥þ¥’Þn>ÖPwŒ¯¨WIM­wÅ0øŸCü·.g<€#TÄ(e|¿€E¥%ïZÊÔ:¨{uu¸–°ÃB!•á¸Eê;7T p§ÿ¤³LŒr•©eÞ{8ØG~@<3…_ .Hå%]Å£`ˆ=Ÿ»W÷ӝЩ7à#Ó ìäªJͧ d±ö*æ µµOuã\[çÃ_ŒåÅ ãP6ëe©´ÏÛÄÌ·³•^Ì|×,šO܆LÇîd kSU²æÚÛî}´HÅ+Ç¥hRå[*Ñ3Z3;xH}f¤šÚyß ðþã tg­FêSÀˆ1—LÜþýâ7K˜LFac uk5U›4³r¶w*lb6µŠ(GS[ŽT ¼_‡i»7@@ꯛú(L†:ŸŸ‰»Þ–3Uy®„3¤v]ƒ¼Býû›°õ¦ûÐí-B¬£*)yS…‹Õ¡î‰QŠGø`"úÅî&°ûWpIä·àŸ$-Œ[Wjìl:#@ Öb*ÐáÏìªgþ½0!ðëÂ~”ƒM=¥òƒ÷Égv]åÉ>_–Ö{ÌþQª†i÷.%ãõ þgvõíÃá°Ç|×x«î Ó¹²oÓdó“‹¼çÿ]K"æH©·åWiŒ”ò8Ú(®3 ÿ»ý0Kynî—Gñë)ý·+o%´ú!ÐÏêÔÖÅ„)âë”V`vºOn:ÁË«Î3;íHÒž€hîWøuí’ðÛ?Ú¯¡—!ü¡‹8<3AÅs“/PÖx¬E“ý‘Á­>ycúÑæ¯t‹k4n ¿’çжmòsh{ÓZ9 @špôuúm)¿NÝ3ñh—ûúºqó^>mKÚ=:²äûÆ,ô¿½W}Ëí¾²æìÞ$þHçaS¯àX{GL£, ùœ{Bš$·=ÞÜÅŸ –q/h©Yµ–œ 5ãÑ2ð‘aeMXzN7œuxð’yÞά&¶Ì›<ß´ š ¿7Îcf¼MÄ»zu%£áOL3ñÍú[ ‰?ÛÇ® ôPq‡•V`²ËvüçÜ¥s ˆ;"¡–  wã$²cøÌ`;³,ˆ,ˆ(LS5<¶u?Ñ/q¥5ƒÔõ¢k%,³ÑjßÚ6¿¯@ÐÇÁcÅGøÍsÚ©1{…jœõŒk¡’lÑj’Ñ£rÐÚ¨ÍGP~àdOMØÓ˜õÀØV 9±šB¢:J"–ö<ÖÓãµ½¡Ák {u-.Mj. {ŠØj¸ Xk3{ªX}xR Ul<ü›êFx_ “5>¦qª ØfŒüloÌò… A8Á`ø°ú`̽ \©œ·:ü­.YÙtoˆŽ(cGµßBõk"zŽßÔÉ=çk÷ßáVã!³›3¹2YjµË S¦T@E™91©1E9QÉßz’Kú{ú“A*œ³‰R)RÄ0}k ù<WäTfšçxM-Ÿ‰Ÿ)¡,m™P©»MUÛÔòrƒ…5Ê© ¤î–ý¸— —jï/b§«+r°)ÈeÊø> åˆd½eæoQáã¡V¤ÎSÑÖö<5ЏÙŸ? XxÇ™,(kª ½1Üô–¸åƒ6ö+…}¾t‹2ôƒ@\ƒðÝ‚üô¼@ßï°¶h¹gÅx cŸúhçMÌåÅcéŒy¯¢]´4j±³#7?Ò#Á> J‹$†½#<‚ÿÄõÛOÞB…g^“:²×£¹ÈÔïo‡9¥‚%‡‘ñµ¡…ƒ®ž…£!ÀÎxk¬Z›Ç‘µAÓ­ß>©ãôY¿A% õ©ÔÄó6ìØægf9Á½}Öo9ôÚˆá"MÈä"’å*lñôOµkŒÅ‡À°§ÞWeÚi ?í˜*HRW(‰¬„µ¦lµm©@Êvâ¨A,ûS…ŸÏ›(R(Þ{ZÕ#ÈtùÖ‹?áÿ/ÒË„N) az`Ë=ò6ÍV »¯eôÊUšÓŽÏðûFèLV—WOà7¯«n92@ó{ÄÚeˆ0SmH«û––c_Ê:Ș†“-µ—xJŸUÛƒ:jݤ¯ÇoQ—¦€5)=\Á½¬˜ôÿÓÞU‡E¹­ûo(iPE@餔‘@%¤†$E@ét‘VB:¤CÉ;ƒîíÞçïy¼÷ì}ïóÜùý30ñ}kÍ»ÞõþÞZc7…Ç6ÏAaÛP3 F®%¥êfFdb<Œ(–vî¬<¦šýY5óôæ:]Ý)¯Ã%ØÒ“.Ä@ÑŒ·õ¯°7„¤ÄÌþ“†Ê´•Šíýê\lŽ+hp ¬´†‘¢÷½AË<]îÙJéEÝ2»hä¬&òÁÍ´6d I:atºS,%¯Ê¯4…¼üý3F/°þ±Záí;En¹ŽžùNn5MÔ:9¹oqôpœghqöÅp°¼wï³Ù¸€žx Û5œ@”Uw ”x÷òegËIžúät’˜ÉX²£¸.þ8á§yWø{l>HkÚX¹S@—g·˜£–KÍ}<%K6ÀåÚNr)[p„ŸXÁòZ˜ry…§òÂu:²ámßóHW `ʱ¸ Ȳ<ɘ·V6E„J&~/ÉDÝ×Ù• ÆÎ DëâÙ$a P±ë!m¯{äÉÐYbIÙ>2>),¹ç$Ögé›ß ЇcqÍcáþY“}KfãG_F37ÄN®z©QPÁ-EPšì)ßý)¥_ŽDÌ÷Nò½”Ðk$(M^T ¶›Ã 3üž>ÊÄ8DmØ„Û+òþⳎ“$Ÿ£x¸3†B¿ðÅè™’GqièT0Å«3S’\ ª²ãw¡Ùâɳ¢*žÅŒ¡CšÛ×îá®×A}sf,”²sÐX„/×­”lêjóø*Qõp2Xµm5°tÑ. •«3q€Œ­9o:¶gõ±Æ_–r™t=OA9Y¸AƒcŸ¶cq¼G¼f1” t«o?ê6Àƒ,¼Wk ¨â7QB®AåÂW( é_̲<"$®Š›Oƒ?[m©dö Íd\Y¤è£¾Yý¼zÆ8/W®­+m]¾Ez)’|·ÓÚu› €0<›¼Ó¿ÒMVÀ }ƒÊX»~”ü^U‚¬²Ä2œ³ot¸F¯õ <ļ ò‡~±÷™—çŸÚõÏeÕ7ÔdôŠç¯’?~<ÇÄ2—ËߟÔ=>Á6ü9fÚ0Ôé½Á–㨔7£-~Øf¹L‘ÚÆ7n$O}~mÿô“6Wîž"ßBFŽ0~˜À™pµ0š£ªŽNðpGþDWíçÎ ¡ö­Ý/6НÎ'ÿp14ªnI»|¡ ñë¸ÄU¦ëP.žºËx/î[ÕÔåÕÉîZ«Íû4P†QYA<‹>°zÞnǾ ¹Õr–©YcrN[Þb¡ h¦0éŠI~ÊŒ]‘綸€ªJ©Šv¾ÖÙÂÞL6„$HŒ­Ø4ÿAHD4¾ûô&—èX¸š®LåàøFçªN£´ÍÂÑcû×¹k±byf_÷K¦ˆLæÔH7w0ÿ)i Ž=[î©à!þelqP—Þã°Êê#-pŒÇ“k—fà ·ÓïÞ5§˜¶¼’¦œ§Å²]Å‚6éŸå„·Êÿ ãoBIA‰*CU@—‘YR,@Â4¡£cl‘3Ÿž S4ñ(]ž Ç{7?<úòsäi`w‘ÆuC¹‚ZË"½‚(²¥KËÙ*Ùè”–Þ·S½ê*j=r®vÅΛØüDq‚ÛÛŸ?ö\]·¶>ÿþÛMîá [›jáŸÃ⪪–=«" a˜T@ü jŸg@¬¶8nm¿5“O˜­òÔ9ïhЧ·fö‹0ãeø›s.–âEúY»IÖÁîFŸ3yí?Z÷L 2|(•?Ý~Ýàm&ÐMveÓ:u•)0 ‡åà” ˜!H9´Bù¡ !þrÐx‰ lP?eýgçfÛÔmûñß§ë®ß 陼Áóá`1Vð÷s³÷g|®Éô5=».r›¦:ÕµÖj®Þ„U#ÉÎ讥‡Fê™W‡x§ŒáïöDg ³±‚…ê*îFMŒñØù­*!ÆL•émwŸeëȸ}6’‚¨„4„2çË$…Š©ÄŸrÿ þY»d®‚ÃÓo!¿ ÿë&QGGÚ–šZ8¦>ùeüAJ•¼mYäHHz¥Äó\Mi°±Z-¶fD‘ÒÛ©]X’á~¡°Ä‹ãç«jÖBJº²šã»ÏK ×oY$­ÔбÞéJHÑXÉ|º€•W¤ ¼ÜaÕ^‹ëŸºf¨³öÌû-xz‹>ÝE9 €@ñ&Oà)óGKO8/¹’…Q5rÀŒ]Ýs÷7³Þ²åÕüJb,ñðÂñ³ÆÃÚ·vé”+Þ&›ûDôxyJ&y ¹}‚ÄÍÌñ½éçî 5ôÙCzó3_&ÈÖ°ñ±Q?OnßY»¤ìç¡ör¥ñÚ–­¯Ãø>è;6ƒM5]Äæ­Èü©°%—/“¬ÌÙŒ9ò&Êø–œ9f«JHÐèδ¢t­B2ïqð"Êj'É8ÜeàˆšÅ B:3 xÀöøè[p‹˜÷Rƒ%¨Úш©L¤œÂ™žV£‡®ÔM Dþ.nõ¬rµ]ÌÝÅ® »ªB·qÄmT‡Av¶8Íif¥¯ÓlkƒG4ÚÔZYùÿ¹ƒƒ=aqÍÑNY`’+ØÀŠ$ÈóbõciB .î·y\­øÓô¶„îµRQ·eCý†^Ëß.:O/AawU{¸sÏN€^˜ İéEõK¾” õ ïcÒHn`<±‰AÒký< ]_äs¦éÆúv`о޽šÌ)É!=±£ šEÑz1‰úѰ‚hxzl{NF©Jr,©(:6=%1éÔ'9.nÄ^5Ü+uüì¥ULBÊMÌ’/ØÀB¼ñvüT°ÕoD˜4‹ŽÝ&—©¾mA¨¡k§·0ilrAÈ¡\ä{h…TésgŒ[6=ŽÈ¼öDMàÎÄcŒÛ„#GçÍè§è‰ü0÷-€¼fS¡pbï¹#Ÿ£aȰ0eqN²ok‘‡]Îþ§AAËJr__ì¸~Á™¨BäÉ …Bøorb³õie&<––BePuJ0ØTrµM#¹´ð( ¥Ob„kJµØŠìxóaÎÚ¬Ë6q„H÷±és¤só@è8ˆ’ +#—ä/â§»w¿®”–Û“ æží§«½ôIg3³/‚ûG¡>Õ95fGo±çü”ÁcZ^¹4Ë´Ò7¥Tý´l]ð‚cƒ·–²`Z¸É©~ϧÌÉ/…¤eT-]dÍTÀ¯8ö…È,ݰ“J-[ÇU$L'9^,`òJË+}…íÚ#ÛÅ¢¢Ö¤çm£åP|Ã%Î ºÔfHPëcÉ­‚‚¥PÜf7ÒùZðƒÉ)WDÑÀ0~!yÍšaŒ7»þzÁÇ8еFôv½û}¼ý(ÉS‘ßI 'ò NJlÉ\pvˆáÌïÌ&œQ lQò„ûªßt$“jF÷惯b€Ìp9,F,`Ðë_IÉUôóïcÈà‚0¬<’…7X7]Ñí¾\/²up´;dî8;3Œ‡3¤ý¨¢>zÇŠàÙá¬Þ=»ýýþ¸q»Z×È{ùîM¬Z5}c³¹øó£•×fì' WúV]'ýª#ù.¹égEÊ×>kUƒ%ˆ”ç=ü®„Ë[_üL˜kBQ·°1S­sj¤ï̾±‹yõòÕ ‰à—Ì³Ïø•0#Íu¤#_ññ%õ> ÓùH!Jµ),,Üüt¸›ÏˬIE6\«½ÿ¥a˜Ê«€¶"PôíBZ0gfA’ÙÍöÒá©Âö²ªoFÏù‰ˆŒõ˜]"ñÈk±¬R<(ÄL›è/oòîíé|óDíV}Eaë3²RÚ4¯F0|ïë$Ǿ«cåZê‘m=~Å”&þ̔މÊÖMš3{—·G‹Œ«»§·Œ‰¤:|]¨í]˜G˜vHmÙV)±õ¹žn׃9§Ë ”Ü|°¶¯Ò´G¹s!gL¡2œgï“~ÂÍNzBM±a¥¦>ßä*Ÿ³&ñlÜ£ëeò 7ž÷“2kÜÙÖjNÝ(fzWÓ5±ó‹ Lâ镳,Àé=„WùUuN»Ýæ¿êcSqF#ö•ÚqÁ³¸´ŽN͇ͤlçœñÄB§pÈf¯•¶]± ÊpSð´uxÿ&!ñ3—vo=gª'Ó@Áýô f›l±õ¯ª"‹y°ÁÆûÌLMâ„¥õ’Yw>Ìb6¨{Ô…m#ÂŽŒú¡œò}ÍI`½L4߯*Õ† =ïøðµnƒò€õ9çÄL–ˆæ®žVš†;µX¤´^°K¢5†§;ÏÌ_¾õ¦%ñ=vîHQÐ,­ÆBèõÔ(%}ÿ܇¬,vûøÜ«é%;þN•Äçôz¬d1NIÛL”qÇ{jÙzjø Ä”2ÎK?G.<ƒï±nhâ\õ·êµ6íÕ,ÇO¿f?›~Ÿ¿7ªW T+¥Ì`AINœ-¤³ÕGâ.ûa §vUí:§â=u©ÌN•&-)L¹áìÔ¶-ìÔUÔÔ:Nη¢Õ¬Ü{g¦ŠR}TnÜUˆ‹v‡§iWANH{ßâêÜlÓÙ͵‡/¾\ëÓO\7Б¸Ûó°i¹»%2 h‹#â_E‚~ ²wæ:}ÐãÙ~sú"䕪*|óÒÅ@© ÃôH5Ⱦè꤇ìrÄx_ø¸Ô½ÑPäÁfRQ‰K2ŽÓU˺ §“¬—ÆÕÛÅQCeß.ÕÓÊp׵콙éoR_˜r»úÜ?$±ˆ(n°…ÌSAžP†0QZq:¤6†1|°eÌ Óß'ÜW¿®è©Ì1PGX$¾ô®lc.·àŠóIì·sžL4‰ú´¾î ®;UHÙÆ­ÐZàÔµ&ò‹#þ3ÿj³qƒ»T.¡êŽÓìÞ“ÎëܵH:0y‡øÃ(•ð„Ü?á²EwQµædç@ú!.0‘xý{,ö»l ÄgË××a¹Ð#iáζ ¬Ë#¼ ±Clä’œýÊ09!¼N®er-Z+Øí93A,À Š{¹ü¬~_~% è»äÏ•yÕ=kå9Ú]„ÞF.¿O$ƒ?ÑŸw$Šõ-æ63Û'yk>_å÷-ßzúfqáe°52¼Ècx‘X>ÓM6ž#©µ;„8ìØ“t¬\”‰td³ ‡)PÇúïÞ}³£ìë(1â°T¸ãz“ –h zÉO5z¦r¢@iÞ(Ò㪀‰ë'”îñcZ§./®!gp˜9.AÍ …üõ\P%§[}d†ŒóËõ.PûÓÑ/íÄ™k @Iä;é‰ßÊ.¼Ñ/1–z¢C¦5>éy=¶¼Ô^ê6 +!žÁ@°¡‚Ù)Y I©Î?ÂÙ0Ⱦ„N¥#6–¢âŒB“79¾p >þÕ¤™ƒºçnõ3-ue-Sëq±„Ñe­uç"Rž¸à_æˆ"ŸÞçf)”]ùpŽ3ã‹StÄã+¬Ÿ×lë‰ÞÁ#½zƒ¶B³¤ò û¡<® ¢·¼G^§4ÏÁZ%/?‰5›BdÔT JºŸ‹àŸèžQâÚ|¹"ÕlŸ¹„©ÈZŸRF¾:F„:÷À9Âü¯R1)îSמÓxÂãJ)¶ð‘†t§ƒ-½B„ •sÂExÈ)—ddÊï¤G[L-6Ñ;Râg1L}õ]K)$«ö0*ÃÖÉ´és(1F,Ô7&¢ñqELŽ@^æ º²æß[d 6}¬w_þíæ;…CÿC7¯µ¤³ùÎ=…¡*q‘:UŸ,L-Ôœ3˜t U5ç·sOz¥¥§¿Š‹g¾IW?‡„)¨¹¨I–¿<ÅFº¡ˆøT áåÀJaEH>ÂM}éÀ,kÇÂzα‚þÁ–?ãñ°Ë£„è L·mqÎÚÖuz¯™lÀ,g’ìN¨û«F¤“gø6“¸ù*a€©¿²ª_Óe , ŒÛI í!âU/׳7×–Çtšw¸cS5G¤Ü—¢Oœ ØsSiòZv½P…F¯H>Ö,OMÕL‰Ëš—Ê Ö]²Qˆ Z39µ¦¼e¬Ÿ>{ô*…'ܘ‚}¡SK¥ÃÔk}Ìv¬Š—¢KzÂå ×ï®Js¾ÿ ëÞWæ¹Ë¡]½<ÇÇ‹ÔêßÙïÎõ ÊFˆ®üdÍ(µœÜ“qÚéâÛY®íÝ18ÌÀKù•J^¦ãõíèµô½w+Fµ×æ“)™Îvb`*~ö%âj'Ôþ4ÒY>)¾eÁM9‚ ãÂïÉ|ÕÍG0Óà›D'e™fÄÁÓQG7@W‰´Y£·?ƒ-í\Ëc°XXRBMV^DW]®ÔCy…œo]ÖøZ0Æ2X&~ ÒÀ°#:yq8Sõ4ƒ7lÄ\XY$ÖI,ý„ÌyÂ7Šóbõ¢“Ô–ÓŸ€œÃX´¹©¹7×{‘Hêû­~#29{«Ì½äƒOYú˜›¾rD|×ñçÐìÀ;-¢çv+Ĩ$”‹‘Sób\‰ãpöóµÕÉÇß#DU‹É| ï|Ü1fw· ÷Ž›¦ïMj¶vyroÖ_ªhœá$g½B9¼ûªÀ%=‰^SWyÖÀ ¶†Ò?ll ç§îCéG«T‘f>=>Ù 9#ÏÔ/TLyêÁù;"Kýӯ޶p³²¾õFdz§„~™Ž#É*ƒ«&%~´¯˜HO7o ¯Ì­"­"s”D†y°©ÿLpOÆ5lðBY³2yîË+ç½krÆaê[›[dï™=¯ÔåV·ŸËÓUݦЬœôZ÷=üôbueà¾Tå3š&•7öù}§¸ÈÙsYObïc‰ç“ÏG¡øž§éQ]z×þ¶¿ãf 5~{ðäX`Õ¦ûeU™ô׉ÁTØœNFU«üͦ´kvz¬I˜…œ¶s›ŒsBÓ¨Þ÷7Žm”ü…„ÑüÿïRô—þ™üÝ,LÝ Ü|<‚ܦ·-¸-Ì!h&h h h h h h h h ÿÇð™Ö:û¸tig-2.4.1/test/graph/000077500000000000000000000000001332650737300143725ustar00rootroot00000000000000tig-2.4.1/test/graph/00-simple-test000077500000000000000000000006451332650737300170100ustar00rootroot00000000000000#!/bin/sh # # Graph test: simple . libtest.sh test_graph < 1383861571 -0600 committer Benjamin Bergman 1383861571 -0600 On fix-graph: debug printout stuff commit 210fe58ba8f4aeb35ddfdae052cf8f0fc4f54ff2 85e82d060ce75a840f84cd53259413461633aaa5 tree 0751a22a3cfde6d0c3fad0910c77664b0e9dfd1c parent 85e82d060ce75a840f84cd53259413461633aaa5 author Benjamin Bergman 1383861571 -0600 committer Benjamin Bergman 1383861571 -0600 index on fix-graph: 85e82d0 One more fix commit 85e82d060ce75a840f84cd53259413461633aaa5 3c5321af10963dedb71361173e17fea5fddbcd09 tree 0751a22a3cfde6d0c3fad0910c77664b0e9dfd1c parent 3c5321af10963dedb71361173e17fea5fddbcd09 author Benjamin Bergman 1382970000 -0500 committer Benjamin Bergman 1382970000 -0500 One more fix commit 3c5321af10963dedb71361173e17fea5fddbcd09 fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8 tree 91c965c280d9b6faa89ce6fe648d8676e8233b2a parent fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8 author Benjamin Bergman 1382968508 -0500 committer Benjamin Bergman 1382968508 -0500 Another fix commit fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8 48a6ca25bd8c018117f9cd752cd8acf962d90060 tree badae0344d4e7e59357a2905442aa2ed04505dbf parent 48a6ca25bd8c018117f9cd752cd8acf962d90060 author Benjamin Bergman 1382935317 -0500 committer Benjamin Bergman 1382935317 -0500 Use pre-generated next row commit 48a6ca25bd8c018117f9cd752cd8acf962d90060 5a0a8ed21bcf5be036fe66479f2be89d32e4c214 tree 0579c24b661ed3863bbcc1c6cddafd0a13b9d7fd parent 5a0a8ed21bcf5be036fe66479f2be89d32e4c214 author Benjamin Bergman 1382933509 -0500 committer Benjamin Bergman 1382933509 -0500 Add function to pre-generate next row commit 5a0a8ed21bcf5be036fe66479f2be89d32e4c214 2696d90c257f97226447bac12dfa9ec266b1221d tree 01d6e82f68c014dd7bf9f3539b7738531ee005cb parent 2696d90c257f97226447bac12dfa9ec266b1221d author Benjamin Bergman 1382906024 -0500 committer Benjamin Bergman 1382906024 -0500 A little more broken to make it better commit 2696d90c257f97226447bac12dfa9ec266b1221d c445378c6aef243a63c805bb1da7afba9821dd07 tree 3e8dc50a65b9e3a95a128aa65b6a804e2b479e57 parent c445378c6aef243a63c805bb1da7afba9821dd07 author Benjamin Bergman 1382852608 -0500 committer Benjamin Bergman 1382852608 -0500 Always insert extra columns at the end commit c445378c6aef243a63c805bb1da7afba9821dd07 02cb3450c52aff5f9daafd479e97a52d01edaf2f tree ac394f2b65aee9be50ce61eab2c9db6865640777 parent 02cb3450c52aff5f9daafd479e97a52d01edaf2f author Benjamin Bergman 1382772930 -0500 committer Benjamin Bergman 1382772930 -0500 Works for first test case commit 02cb3450c52aff5f9daafd479e97a52d01edaf2f 05927494e74b8ddcebfe9163338bf1e6ddb899d5 tree 0f0513ed6df99f7db29b7b821660636af9f5410b parent 05927494e74b8ddcebfe9163338bf1e6ddb899d5 author Benjamin Bergman 1382768031 -0500 committer Benjamin Bergman 1382768031 -0500 Better, but missing some lines still commit 05927494e74b8ddcebfe9163338bf1e6ddb899d5 bc911786d75680d0fa28ac81c846775f6a7c894f tree e83f2f19de9422f1a4ba24e406e7daf43b3781bd parent bc911786d75680d0fa28ac81c846775f6a7c894f author Benjamin Bergman 1382764756 -0500 committer Benjamin Bergman 1382764756 -0500 A little better at the top, a little worse at the bottom commit bc911786d75680d0fa28ac81c846775f6a7c894f 7088a1081ba353bd0bb8f3d38426d24861c694c2 tree 10db6fa2507bd3fa59b3cb6f9701fa48a453d968 parent 7088a1081ba353bd0bb8f3d38426d24861c694c2 author Jonas Fonseca 1382580247 -0700 committer Jonas Fonseca 1382580247 -0700 Fix reloading diffs of staged and unstaged changes commit 7088a1081ba353bd0bb8f3d38426d24861c694c2 7c949baaf493b812702ec78b087d2540e8827bf3 tree 19bbb16e4b01bcc7de1412563ca3bf3f5b1c819d parent 7c949baaf493b812702ec78b087d2540e8827bf3 author Jonas Fonseca 1382578049 -0700 committer Jonas Fonseca 1382578049 -0700 Fix map size assertion in parse_enum commit fc602a04798a0f1fcb6aa71e9613b0c0acbb7e2f 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166 tree 82e24ccb2d2cc98fe9e6ebd3464a9ebc31af9863 parent 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166 author Jonas Fonseca 1377865223 -0400 committer Jonas Fonseca 1382248987 -0400 Move view draw methods to draw module commit 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d tree f2a5888a534af6e521dfd1f9d4820d7a363b08ed parent 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d author Jonas Fonseca 1377825820 -0400 committer Jonas Fonseca 1382248987 -0400 Move option handling code to options.c commit 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad tree deafe0b382f3cfb977dc659366648ab5fde465f4 parent 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad author Jonas Fonseca 1377823028 -0400 committer Jonas Fonseca 1382248987 -0400 Move option declarations to separate files commit 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad 7ecc9fb460c833fa6f669ef2e81b804441b00b95 tree 1e2eaf1d68d0663d9018c38b960f8b55fd7b6399 parent 7ecc9fb460c833fa6f669ef2e81b804441b00b95 author Jonas Fonseca 1377822278 -0400 committer Jonas Fonseca 1382248987 -0400 Use symbols to track diff and log argument formatting commit 7ecc9fb460c833fa6f669ef2e81b804441b00b95 aa2eabbb7879cabe87b2fa22d186848ebf51497d tree d83e96ffc715863c88b2906b1256040fcd74c206 parent aa2eabbb7879cabe87b2fa22d186848ebf51497d author Jonas Fonseca 1377821969 -0400 committer Jonas Fonseca 1382248986 -0400 Group environment-based options commit aa2eabbb7879cabe87b2fa22d186848ebf51497d 951666702f8705388fc3b980ce09ad4be069fe30 tree b9bae82e2fcacff2c65a6d8ca0ac18abf2d4b1b5 parent 951666702f8705388fc3b980ce09ad4be069fe30 author Jonas Fonseca 1378434482 -0400 committer Jonas Fonseca 1382248986 -0400 Move refs helpers to refs module commit 951666702f8705388fc3b980ce09ad4be069fe30 d9c8a7473f3c81957316998910305b8bc346ee89 tree 2390627cd8caf71626ef73c602338479ad33db00 parent d9c8a7473f3c81957316998910305b8bc346ee89 author Jonas Fonseca 1377821898 -0400 committer Jonas Fonseca 1382248986 -0400 Move repository information to repo.[ch] commit d9c8a7473f3c81957316998910305b8bc346ee89 c531bcde787601952c018551f27f27a4d07afb24 tree 5de054e17653f35c549d3d0f422c928f63a82264 parent c531bcde787601952c018551f27f27a4d07afb24 author Jonas Fonseca 1377735198 -0400 committer Jonas Fonseca 1382248986 -0400 Add tool to generate doc from data structures commit c531bcde787601952c018551f27f27a4d07afb24 f0161de385a0f3240d0a7d11c7ff582a83759942 tree 92b1bbcf2eb25fd558d5cad43f22c2090e9d455a parent f0161de385a0f3240d0a7d11c7ff582a83759942 author Jonas Fonseca 1377609285 -0400 committer Jonas Fonseca 1382248986 -0400 Move view declarations to view.h commit f0161de385a0f3240d0a7d11c7ff582a83759942 9abb2ac9aa375f0794ee84a5d258128f1258dd0b tree 5e0f47015f82a8f48db7c88dffd587c93b5fb239 parent 9abb2ac9aa375f0794ee84a5d258128f1258dd0b author Jonas Fonseca 1377609022 -0400 committer Jonas Fonseca 1382248986 -0400 Move keybinding and run requests to keys.[ch] commit 9abb2ac9aa375f0794ee84a5d258128f1258dd0b 31331173eadd9efaba2f7044e4e141127ad98ee9 tree e6c0d0f4b379efa1ffc8bc0aabcef7308ba4521c parent 31331173eadd9efaba2f7044e4e141127ad98ee9 author Jonas Fonseca 1379026390 -0400 committer Jonas Fonseca 1382248985 -0400 Move line and color code to line.c commit 31331173eadd9efaba2f7044e4e141127ad98ee9 d1cc009c134f143befffcff148ff33e12f3fc06b tree a596ed1293fc493f8005f42e2a4db7ab13b69900 parent d1cc009c134f143befffcff148ff33e12f3fc06b author Jonas Fonseca 1349143875 -0400 committer Jonas Fonseca 1382248985 -0400 Move line definitions to line.h commit d1cc009c134f143befffcff148ff33e12f3fc06b 1569d15bf38d0a15683b5a73c51763871225e9b9 tree af32e5ba3a47a44893a8eb631cb033174e632089 parent 1569d15bf38d0a15683b5a73c51763871225e9b9 author Jonas Fonseca 1377607388 -0400 committer Jonas Fonseca 1382248985 -0400 Move request handling code to request.c commit 1569d15bf38d0a15683b5a73c51763871225e9b9 a48b0f5dd687202110498d1775edcc6a3bdf6c72 tree 14afa84fea795fac6beec02db5b1953c8ea98269 parent a48b0f5dd687202110498d1775edcc6a3bdf6c72 author Jonas Fonseca 1377607333 -0400 committer Jonas Fonseca 1382248985 -0400 Move request definitions to request.h commit a48b0f5dd687202110498d1775edcc6a3bdf6c72 0db5d56c7a0c1e74a481387dd22e0da603be902f tree 929ddd7ba53bb299fe99ef9ce5ee43c9650ab42e parent 0db5d56c7a0c1e74a481387dd22e0da603be902f author Jonas Fonseca 1349143750 -0400 committer Jonas Fonseca 1382248985 -0400 Move view macro to tig.h commit 0db5d56c7a0c1e74a481387dd22e0da603be902f 7c949baaf493b812702ec78b087d2540e8827bf3 tree 29917131dafd0d1041c80141b7396e28e28a648f parent 7c949baaf493b812702ec78b087d2540e8827bf3 author Jonas Fonseca 1377864465 -0400 committer Jonas Fonseca 1382248985 -0400 Move enums and various utility methods to util module commit 7c949baaf493b812702ec78b087d2540e8827bf3 536d565fcd789a2ea9dda43b3ae989e9d651af55 tree 93d3104b94f044a1c7772ca60a63ef4b5ee83b66 parent 536d565fcd789a2ea9dda43b3ae989e9d651af55 author Jonas Fonseca 1382226054 -0400 committer Jonas Fonseca 1382248932 -0400 Refactor defined enum maps to contain size information The existing struct enum_map is renamed to enum_map_entry. commit 536d565fcd789a2ea9dda43b3ae989e9d651af55 57787a3668d28808764dd1525a1157e3564d9b46 tree a679b29f2740f740b826d89f82c049b04bc99cb0 parent 57787a3668d28808764dd1525a1157e3564d9b46 author Jonas Fonseca 1382229219 -0400 committer Jonas Fonseca 1382248932 -0400 Detect renames when generating the announcement commit 57787a3668d28808764dd1525a1157e3564d9b46 0d68e41d80c642af766fe5adb320a9cc204f56dc tree be39dfa48d4c43f7a0667700b230d8fe312e0c96 parent 0d68e41d80c642af766fe5adb320a9cc204f56dc author Jonas Fonseca 1382225913 -0400 committer Jonas Fonseca 1382225929 -0400 Fix warning about uninitialized lineno variable commit 0d68e41d80c642af766fe5adb320a9cc204f56dc c14792afc41efcb1126ca0ab896eac6d1a12e580 tree 5879870a174f110d6ee8facae1e92ff032ccd048 parent c14792afc41efcb1126ca0ab896eac6d1a12e580 author Jonas Fonseca 1382133286 -0400 committer Jonas Fonseca 1382133286 -0400 Set the commit reference when opening the blame view from the blob view This is what tree_request does. Else the blame view is opened against an unrelated version of %(ref) or HEAD. commit c14792afc41efcb1126ca0ab896eac6d1a12e580 bf740aa9b7afc29a05f2bc6a8b44035e639fda0e tree 838f1135838567884b2c6c02a428542c6e3c1995 parent bf740aa9b7afc29a05f2bc6a8b44035e639fda0e author Jonas Fonseca 1381192201 -0400 committer Jonas Fonseca 1381192201 -0400 Fix clean rule to remove DocBook XML files in doc/ commit bf740aa9b7afc29a05f2bc6a8b44035e639fda0e f9399028a8ecdd7342bc977b7334fc76a902d3a7 tree 7d2442e3ecdba05ef9746ded3d8e38ff299bb89e parent f9399028a8ecdd7342bc977b7334fc76a902d3a7 author Jonas Fonseca 1381189194 -0400 committer Jonas Fonseca 1381189194 -0400 Fix and improve inter-document linking EOF assert_equals stdout <